Gensim:提高 KeyError("word '%s' not in vocabulary" % word)
Gensim: raise KeyError("word '%s' not in vocabulary" % word)
我有这段代码,我有文章列表作为数据集。每个 raw 都有一篇文章。
我运行这个代码:
import gensim
docgen = TokenGenerator( raw_documents, custom_stop_words )
# the model has 500 dimensions, the minimum document-term frequency is 20
w2v_model = gensim.models.Word2Vec(docgen, size=500, min_count=20, sg=1)
print( "Model has %d terms" % len(w2v_model.wv.vocab) )
w2v_model.save("w2v-model.bin")
# To re-load this model, run
#w2v_model = gensim.models.Word2Vec.load("w2v-model.bin")
def calculate_coherence( w2v_model, term_rankings ):
overall_coherence = 0.0
for topic_index in range(len(term_rankings)):
# check each pair of terms
pair_scores = []
for pair in combinations(term_rankings[topic_index], 2 ):
pair_scores.append( w2v_model.similarity(pair[0], pair[1]) )
# get the mean for all pairs in this topic
topic_score = sum(pair_scores) / len(pair_scores)
overall_coherence += topic_score
# get the mean score across all topics
return overall_coherence / len(term_rankings)
import numpy as np
def get_descriptor( all_terms, H, topic_index, top ):
# reverse sort the values to sort the indices
top_indices = np.argsort( H[topic_index,:] )[::-1]
# now get the terms corresponding to the top-ranked indices
top_terms = []
for term_index in top_indices[0:top]:
top_terms.append( all_terms[term_index] )
return top_terms
from itertools import combinations
k_values = []
coherences = []
for (k,W,H) in topic_models:
# Get all of the topic descriptors - the term_rankings, based on top 10 terms
term_rankings = []
for topic_index in range(k):
term_rankings.append( get_descriptor( terms, H, topic_index, 10 ) )
# Now calculate the coherence based on our Word2vec model
k_values.append( k )
coherences.append( calculate_coherence( w2v_model, term_rankings ) )
print("K=%02d: Coherence=%.4f" % ( k, coherences[-1] ) )
我遇到这个错误:
raise KeyError("word '%s' not in vocabulary" % word)
按键错误:u"word 'business' not in vocabulary"
原始代码与他们的数据集配合得很好。
https://github.com/derekgreene/topic-model-tutorial
请问这个错误是什么?
如果您在错误消息周围包含更多信息,例如多行调用框架将清楚地表明您的代码行触发了错误,它可能会对回答者有所帮助。
但是,如果您收到错误 KeyError: u"word 'business' not in vocabulary"
,您可以相信您的 Word2Vec
实例 w2v_model
从未学过单词 'business'
。
这可能是因为它没有出现在模型呈现的训练数据中,或者可能出现但少于 min_count
次。
由于您没有显示 raw_documents
变量的 type/contents 或 TokenGenerator
class 的代码,因此不清楚为什么会出错– 但那些地方值得一看。仔细检查 raw_documents
是否具有正确的内容,并且 docgen
可迭代对象中的各个项目看起来像是 Word2Vec
的正确输入类型。
docgen
可迭代对象中的每一项都应该是字符串标记列表,而不是纯字符串或其他任何内容。而且,docgen
可迭代对象必须可以被多次迭代。例如,如果您执行以下两行,您应该看到相同的两个字符串列表标记(看起来像 ['hello', 'world']
:
print(iter(docgen).next())
print(iter(docgen).next())
如果您看到纯字符串,则 docgen
没有为 Word2Vec
提供正确类型的项目。如果您只看到一个项目被打印出来,docgen
可能是一个简单的单遍迭代器,而不是一个可迭代对象。
您还可以在 INFO
级别启用日志记录并仔细观察 Word2Vec
步骤中的输出,并格外注意任何看起来不协调的 numbers/steps 。 (例如,是否有任何步骤表明没有发生任何事情,或者 words/text-examples 的计数似乎不对?)
我有这段代码,我有文章列表作为数据集。每个 raw 都有一篇文章。
我运行这个代码:
import gensim
docgen = TokenGenerator( raw_documents, custom_stop_words )
# the model has 500 dimensions, the minimum document-term frequency is 20
w2v_model = gensim.models.Word2Vec(docgen, size=500, min_count=20, sg=1)
print( "Model has %d terms" % len(w2v_model.wv.vocab) )
w2v_model.save("w2v-model.bin")
# To re-load this model, run
#w2v_model = gensim.models.Word2Vec.load("w2v-model.bin")
def calculate_coherence( w2v_model, term_rankings ):
overall_coherence = 0.0
for topic_index in range(len(term_rankings)):
# check each pair of terms
pair_scores = []
for pair in combinations(term_rankings[topic_index], 2 ):
pair_scores.append( w2v_model.similarity(pair[0], pair[1]) )
# get the mean for all pairs in this topic
topic_score = sum(pair_scores) / len(pair_scores)
overall_coherence += topic_score
# get the mean score across all topics
return overall_coherence / len(term_rankings)
import numpy as np
def get_descriptor( all_terms, H, topic_index, top ):
# reverse sort the values to sort the indices
top_indices = np.argsort( H[topic_index,:] )[::-1]
# now get the terms corresponding to the top-ranked indices
top_terms = []
for term_index in top_indices[0:top]:
top_terms.append( all_terms[term_index] )
return top_terms
from itertools import combinations
k_values = []
coherences = []
for (k,W,H) in topic_models:
# Get all of the topic descriptors - the term_rankings, based on top 10 terms
term_rankings = []
for topic_index in range(k):
term_rankings.append( get_descriptor( terms, H, topic_index, 10 ) )
# Now calculate the coherence based on our Word2vec model
k_values.append( k )
coherences.append( calculate_coherence( w2v_model, term_rankings ) )
print("K=%02d: Coherence=%.4f" % ( k, coherences[-1] ) )
我遇到这个错误:
raise KeyError("word '%s' not in vocabulary" % word)
按键错误:u"word 'business' not in vocabulary"
原始代码与他们的数据集配合得很好。
https://github.com/derekgreene/topic-model-tutorial
请问这个错误是什么?
如果您在错误消息周围包含更多信息,例如多行调用框架将清楚地表明您的代码行触发了错误,它可能会对回答者有所帮助。
但是,如果您收到错误 KeyError: u"word 'business' not in vocabulary"
,您可以相信您的 Word2Vec
实例 w2v_model
从未学过单词 'business'
。
这可能是因为它没有出现在模型呈现的训练数据中,或者可能出现但少于 min_count
次。
由于您没有显示 raw_documents
变量的 type/contents 或 TokenGenerator
class 的代码,因此不清楚为什么会出错– 但那些地方值得一看。仔细检查 raw_documents
是否具有正确的内容,并且 docgen
可迭代对象中的各个项目看起来像是 Word2Vec
的正确输入类型。
docgen
可迭代对象中的每一项都应该是字符串标记列表,而不是纯字符串或其他任何内容。而且,docgen
可迭代对象必须可以被多次迭代。例如,如果您执行以下两行,您应该看到相同的两个字符串列表标记(看起来像 ['hello', 'world']
:
print(iter(docgen).next())
print(iter(docgen).next())
如果您看到纯字符串,则 docgen
没有为 Word2Vec
提供正确类型的项目。如果您只看到一个项目被打印出来,docgen
可能是一个简单的单遍迭代器,而不是一个可迭代对象。
您还可以在 INFO
级别启用日志记录并仔细观察 Word2Vec
步骤中的输出,并格外注意任何看起来不协调的 numbers/steps 。 (例如,是否有任何步骤表明没有发生任何事情,或者 words/text-examples 的计数似乎不对?)