python - 用于比较相关含义的短语和句子的算法
问题描述
我是机器学习的新手,如果你能给我一个提示,让我知道使用正确/简单的工具来比较由不同单词组成但具有一个含义的任何两个短语的算法的正确方向,我将不胜感激。随机示例:
Phrase A:
"Solving mac computers operating system issues"
Phrase B:
"Fixing apple OS X errors"
任务是分析大量由不同单词组成的短语和句子,并揭示那些具有相同或相似含义的短语和句子。
我想知道这是否真的可行,如果可以,使用什么工具或编程语言以及它是如何工作的。
如果存在为此目的使用同义词词典的算法?
如果 Google 有这样的需求,他们是如何解决这样的任务的?我知道他们解析和分析大量数据,但在这种需要时他们会怎么做?
谢谢!!
解决方案
您可以通过确定段落之间的“语义相似性”(含义的相似性)来解决这个问题。目前,最好的方法是利用深度学习算法。
具体来说,我广泛使用了以下库:https ://github.com/UKPLab/sentence-transformers
该库具有 BERT 和 XLNet 等模型,这些模型已经“微调”(适应)以将段落投影到表示输入含义的 768 维向量空间的任务。
这个想法是,两个结果输出向量彼此越接近(余弦距离、曼哈顿距离等),它们的输入通道的含义就越接近。
这是一个小代码片段,演示了如何使用这个库:
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)]
。当距离(每个元组中的第二项)越小,句子在语义上与锚点越相似。
推荐阅读
- python-3.x - 找到空行python后停止读取CSV文件
- php - 如何在 laravel 中使用 DomPDF 打印图像?
- r - r - 找到转动的一侧以实现两个轴承之间的最小角度
- reactjs - 问题让 HighchartsReact 组件正确填写容器
- spring-boot - 如何使用resttemplate对url进行编码,在查询参数中包含特殊字符
- scheme - Guile Scheme GOOPS 插槽访问器不是有效的通用函数错误
- python - 使用 python 抓取 CSV 数据
- javascript - 如何在 NestJS 中提供静态图像
- python - 如何为列表中的每个项目添加数字?
- c# - Blazor 父组件在子组件中的 onclick 事件后意外重新初始化