Word2vec 引发 KeyError(f"Key '{key}' not present")
Word2vec raise KeyError(f"Key '{key}' not present")
目前正在使用gensim 4.0库编写代码。但是,我不知道为什么它总是找不到相似的词。起初,当我设置 min_count = 5 时,错误是它要我先构建一个词汇表,但是当我将它设置为 min_count = 1 时,它说,key error not present ...此处包含数据集的完整代码: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:
单词 #0/7 是 t
单词 #1/7 是 l
单词 #2/7 是 x
单词 #3/7 是 e
单词 #4/7 是 _
单词 #5/7 是你
单词 #6/7 是 f
您的 LemmaColumn
变量可能不符合 Word2Vec
需要 sentences
参数的格式。它需要一个 Python 序列:可以迭代多次的东西,例如列表或另一个 re-iterable 对象。在这个序列中,每个单独的项目本身必须是 list-of-string-tokens(单词)。
如果相反:
LemmaColumn = [
['f', 'u', 'l', 'l', '-', 't', 'e', 'x', 't'],
]
……甚至……
LemmaColumn = [
['full-text'],
]
...因为 Python 会很乐意将纯字符串(如 'full-text'
)视为一个包含 1 个字符的字符串的列表。因此,您的整个训练词汇表只是该单个字符串的字符——可能是 column-name,而不是您想要使用的 column-data。
Double-check LemmaColumn
中的内容。对列的数据执行必要的转换,使其成为 Word2Vec
期望的序列类型,并在尝试 Word2Vec
.
之前确认它看起来合理
此外:运行 至少登录到 INFO
级别将显示更多模型的进度,并且当您学习理解报告的 steps/progress 时,诸如weirdly-low 计数 texts/words,或者如果他们处理正确数量(大量)的数据会立即完成需要花费时间的步骤,将会更快地显现出来。
最后,请注意 min_count=1
对于像 word2vec 这样的算法来说基本上总是一个坏主意。好的向量只来自同一个词用法的多个不同例子——因此默认 min_count=5
。保留稀有词不仅往往会为这些稀有词获得较差的向量,而且 natural-language 文本往往有很多这样的稀有词这一事实意味着模型的大部分时间 & space 都用于(几乎没有希望)改进那些附近其他词向量也会受到影响的垃圾词向量的任务。
目前正在使用gensim 4.0库编写代码。但是,我不知道为什么它总是找不到相似的词。起初,当我设置 min_count = 5 时,错误是它要我先构建一个词汇表,但是当我将它设置为 min_count = 1 时,它说,key error not present ...此处包含数据集的完整代码: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:
单词 #0/7 是 t
单词 #1/7 是 l
单词 #2/7 是 x
单词 #3/7 是 e
单词 #4/7 是 _
单词 #5/7 是你
单词 #6/7 是 f
您的 LemmaColumn
变量可能不符合 Word2Vec
需要 sentences
参数的格式。它需要一个 Python 序列:可以迭代多次的东西,例如列表或另一个 re-iterable 对象。在这个序列中,每个单独的项目本身必须是 list-of-string-tokens(单词)。
如果相反:
LemmaColumn = [
['f', 'u', 'l', 'l', '-', 't', 'e', 'x', 't'],
]
……甚至……
LemmaColumn = [
['full-text'],
]
...因为 Python 会很乐意将纯字符串(如 'full-text'
)视为一个包含 1 个字符的字符串的列表。因此,您的整个训练词汇表只是该单个字符串的字符——可能是 column-name,而不是您想要使用的 column-data。
Double-check LemmaColumn
中的内容。对列的数据执行必要的转换,使其成为 Word2Vec
期望的序列类型,并在尝试 Word2Vec
.
此外:运行 至少登录到 INFO
级别将显示更多模型的进度,并且当您学习理解报告的 steps/progress 时,诸如weirdly-low 计数 texts/words,或者如果他们处理正确数量(大量)的数据会立即完成需要花费时间的步骤,将会更快地显现出来。
最后,请注意 min_count=1
对于像 word2vec 这样的算法来说基本上总是一个坏主意。好的向量只来自同一个词用法的多个不同例子——因此默认 min_count=5
。保留稀有词不仅往往会为这些稀有词获得较差的向量,而且 natural-language 文本往往有很多这样的稀有词这一事实意味着模型的大部分时间 & space 都用于(几乎没有希望)改进那些附近其他词向量也会受到影响的垃圾词向量的任务。