Python 使用什么NLP工具来匹配具有相似含义或语义的短语

Python 使用什么NLP工具来匹配具有相似含义或语义的短语,python,nlp,nltk,latent-semantic-indexing,Python,Nlp,Nltk,Latent Semantic Indexing,我正在从事一个项目,该项目要求我将一个短语或关键字与一组相似的关键字进行匹配。我需要对同样的内容进行语义分析 例如: 相关QT 便宜的健康保险 负担得起的健康保险 低成本医疗保险 为更少的人制定健康计划 廉价医疗保险 共同意义 低成本医疗保险 此处“常用含义”列下的单词应与“相关QT”列下的单词匹配。我看了很多工具和技术来做同样的事情。S-Match看起来很有前途,但我必须使用Python,而不是Java。另外,潜在语义分析看起来不错,但我认为它更适合基于关键字而不是关键字匹配的文档分类。我对N

我正在从事一个项目,该项目要求我将一个短语或关键字与一组相似的关键字进行匹配。我需要对同样的内容进行语义分析

例如:

相关QT
便宜的健康保险
负担得起的健康保险
低成本医疗保险
为更少的人制定健康计划
廉价医疗保险

共同意义

低成本医疗保险


此处“常用含义”列下的单词应与“相关QT”列下的单词匹配。我看了很多工具和技术来做同样的事情。S-Match看起来很有前途,但我必须使用Python,而不是Java。另外,潜在语义分析看起来不错,但我认为它更适合基于关键字而不是关键字匹配的文档分类。我对NLTK有点熟悉。有没有人能提供一些见解,说明我应该朝什么方向前进,以及我应该使用什么工具来实现这一目标?

我首先要看一看,它将为您提供数十万个术语的真正同义词和其他单词关系。由于您标记了
nltk
:它为Wordnet提供绑定,您可以将其用作特定于域的解决方案的基础


仍然在NLTK中,请查看NLTK书中对方法
similor()
的讨论,以及它所基于的类。(虽然很简单,但这可能是你真正需要的一切)。

如果你有一个大的语料库,这些单词出现在那里,你可以训练一个模型,将每个单词表示为向量。例如,您可以通过word2vec的“skip gram和CBOW模型”使用深度学习,它们在

在word2vec模型中,每个单词都由一个向量表示,然后可以通过测量表示单词的向量的余弦来测量两个单词之间的语义相似性。语义相似词应具有高余弦相似性,例如:

model.similarity('cheap','inexpensive') = 0.8
vector1 = model['cheap']+model['health']+model['insurance']
vector2 = model['low']+model['cost']+model['medical']+model['insurance']

similarity(vector1,vector2) = 0.7
(该值是虚构的,仅供说明。)

此外,根据我的实验,将相对较少的单词(即最多3或4个单词)相加可以保留语义,例如:

model.similarity('cheap','inexpensive') = 0.8
vector1 = model['cheap']+model['health']+model['insurance']
vector2 = model['low']+model['cost']+model['medical']+model['insurance']

similarity(vector1,vector2) = 0.7
(同样,只是为了举例说明。)


您可以将单词之间的语义相似性度量用作生成聚类的度量。

当潜在语义分析指的是“文档”时,它基本上指的是长度超过1的任何一组单词。您可以使用它来计算文档和另一个文档、单词和另一个单词或单词和文档之间的相似性。因此,您当然可以将其用于您选择的应用程序

其他可能有用的算法包括:

  • 随机索引()非常容易实现,没有太多困难。其中还有一个实现,但它是用Java实现的,而不是用Python实现的
  • 主题建模()-在
  • DISSECT()-Python在
  • BEAGLE()-Python在

您的项目范围是什么?如果你处理的是一些核心关键词或词义,那么手工指定单词等价类可能很容易(例如,一个词组列表,意思是“低成本健康保险”)。我必须从大约200000个单词中提取语义相似的单词,如低成本健康保险。我在想,在对这些单词运行初始算法后,我必须应用聚类来生成某种中心(单词),它将匹配其集群中语义相似的单词。整个过程无人监督。