首页 > 解决方案 > 如何在gensim中使用cosssim

问题描述

我的问题是关于 cossim 的使用。

我有一个非常大的功能的片段:

for elem in lList:
    temp = []
    try:
        x = dict(np.ndenumerate(np.asarray(model[elem])))
    except:
        if x not in embedDict.keys():
            x = np.random.uniform(low=0.0, high=1.0, size=300)
            embedDict[elem] = x
        else:
            x  =  dict(np.ndenumerate(np.asarray(embedDict[elem])))

    for w in ListWords:
        try:
            y =  dict(np.ndenumerate(np.asarray(model[w])))
        except:
            if y not in embedDict.keys():
                y = np.random.uniform(low=0.0, high=1.0, size=300)
                embedDict[w] = y
            else:
                y =  dict(np.ndenumerate(np.asarray(embedDict[w])))

        temp.append(gensim.matutils.cossim(x,y))

我得到以下异常:

File "./match.py", line 129, in getEmbedding
    test.append(gensim.matutils.cossim(x,y))
  File "./Python_directory/ENV2.7_new/lib/python2.7/site-packages/gensim/matutils.py", line 746, in cossim
    vec1, vec2 = dict(vec1), dict(vec2)
TypeError: cannot convert dictionary update sequence element #0 to a sequence

你能帮我解释一下这个例外是什么意思吗?

标签: pythonpython-2.7gensim

解决方案


gensim.matutils.cossim的参数应该是类型list of (int, float),但您使用的是字典。

异常发生在cossim具有以下cossim 实现的函数中:

vec1, vec2 = dict(vec1), dict(vec2)

使用正确的类型,dict(vec)可以:

dict([(1, 2.), (3, 4.), (5, 6.)])

但是如果你没有提供正确的类型,它会抛出异常,例如:

dict([1, 2, 3])

推荐阅读