16

我正在做一个项目,该项目要求我将短语或关键字与一组相似的关键字进行匹配。我需要为此执行语义分析。

一个例子:

相关 QT
廉价健康保险
负担得起的健康保险
低成本医疗保险
健康计划,用于更
便宜的健康保险

共同意义

低成本健康保险

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

4

3 回答 3

6

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

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

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

(再次,仅用于说明。)

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

于 2014-12-24T21:54:32.653 回答
6

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

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

于 2014-12-27T18:54:35.317 回答
2

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

仍然在 NLTK 中,请查看NLTK 书籍介绍similar()中对方法的讨论,以及它所基于的类。(一切都很简单,但它可能就是你真正需要的)。nltk.text.ContextIndex

于 2013-01-06T14:01:21.983 回答