调用SparseTermSimilarityMatrix.inner_product()报bool对象解包错误
问题解决:TypeError: cannot unpack non-iterable bool object
错误原因
调用SparseTermSimilarityMatrix.inner_product()时,传入的normalized=True不符合方法参数要求。该方法的normalized参数需要接收一个二元组(比如(True, True)),分别对应X向量和Y向量是否需要归一化;但你传入了单个布尔值True,导致代码尝试将单个布尔值拆成两个变量时触发错误。
从报错的源码行normalized_X, normalized_Y = normalized能明显看出,方法期望normalized是可迭代的二元结构,单个布尔值无法被解包。
解决方案
将normalized=True替换为二元组形式,根据需求选择以下任意一种:
- 同时归一化X和Y:
normalized=(True, True) - 只归一化X:
normalized=(True, False) - 只归一化Y:
normalized=(False, True) - 保持原有向量的归一化状态:
normalized=('maintain', 'maintain')
修改后的代码示例:
from gensim.similarities import ( WordEmbeddingSimilarityIndex, SparseTermSimilarityMatrix ) w2v_model = api.load("glove-wiki-gigaword-50") similarity_index = WordEmbeddingSimilarityIndex(w2v_model) similarity_matrix = SparseTermSimilarityMatrix(similarity_index, dictionary) score = similarity_matrix.inner_product( X = [ (0, 1), (1, 1), (2, 1), (3, 2), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 3) ], Y = [(221, 1), (648, 1), (8238, 1)], normalized = (True, True) # 修改为二元组形式 )
内容的提问来源于stack exchange,提问作者Amit Pathak
相关产品推荐
相关产品推荐

