使用Word2Vec时遇‘空字符串不在词汇表’KeyError问题求助
解决Word2Vec句子向量转换时的KeyError问题
错误原因
- 你用
re.split(" |;", row)拆分文本时,会生成空字符串''——比如遇到连续空格、分号前后带空格,或者文本开头/结尾是分隔符的情况,都会出现这种空元素。 - 而训练Word2Vec模型时,用的是
nltk.word_tokenize的分词结果,这个过程不会产生空字符串,因此空字符串不在模型的词汇表中,调用model.wv['']就会触发KeyError。
解决方法
方法1:过滤拆分结果中的空字符串
直接在拆分后剔除空元素,避免传入不存在的词汇:
import re train_vectors = [model.wv[word for word in re.split(" |;", row) if word.strip() != ''] for row in concatenated_text]
方法2:统一分词方式(更推荐)
既然训练模型用的是nltk.word_tokenize,生成向量时也应该用相同的分词逻辑,保证词汇完全匹配,同时避免手动拆分的漏洞:
def tokenize_concat_text(text): # 按分号拆分双语句子,过滤空内容 sentences = [s.strip() for s in text.split(';') if s.strip()] # 对每个句子用nltk分词后合并 tokens = [] for s in sentences: tokens.extend(nltk.word_tokenize(s)) return tokens train_vectors = [model.wv[tokenize_concat_text(row)] for row in concatenated_text]
内容的提问来源于stack exchange,提问作者InvalidHop
相关产品推荐
相关产品推荐

