【问题标题】:What NLP tools to use to match phrases having similar meaning or semantics使用什么 NLP 工具来匹配具有相似含义或语义的短语
【发布时间】:2017-11-08 09:00:11
【问题描述】:

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

一个例子:

相关QT
便宜的健康保险
负担得起的健康保险
低成本医疗保险
少花钱的健康计划
便宜的医疗保险

共同意义

低成本健康保险

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

【问题讨论】:

  • 你的项目范围是什么?如果您正在处理一些核心关键词或意义,手动指定单词等价类可能很容易(例如,表示“低成本健康保险”的短语单词列表)。
  • 我必须从大约 200000 个单词中提取语义相似的单词,例如低成本健康保险。我想我必须在对这些单词运行初始算法后应用聚类以生成某种中心(单词),这些中心(单词)将匹配其集群中语义相似的单词。整个过程无人监督。

标签: python nlp nltk latent-semantic-indexing


【解决方案1】:

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

在 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

(再次,只是为了说明。)

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多