test = pd.read_csv('test.csv')train = pd.read_csv('train.csv')
def prep_corpus(): sentences = [] for x in test['title']: sentences.append(x.strip().split()) for x in train['title']: sentences.append(x.strip().split()) return sentencescorpus = prep_corpus()
语料库是由句子列表组成的,其中一个句子是一个词列表:
word_model = Word2Vec(corpus, workers = 2,sg=1, iter = 5)word_model['maybelline', 'clear'].shape
我有一个似乎可以工作的词向量:
然而,当我尝试使用word_model[‘intensity’]时,我得到了错误消息:“词’intensity’不在词汇表中”
尽管’intensity’这个词确实出现在语料库列表中。它在测试集中出现了一次。
我通过遍历语料库列表检查了它,并找到了包含’intensity’的句子的索引
我也检查了数据框,并在其中找到了它:
语料库列表中还有一些词不在word2vec词汇表中。
我尝试使用了cbow和skipgram,并尝试了不同的1、5、15个epoch。
在所有情况下,我仍然遇到这个错误。我该如何解决这个问题?
回答:
您可能在使用gensim
的Word2Vec
实现。
该实现与原始的word2vec.c
代码一样,默认设置了词的最小计数min_count
为5。出现次数少于5次的词将被忽略。一般来说,这大大提高了剩余词向量的质量。
(仅有一个或几个使用例子的词本身不会得到强有力的词向量,因为没有足够的多样性来反映它们在更大语言中的真实含义,而且它们的少数例子对模型的影响远不如其他有更多例子的词。但由于这种少例子的词往往有很多,总体上它们会稀释/干扰模型对其他有大量例子的词的学习。)
您可以设置min_count=1
来保留这些词,但与丢弃这些罕见词相比:
- 这些罕见词的向量质量会很差
- 这些罕见词的存在会使模型变得更大且训练速度明显变慢
- 其他更常见词的向量质量会略有下降