python - 在包含词嵌入的数组中循环
问题描述
我想检查第一个数组的第一个元素与第二个数组的所有其他元素的余弦相似度,然后检查第一个元素的第二个元素与第二个数组的所有元素的余弦相似度,依此类推。我还想存储所有匹配的数组。
df1
title
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
df2
claim
fact checked claims one
fact checked claims tweet
from sklearn.metrics.pairwise import cosine_similarity
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('bert-base-nli-mean-tokens')
title=df1['title'].tolist()
claim=df2['claim'].tolist()
title=model.encode(title)
claim=model.encode(claim)
from sklearn.metrics.pairwise import cosine_similarity
for i in title:
for j in claim:
cosine_similarity(title[i].reshape(1,-1),claim[j].reshape(1,-1))
错误
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-26-7d0694ac4823> in <module>()
1 for i in title:
2 for j in claim:
----> 3 cosine_similarity(title[i].reshape(1,-1),claim[j].reshape(1,-1))
4
IndexError: arrays used as indices must be of integer (or boolean) type
解决方案
该代码未使用整数/布尔类型变量进行索引。
实际上,代码中的 for 循环是for-each而不是for-range,因此变量 i 和 j 等于整行(字符串),而不是它们相对于整个文件的索引。
因此,您可以更改为 for-range 循环:
for i in range(len(title)):
for j in range(len(claim)):
cosine_similarity(title[i].reshape(1,-1),claim[j].reshape(1,-1))
或直接重塑和比较 i 和 j:
for i in title:
for j in claim:
cosine_similarity(i.reshape(1,-1),j.reshape(1,-1))
推荐阅读
- python - Python 2to3 不会改变 #!/usr/bin/python
- vba - VBA 向下列检查字符串值?
- javascript - Safari webkitAudioContext.createBuffer API 引发 NotSupportedError 异常
- java - 有没有办法在不显示任何内容(GUI、进度条、...)的情况下运行 -.jar 文件(使用 javaFx 创建)?
- google-plus - Google tokeninfo 正在返回已弃用的 Google Plus 范围,即使在提供新范围时也是如此。该怎么办?
- angular - Angular Material 表数据源不显示数据
- python - Django Rest Framework 从模型中获取序列化程序
- python - Django 获取一个月中每一天的对象数量
- javascript - 我想通过单击第一个和最后一个元素来实现卡片的旋转
- rx-java2 - 如何仅处理一段时间内的最后一个事件?