Word2Vec模型的词汇量明显低于其所基于的列表的词汇量?

2024-06-11 14:47:29 发布

您现在位置:Python中文网/ 问答频道 /正文

model1 = Word2Vec(words_list_no_dupes, min_count=0,size= 20,workers=3, window =3, sg = 1)
print(model1)
print(len(model1.wv.vocab))
print(model.wv.vectors.shape)

输出: Word2Vec(声音=58,大小=20,字母=0.025) 58 (31752,20)

但是,当我检查以查看形成模型的列表的长度时

print(len(words_list_no_dupes))

输出:

1906年

这是什么原因造成的? 我用来从列表中删除重复项的完整代码如下:

words = []
for r in range(0,len(df)):
    temp = []
    for word in nltk.tokenize.WhitespaceTokenizer().tokenize(df["CAR NAME"][r]):   
        temp.append(word.lower())
    words.append(temp)
words_flat_list = [item for sublist in words for item in sublist]

def remove_duplicates(x):
  return list(dict.fromkeys(x))

words_list_no_dupes = remove_duplicates(words_flat_list)

Tags: noindf列表forlenword2vectemp
1条回答
网友
1楼 · 发布于 2024-06-11 14:47:29

词汇量将是在训练语料库中看到的唯一标记的数量

它与语料库(len(words_list_no_dupes))中文本的长度和数量没有任何必要的关系,因为每个文本本身应该有许多单词,包括许多从其他文本重复的单词

如果你的语料库不是这样的——如果每个文本只有一两个单词,比如一个汽车名称,并且没有单词在文本之间重复——那么你的语料库不适合word2vec培训。Word2vec需要很多关于每个单词用法的例子,在不同的上下文中,周围的单词会有不同的混合

也就是说,您显示的输出有点奇怪:len(model1.wv.vocab)应该与model.wv.vectors.shape[0]大小相同–但是您的输出显示58,然后是31752。您确定这些是您的跑步记录值吗

此外,您的“我用来从列表中删除重复项的完整代码”在意图和效果上都有点混乱。在你的问题中,你可以在列表的开头和结尾展示一些例子,也许可以揭示为什么它不是Word2Vec的正确输入。例如,words_flat_list中的前几项是什么

print(words_flat_list[0:3])

那么words_list_no_dupes中的前几项是什么

print(words_list_no_dupes[0:3])

这就是你所期待的吗

您正在传递给words_list_no_dupes的是它期望的Word2Vec吗?这是一个Python序列,其中每个项都是字符串标记的列表?(如果是其他原因,你应该期待奇怪的结果。)

相关问题 更多 >