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)
词汇量将是在训练语料库中看到的唯一标记的数量。
它与语料库(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序列,其中每个项目都是一个字符串令牌列表? (如果还有其他事情,您应该期待奇怪的结果。)