对于相同的语料库,由Word2vec和Glove模型生成的单词词汇是不同的

问题描述

我正在使用CONLL2003数据集通过Word2vec和glove生成单词嵌入。 word2vecmodel.wv.vocab返回的单词数与手套。字典不同(少得多)。 这是代码: Word2Vec:

word2vecmodel = Word2Vec(result,size= 100,window =5,sg = 1)
X = word2vecmodel[word2vecmodel.wv.vocab]
w2vwords = list(word2vecmodel.wv.vocab)

输出len(w2vwords)= 4653

手套:

from glove import Corpus
from glove import glove
import numpy as np
corpus = Corpus()
nparray = []
allwords = []
no_clusters=500
corpus.fit(result,window=5)
glove = glove(no_components=100,learning_rate=0.05)
glove.fit(corpus.matrix,epochs=30,no_threads=4,verbose=True)
glove.add_dictionary(corpus.dictionary)

输出:len(glove.dictionary)= 22833

输入内容一个句子列表。例如: result [1:5] =

['Peter','Blackburn'],['BRUSSELS','1996-08-22'],['The','European','Commission','said','Thursday','disagreed','German','advice','consumers','shun','British','lamb','scientists','determine','whether','mad','cow','disease','transmitted','sheep','.'],['Germany',"'s",'representative','Union','veterinary','committee','Werner','Zwingmann','Wednesday','buy','sheepmeat','countries','Britain','scientific','clearer','.']]

结果列表中总共有13517个句子。 有人可以解释为什么创建嵌入词的单词列表的大小大不相同吗?

解决方法

您没有提到正在使用哪个Word2Vec实现,但是我假设您正在使用流行的Gensim库。

与Google发布的原始word2vec.c代码一样,Gensim Word2Vec使用默认的min_count参数5,这意味着出现少于5次的任何单词都会被忽略。

word2vec算法需要使用各种示例来说明单词的用法,这些用法在不同的上下文中生成强大的单词向量。当单词很少见时,它们本身就无法获得很好的单词向量:几个示例仅显示了与较大采样所显示的用法相比可能有些特质的用法,并且无法与其他许多单词表示形式进行巧妙地平衡最好的方式。

但是,考虑到在典型的单词分布中,有很多这样的低频单词,它们总共 也会使其他的单词向量更多-和弦更糟。相对而言,低频词是“干扰”,它吸收了训练状态/努力,从而损害了其他较难理解的词。 (充其量,您可以通过使用更多的训练纪元来稍微抵消这种效果。)

因此,丢弃低频词通常是正确的方法。如果您确实需要向量-这些单词,最好的方法是获取更多数据,以使这些单词不再罕见。

您还可以使用较低的min_count(包括最低min_count=1)来保留所有单词。但是,对于使用这些词向量的最终目的,经常丢弃这样的稀有词会更好。