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

问题描述 投票:0回答:1
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(vocab = 58,size = 20,alpha = 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)
python tensorflow error-handling word2vec
1个回答
0
投票

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

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

如果您的语料库不是这样-如果每个文本只是一个或两个单词(例如汽车名称),并且每个文本之间都没有重复的单词-那么您的语料库就不适合word2vec培训。 Word2vec需要在周围单词混合变化的上下文中使用每个单词的许多示例。

也就是说,您显示的输出有点奇怪:len(model1.wv.vocab)的大小应与model.wv.vectors.shape[0]相同–但是您的输出显示58,然后是31,752。您确定这些是您运行中的值吗?

而且,您的“我用来从列表中删除重复项的完整代码”在意图和效果上有些混乱。您可以在问题中显示开头和结尾列表中某些内容的示例,以揭示为什么它不适合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序列,其中每个项目都是一个字符串令牌列表? (如果还有其他事情,您应该期待奇怪的结果。)

© www.soinside.com 2019 - 2024. All rights reserved.