[英]What NLP tools to use to match phrases having similar meaning or semantics
我正在开展一个项目,要求我将短语或关键字与一组相似的关键字相匹配。 我需要对它进行语义分析。
一个例子:
相关QT
廉价的健康保险
实惠的健康保险
低成本医疗保险
健康计划少
廉价的健康保险
常识
低成本的健康保险
Common Common列下的单词应与Under Related QT列相匹配。 我看了一堆工具和技术来做同样的事情。 S-Match似乎非常有前途,但我必须使用Python而不是Java。 潜在语义分析看起来也不错,但我认为更多的是基于关键字而不是关键字匹配的文档分类。 我对NLTK有点熟悉。 有人可以提供一些有关我应该采取的方向以及我应该使用哪些工具的见解?
如果您有一个大的语料库,这些单词出现,可用,您可以训练模型将每个单词表示为向量。 例如,您可以通过word2vec的“skip-gram和CBOW模型”使用深度学习,它们在gensim软件包中实现
在word2vec模型中,每个单词由向量表示,然后您可以通过测量代表单词的向量的余弦来测量两个单词之间的语义相似性。 语义相似的单词应具有高余弦相似度,例如:
model.similarity('cheap','inexpensive') = 0.8
(该值仅用于说明。)
此外,根据我的实验,总结相对较少数量的单词(即最多3或4个单词)可以保留语义,例如:
vector1 = model['cheap']+model['health']+model['insurance']
vector2 = model['low']+model['cost']+model['medical']+model['insurance']
similarity(vector1,vector2) = 0.7
(再次,仅用于说明。)
您可以在单词之间使用此语义相似性度量作为生成群集的度量。
当潜在语义分析引用“文档”时,它基本上意味着任何长于1的单词集。您可以使用它来计算文档与另一个文档之间,单词与另一个单词之间或单词之间的相似性和一份文件。 所以你当然可以将它用于你选择的应用程序。
其他可能有用的算法包括:
我首先来看看Wordnet。 它将为您提供数十万个术语的真实同义词和其他单词关系。 由于您标记了nltk
:它为Wordnet提供了绑定,您可以将其用作特定于域的解决方案的基础。
仍然在NLTK中,查看NLTK书籍简介中 similar()
方法的讨论,以及它所基于的类nltk.text.ContextIndex
。 (一切都很简单,但它可能是你真正需要的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.