我正在开发一个项目,该项目要求我将短语或关键字与一组相似的关键字相匹配。我需要对其进行语义分析。
举个例子:
相关QT
便宜的健康保险
负担得起的健康保险
低成本医疗保险
健康计划少
便宜的医疗保险
常用含义
低成本健康保险
此处“常见含义”列下的单词应与“相关 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 书中的
introduction中对方法
similar()
的讨论,以及它所基于的类 nltk.text.ContextIndex
。 (一切仍然很简单,但这可能是您真正需要的)。