gpt4 book ai didi

python - 未计算列表之间的余弦相似度

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:48 25 4
gpt4 key购买 nike

我目前正在尝试计算列表之间的相似性,并在数据框中创建一个新列来显示结果。但是,当我尝试执行此操作时,它会为我的数据的所有条目返回 0(如下所示)


list1 list2 similarity
[action, adventure,...] [[zoe_saldana, action,...],..] [0.0, 0.0,...]
... ... ...

这是我正在使用的代码:

def counter_cosine_similarity(c1, c2):
terms = set(c1).union(c2)
dotprod = sum(c1.get(k, 0) * c2.get(k, 0) for k in terms)
magA = math.sqrt(sum(c1.get(k, 0)**2 for k in terms))
magB = math.sqrt(sum(c2.get(k, 0)**2 for k in terms))
try:
return dotprod / (magA * magB)
except ZeroDivisionError:
pass


#SIMILARITY#
def get_similarity (row):
similarities = []
for idx, list_of_lists in enumerate(row['list1']):
for l1 in list_of_lists:
counter_list1=Counter(l1)
counter_list2 = Counter(row['list2'])
similarities.append(counter_cosine_similarity(counter_list1,counter_list2))

return similarities

frame['similarity']=frame.apply(lambda row: get_similarity(row), axis=1)

我一直试图了解发生了什么,但还没有得出结论。特别是因为当我按照下面的方式执行此操作时,相似性列表会返回正确的值:

similarity=[]
for idx, list_of_lists in enumerate(frame['list1']):
for l1 in list_of_lists:
counter1=Counter(l1)
for idx1 , l2 in enumerate(frame['list2']):
counter2=Counter(l2)
if idx==idx1:
similarity.append(counter_cosine_similarity(counter1,counter2))


如果有人可以提供帮助,我将非常感激!

最佳答案

既然您只需将它们附加到列表中就可以正确地获得相似性,那么您是否有理由不能这样做:

frame['similarity'] = similarity

关于python - 未计算列表之间的余弦相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com