我正在开展一个项目,要求我将短语或关键字与一组相似的关键字相匹配。我需要对它进行语义分析。
一个例子:
相关QT
廉价医疗保险
负担得起的医疗保险
低成本医疗保险
更少的健康计划
廉价的健康保险
共同意义
低成本医疗保险
此处Common Fault列下的单词应与Under Related QT列相匹配。我看了一堆工具和技术来做同样的事情。 S-Match似乎非常有前途,但我必须使用Python而不是Java。潜在语义分析看起来也不错,但我认为更多的是基于关键字而不是关键字匹配的文档分类。我对NLTK有点熟悉。有人可以提供一些见解,我应该采取什么方向,以及我应该使用哪些工具?
答案 0 :(得分:4)
如果你有一个大的语料库,这些单词出现,可用,你可以训练一个模型来表示每个单词作为向量。例如,您可以通过word2vec的“skip-gram和CBOW模型”使用深度学习,它们在gensim software package
中实现在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 :(得分:3)
当潜在语义分析引用“文档”时,它基本上是指任何长于1的单词集。您可以使用它来计算文档与另一个文档之间,单词与另一个单词之间的相似性,或者在单词和文档之间。所以你当然可以将它用于你选择的应用程序。
其他可能有用的算法包括:
答案 2 :(得分:2)
我首先来看看Wordnet.它将为您提供数十万个术语的真实同义词和其他单词关系。由于您标记了nltk
:它为Wordnet提供了绑定,您可以将其用作特定于域的解决方案的基础。
仍然在NLTK中,查看NLTK书籍introduction中方法similar()
的讨论,以及它所基于的课程nltk.text.ContextIndex
。 (一切都很简单,但可能你真的需要它。)