如何修复Spacy获取相似词时的TypeError错误?
问题解决:Spacy获取相似词时TypeError错误修复
错误原因
你拿到的most_similar是一个三元组,包含三个核心元素:
- 相似词的哈希ID二维数组(形状
(1, n)) - 向量索引数组
- 相似度得分数组
你的代码错误地遍历了整个三元组,并且试图用数组对象作为键去nlp.vocab.strings中查找单词,而nlp.vocab.strings只接受单个整数哈希ID,因此抛出TypeError: only size-1 arrays can be converted to Python scalars。
修复步骤
- 从
most_similar中提取出第一个元素(哈希ID数组),将二维数组转换为一维列表 - 遍历每个哈希ID,通过
nlp.vocab.strings[id]映射到对应的单词
修复后的代码
import spacy import numpy as np # 加载预训练模型 nlp = spacy.load("en_core_web_md") # 获取目标词向量 word_vec = nlp("japan").vector # 调整向量形状以匹配most_similar的输入要求 word_vec = np.reshape(word_vec, (1, -1)) # 获取Top3相似词的三元组结果 most_similar = nlp.vocab.vectors.most_similar(word_vec, n=3) # 将二维ID数组展平为一维列表 similar_ids = most_similar[0].flatten() # 逐个转换为对应的单词 similar_words = [nlp.vocab.strings[id] for id in similar_ids] print(similar_words)
补充说明
- 使用
flatten()可以通用处理不同形状的ID数组,比手动写[0][0]更灵活 - 如果需要同时获取相似度得分,可以提取第三个元素:
scores = most_similar[2].flatten(),再和单词配对输出
内容的提问来源于stack exchange,提问作者kawa
相关产品推荐
相关产品推荐

