python - 如何为列表中的每个句子而不是整个列表创建嵌入?
问题描述
我需要为列表中的文档生成嵌入,计算语料库 1 的每个句子与语料库 2 的每个句子之间的余弦相似度,对它们进行排名并给出最佳拟合:
embed = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
embeddings1 = ["I'd like an apple juice",
"An apple a day keeps the doctor away",
"Eat apple every day",
"We buy apples every week",
"We use machine learning for text classification",
"Text classification is subfield of machine learning"]
embeddings1 = embed(embeddings1)
embeddings2 = ["I'd like an orange juice",
"An orange a day keeps the doctor away",
"Eat orange every day",
"We buy orange every week",
"We use machine learning for document classification",
"Text classification is some subfield of machine learning"]
embeddings2 = embed(embeddings2)
print(cosine_similarity(embeddings1, embeddings2))
向量似乎工作正常(由于数组的形状)以及余弦相似度的计算。我的问题是通用句子编码器没有将它们与相应的字符串一起发送出去,这是至关重要的。它总是必须找到合适的,我必须能够根据余弦相似度的值进行排序
array([[ 0.7882168 , 0.3366559 , 0.22973989, 0.15428472, -0.10180502,
-0.04344492],
[ 0.256085 , 0.7713026 , 0.32120776, 0.17834462, -0.10769081,
-0.09398925],
[ 0.23850328, 0.446203 , 0.62606746, 0.25242645, -0.03946173,
-0.00908459],
[ 0.24337521, 0.35571027, 0.32963073, 0.6373588 , 0.08571904,
-0.01240187],
[-0.07001016, -0.12002315, -0.02002328, 0.09045915, 0.9141338 ,
0.8373743 ],
[-0.04525191, -0.09421931, -0.00631144, -0.00199519, 0.75919366,
0.9686416 ]]
目标是代码发现自己在第二个语料库中“我想要一个苹果汁”的最高余弦相似度是“我想要一个橙汁”并匹配它们。
我尝试了循环,例如:
for sentence in embeddings1:
print(sentence, embed(sentence))
导致此错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: input must be a vector, got shape: []
[[{{node StatefulPartitionedCall/StatefulPartitionedCall/text_preprocessor/tokenize/StringSplit/StringSplit}}]] [Op:__inference_restored_function_body_5285]
Function call stack:
restored_function_body
解决方案
正如我在评论中提到的,您应该按如下方式编写 for 循环:
for sentence in embeddings1:
print(sentence, embed([sentence]))
原因很简单,embed 期望字符串列表作为输入。没有比这更详细的解释了。
推荐阅读
- android-tv - 我无法使用 android studio 编辑我的 android 电视应用程序的设计
- email - 如何从 AMP 为电子邮件游乐场发送测试电子邮件?
- java - 命令提示符:线程“main”中的异常 java.lang.UnsupportedClassVersionError: org/testng/TestNG : Unsupported major.minor version 52.0
- java - 通过基于 JMS 网络的 FAA 航行通告?
- swift - CKQueryNotification.recordID:无法识别的选择器发送到实例
- swift - 如何在 swift UITests 中的 XCUIApplication 中设置暗模式?
- firebase - nativescript-vue / firebase.query 中的错误:ReferenceError:找不到变量:FIRDatabase
- android - 在 @Query 的引用部分使用变量
- windows - 对任何 set /p 值使用全局变量?
- text - 如何在记事本++中的开始和结束括号之间快速跳转?