python-3.x - 查找 2 个语句之间的语义相似性
问题描述
我目前正在使用python中的小型应用程序,并且我的应用程序具有搜索功能(当前使用difflib),但我想创建语义搜索,它可以根据用户输入的文本从我的数据库中提供前 5 或 10 个结果。它与谷歌搜索引擎的工作方式相同。我在这里找到了一些解决方案。
但问题是,以下来自一个解决方案的两个语句在语义上是不正确的。我不在乎这个。因为他们让事情变得太难了,这是我不想要的,而且解决方案将是一些预训练的神经网络模型或库,我可以从中轻松实现。
- 皮特和罗布在车站附近找到了一只狗。
- 皮特和罗伯从未在车站附近找到过狗
而且我还发现了一些解决方案,这些解决方案展示了使用gensim
和Glove
嵌入以及发现单词而不是句子之间的相似性。
我想要什么?
假设我的数据库有语句display classes
并且用户输入show
, showed
, displayed
,displayed class
等show types
是相同的。如果以上 2 个陈述相同,那么我也不在乎。displayed
并且displayed class
已经显示在 difflib 中。
需要注意的点
- 从固定的语句集中查找,但用户输入的语句可能不同
- 必须为语句工作
解决方案
我认为它不是gensim
嵌入。它是word2vec
嵌入的。不管是什么。
你需要 tensorflow_hub
Universal Sentence Encoder将文本编码为high-dimensional vectors
可用于text classification
、semantic similarity
和clustering
其他自然语言任务的文本。
我相信您在这里需要的是文本分类或语义相似性,因为您想找到最接近用户给出的前 5 或 10 个语句。
它很容易使用。但模型的大小约为 1GB。它适用于单词、句子、短语或短段落。输入是可变长度的英文文本,输出是一个 512 维向量。您可以在此处找到有关它的更多信息
代码
import tensorflow_hub as hub
import numpy as np
# Load model. It will download first time.
module_url = "https://tfhub.dev/google/universal-sentence-encoder-large/5"
model = hub.load(module_url)
# first data[0] is your actual value
data = ["display classes", "show", "showed" ,"displayed class", "show types"]
# find high-dimensional vectors.
vecs = model(data)
# find distance between statements using inner product
dists = np.inner(vecs[0], vecs)
# print dists
print(dists)
输出
array([0.9999999 , 0.5633253 , 0.46475542, 0.85303843, 0.61701006],dtype=float32)
结论
第一个值是与自身0.999999
之间的距离。第二是和之间的距离,最后是和之间的距离。display classes
display classes
0.5633253
display classes
show
0.61701006
display classes
show types
使用它,您可以找到给定输入和 db 中的语句之间的距离。然后根据距离对它们进行排名。
推荐阅读
- python - 如何使用任务切换器(Windows 10)获得当前窗口的焦点?
- javascript - 电子表格上的交叉引用名称以获取特定数据点(循环通过数组)
- ios - Xcode iOS 14 WidgetKit 并不总是附加到调试器
- javascript - 在 React 上导入多个图像
- r - 使用 R 验证从 spark.ml.regression.LinearRegressionModel 计算的系数
- mysql - 添加 and 语句时出现错误我应该在哪里插入 and 语句
- android - 如何将 gdax-Java 导入我的 android studio 应用程序
- android-studio - 如何从 GitHub 构建示例 Android 位置应用程序
- javascript - 在表中渲染多个组件反应
- domain-driven-design - ddd中上游上下文和下游上下文的关系