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

Aru*_*yam 13 python nlp nltk latent-semantic-indexing

我正在开展一个项目,要求我将短语或关键字与一组相似的关键字相匹配.我需要对它进行语义分析.

一个例子:

相关的QT
廉价医疗保险
实惠的医疗保险
低成本的医疗保险
健康计划,以便更
便宜的健康保险

常识

低成本的健康保险

Common Common列下的单词应与Under Related QT列相匹配.我看了一堆工具和技术来做同样的事情.S-Match似乎非常有前途,但我必须使用Python而不是Java.潜在语义分析看起来也不错,但我认为更多的是基于关键字而不是关键字匹配的文档分类.我对NLTK有点熟悉.有人可以提供一些有关我应该采取的方向以及我应该使用哪些工具的见解?

Dav*_*sta 6

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

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

model.similarity('cheap','inexpensive') = 0.8
Run Code Online (Sandbox Code Playgroud)

(数值是编出来的,仅供说明。)

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

vector1 = model['cheap']+model['health']+model['insurance']
vector2 = model['low']+model['cost']+model['medical']+model['insurance']

similarity(vector1,vector2) = 0.7
Run Code Online (Sandbox Code Playgroud)

(同样,只是为了说明。)

您可以使用单词之间的这种语义相似性度量作为生成集群的度量。


Gab*_*iel 6

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

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