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



我使用CONLL2003数据集使用Word2vec和Glove生成单词嵌入。word2vecmodel.wv.vocab返回的单词数与glove.dictionary不同(少得多(。这是代码:Word2Vec:

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

输出len(w2w字(=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',
'European',
'Union',
"'s",
'veterinary',
'committee',
'Werner',
'Zwingmann',
'said',
'Wednesday',
'consumers',
'buy',
'sheepmeat',
'countries',
'Britain',
'scientific',
'advice',
'clearer',
'.']]

结果列表中总共有13517个句子。有人能解释一下为什么为其创建嵌入的单词列表的大小截然不同吗?

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

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

word2vec算法需要许多不同的单词用法示例。在不同的上下文中,生成强单词向量。当单词很少见时,它们本身就无法获得很好的单词向量:与更大的样本相比,少数几个例子只显示了一些可能是特殊的用法,并且无法以最好的方式与许多其他单词表示巧妙地平衡。

但进一步地,考虑到在典型的单词分布中,有许多这样的低频单词,总之,它们倾向于使其他更频繁qORD的单词向量更差。相对而言,较低频率的单词是"干扰",它吸收了训练状态/努力,而损害了其他更重要的单词。(充其量,你可以通过使用更多的训练时期来抵消这种影响。(

因此,丢弃低频词通常是正确的方法。如果你真的需要这些单词的矢量,那么获得更多的数据,使这些单词不再罕见是最好的方法。

您也可以使用较低的min_count(包括低至min_count=1(来保留所有单词。但是,无论单词向量用于何种最终目的,通常丢弃这样的稀有单词都会更好。

最新更新