Word2Vec:即使单词在语料库中也不在单词中

时间:2019-03-17 15:27:25

标签: machine-learning word2vec

test = pd.read_csv('test.csv')
train = pd.read_csv('train.csv')

Image

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()

Corpus是一个句子列表,其中一个句子是一个单词列表:

Image

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

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

我有一个似乎可以工作的单词向量:

Image

但是,当我尝试执行word_model ['intensity]时,出现错误消息:“单词'intensity'不在词汇表中

尽管事实上单词强度在语料库列表中。它在测试中出现一次。

我通过对语料库列表进行整合检查,发现包含“强度”的句子的索引

我还检查了数据框并在里面找到了它:

Image

语料库列表中还有一些单词,但 word2vec 词汇中却没有。

我尝试同时使用 cbow skipgram ,并尝试使用1,5,15的不同时期。

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

1 个答案:

答案 0 :(得分:1)

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

该实现与原始word2vec.c代码类似,对5个单词强制使用默认的min_count。单词少于5个示例的单词将被忽略。通常,这极大地改善了其余词向量的质量。

(只有一个或几个用法示例的单词本身不会获得强大的单词向量,因为没有足够的多样性来用较大的语言反映其真实含义,并且它们的几个示例对模型的影响远小于但是,由于这样的话往往会有很多,而很少有例子,所以总的来说,它们稀释/干扰了模型的学习能力,换句话说,有很多例子。)

您可以设置min_count=1保留这些单词,但是与丢弃这些稀有单词相比:

  • 稀有词的向量会很差
  • 稀有词的存在会使模型变得更大,并且训练起来明显变慢
  • 其他较常见单词的向量将稍差