Word2Vec:单词不在词汇表中,即使它在语料库中

Word2Vec: Word not in vocabulary even though its in corpus

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 sentences

corpus = prep_corpus()

语料库是句子列表,其中一个句子是一个单词列表:

word_model = Word2Vec(corpus, workers = 2,sg=1, iter = 5)

word_model['maybelline', 'clear'].shape

我有一个似乎有效的词向量:

但是,当我尝试执行 word_model['intensity] 时,我收到错误消息:"word 'intensity' not in vocabulary"

尽管词强度在语料库列表中。测试中出现一次

我通过整合查看了语料库列表,发现包含'intensity'

的句子的索引

我也检查了dataframe,发现里面有:

还有一些词在语料库列表中,但不在 word2vec 词汇表中。

我尝试同时使用 cbowskipgram 并尝试了 1、5、15 的不同时期。

在所有情况下,我仍然会遇到此错误。我该如何解决这个问题?

您可能正在使用 gensim Word2Vec 实现。

该实现与原始 word2vec.c 代码一样,对 5 个单词强制执行默认 min_count。示例少于 5 个的单词将被忽略。一般来说,这大大提高了剩余词向量的质量。

(只有一个或几个用法示例的单词本身不会获得强大的单词向量,因为没有足够的多样性来反映它们在更大语言中的真实含义,而且它们的少量示例对模型的影响很大少于具有更多示例的其他单词。但是,由于有很多这样的单词,但示例很少,因此它们总共结束了 diluting/interfering-with 学习模型可以做的事情,换句话说,有大量示例。)

你可以设置min_count=1保留这样的词,但是相比于丢弃那些稀有词:

  • 稀有词的向量会很差
  • 稀有词的存在会使模型变得更大并且训练速度明显变慢
  • 其他更常见词的向量会稍微差一些