【问题标题】:Algorithm for comparing phrases and sentences for the relevant meaning用于比较相关含义的短语和句子的算法
【发布时间】:2020-06-21 19:42:39
【问题描述】:

我是机器学习的新手,如果您能给我一个提示,让我知道使用正确/简单的工具来比较任何两个由不同单词组成但具有一个意思。随机示例:

Phrase A:
"Solving mac computers operating system issues"

Phrase B:
"Fixing apple OS X errors"

任务是分析大量由不同单词组成的短语和句子,并揭示那些具有相同或相似含义的短语和句子。

我想知道这是否真的可行,如果可以,使用什么工具或编程语言以及它是如何工作的。

是否存在为此目的使用同义词词典的算法?

如果 Google 有这样的需求,他们是如何解决这样的任务的? 我知道他们会解析和分析大量数据,但在这种需要时他们会怎么做呢?

谢谢!!

【问题讨论】:

标签: python machine-learning compare match semantics


【解决方案1】:

您可以通过确定段落之间的“语义相似性”(含义的相似性)来解决这个问题。目前,最好的方法是利用深度学习算法。

具体来说,我广泛使用了以下库:https://github.com/UKPLab/sentence-transformers

该库包含 BERT 和 XLNet 等模型,这些模型已“微调”(适应)以将段落投影到代表输入含义的 768 维向量空间的任务。

这个想法是,两个结果输出向量彼此越接近(余弦距离、曼哈顿距离等),它们的输入段落的含义就越接近。

这里有一段小代码 sn-p 演示了如何使用这个库:

import numpy as np

embedder = SentenceTransformer('bert-base-nli-mean-tokens')

def manhattan_distance(x, y):
    return np.sum(np.abs(x - y))

anchor_phrase = "Solving mac computers operating system issues"
candidate_phrases = [
    "Fixing apple OS X errors",
    "Troubleshooting iPhone problems"
]

embeddings = embedder.encode([anchor_phrase] + candidate_phrases)
anchor_embedding = embeddings[0]
candidates = list(zip(candidate_phrases, embeddings[1:]))
candidates = [(x[0], manhattan_distance(anchor_embedding, x[1])) for x in candidates]
print(candidates)

这应该打印[('Fixing apple OS X errors', 275.67545), ('Troubleshooting iPhone problems', 313.4759)]。当距离(每个元组中的第二项)越小,句子在语义上与锚点越相似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2012-09-04
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    相关资源
    最近更新 更多