从Word2Vec提取词嵌入:使用gensim时词表大小不符预期的咨询
问题根因
你遇到的词表大小异常,和两个核心使用误区有关,和输入格式本身无关——你现在的列表结构其实是符合Word2Vec对语料的要求的(即可迭代对象,每个元素为拆分好的分词列表,代表一个句子):
- 入表阈值设置过高:
min_count=3的作用是过滤掉语料中出现次数少于3次的词汇。你当前的语料里每个词汇仅出现1次,远达不到入表要求,最终没有任何你的目标词被收录,输出的vocab=1是模型内置的未知词()占位符,不是真实收录的有效词汇。 - 语料结构无法支撑有效训练:Word2Vec依靠词汇的上下文共现关系学习嵌入,你当前的输入是每个句子仅包含1个独立词汇,没有任何上下文关联,就算调整参数让词入表,训练得到的也是随机初始化的无意义向量。另外需要注意,4.0版本及以上的gensim已经将原
size参数重命名为vector_size,继续使用size会触发兼容警告,甚至无法正常生效。
快速测试接口的示例代码
如果你只是想验证调用逻辑是否正常,不需要追求嵌入的实际语义效果,可以参考以下调整后的配置:
from gensim.models import Word2Vec list_word = [['Word'], ['ant'], ['bear'], ['beaver'], ['bee'], ['bird']] model = Word2Vec( list_word, min_count=1, # 收录所有出现1次及以上的词汇 vector_size=12, window=1 ) # 查看实际收录的词表 print("实际收录的词汇:", model.wv.index_to_key) # 查看单个词的嵌入向量 print("bear对应的嵌入:", model.wv['bear'])
实用的嵌入获取方案
如果你的目标是得到带有实际语义价值的词嵌入,不建议用如此小规模的自制语料训练。直接加载在大规模通用语料上预训练完成的Word2Vec模型,查询目标词对应的嵌入即可,不需要从零开始训练,得到的向量质量远高于小语料自训的结果。
内容的提问来源于stack exchange,提问作者Aswiderski
相关产品推荐
相关产品推荐

