Word2vec raise KeyError(f "Key '{key}' not present" )



目前使用gensim 4.0库编写代码。然而,我不知道为什么它总是找不到一个相似的词。起初,当我设置min_count = 5时,错误是,它希望我先构建一个词汇表,但在我将其减少到min_count = 1后,它说,键错误不存在…完整的代码与数据集在这里:https://github.com/JYjunyang/FYPDEMO我写错了什么或错过了一些重要的步骤?一切都很好,但只是这个word2vec实现…感谢您提供的每一个指导……注意:LemmaColumn是一个数据帧

def FeaturesExtraction():
word2vec = 
Word2Vec(sentences=LemmaColumn,vector_size=100,window=5,min_count=1,workers=8,sg=1)
b1 = time.time()
train_time = time.time() - b1
print(word2vec.wv.most_similar('virus', topn=10))

我不确定为什么,在用10k数据训练后,词汇表中唯一的单词只有7:
word #0/7是t
word #1/7是l
word #2/7是x
word #3/7是e
word #4/7是_
word #5/7是u
word #6/7是f

您的LemmaColumn变量可能不是Word2Vecsentences参数所需的格式。它需要一个Python序列:一个可以多次迭代的东西,比如列表,或者另一个可重复迭代的对象。在该序列中,每个单独的项本身必须是字符串标记(单词)的列表。

你的小词汇量是我所期望看到的,如果相反:

LemmaColumn = [ 
['f', 'u', 'l', 'l', '-', 't', 'e', 'x', 't'],
]

…甚至…

LemmaColumn = [ 
['full-text'],
]

…因为Python会很高兴地将一个普通字符串(如'full-text')视为一个由1个字符字符串填充的列表。因此,您的整个训练词汇表只是单个字符串的字符-可能是列名,而不是您想要使用的列数据。

仔细检查LemmaColumn中的内容。对列的数据执行必要的转换,使其成为Word2Vec期望的序列,&在尝试Word2Vec之前确认它看起来是合理的。

另外:至少登录到INFO级别运行将显示更多模型的进度,当你学会理解报告的步骤/进度时,像奇怪的低文本/单词计数,或者如果他们在正确数量(大量)的数据上工作需要时间的步骤,将会很快变得明显。

最后,请注意,对于word2vec这样的算法,min_count=1本质上总是一个坏主意。好的向量只来自同一个词的多个不同的用法示例-因此默认的min_count=5。保留罕见的单词不仅会使这些罕见的单词得到糟糕的向量,而且自然语言文本往往有很多这样的罕见的单词这一事实意味着模型的大量时间。空间专门用于(几乎无望的)改进那些垃圾词的"向量",其他附近的词"向量"也会受到影响。

相关内容

最新更新