【问题标题】:Looping in Array containing word-embedding在包含词嵌入的数组中循环
【发布时间】:2021-08-11 13:45:45
【问题描述】:

我想检查第一个数组的第一个元素与第二个数组的所有其他元素的余弦相似度,然后检查第一个元素的第二个元素与第二个数组的所有元素的余弦相似度,依此类推。我还想存储所有匹配的数组。

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

【问题讨论】:

  • 欢迎来到Stack Overflow.!如果不查看产生问题的数据和您编写的代码,就很难回答您的问题。请阅读如何提出一个好的问题并尝试发布Minimal Reproducible Example,以便我们更好地帮助您。
  • @itprorh66 哎呀,我已经添加了数据集,
  • 请贴出以 Traceback 开头的整个错误信息
  • @itprorh66 更新错误,请查看

标签: python python-3.x loops for-loop word-embedding


【解决方案1】:

代码未使用整数/布尔类型变量进行索引。

实际上,您代码中的 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))

或者直接reshape比较i和j:

for i in title:
    for j in claim:
        cosine_similarity(i.reshape(1,-1),j.reshape(1,-1))

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多