Gensim: поднять KeyError ("слово '% s' отсутствует в словаре"% word) - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть этот код, и у меня есть список статей в виде набора данных. У каждого сырья есть статья.

Я запускаю этот код:

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)

KeyError: u "слово 'business' отсутствует в словаре"

Оригинальный код прекрасно работает с их набором данных.

https://github.com/derekgreene/topic-model-tutorial

Не могли бы вы помочь, что это за ошибка?

1 Ответ

0 голосов
/ 02 сентября 2018

Это может помочь ответчикам, если вы включите больше информации в сообщение об ошибке, например, несколько строк фреймов вызова, которые будут четко указывать, какая строка вашего кода вызвала ошибку.

Однако, если вы получите ошибку KeyError: u"word 'business' not in vocabulary", вы можете верить, что ваш Word2Vec экземпляр w2v_model никогда не выучил слово 'business'.

Это может быть связано с тем, что она не отображалась в данных обучения, представленных моделью, или, возможно, появлялась меньше, чем min_count раз.

Поскольку вы не показываете тип / содержимое вашей raw_documents переменной или код для вашего TokenGenerator класса, не ясно, почему это пошло не так - но это то, что нужно искать. Дважды проверьте, что raw_documents имеет правильное содержимое, и что отдельные элементы внутри итерируемого объекта docgen выглядят как правильный тип ввода для Word2Vec.

Каждый элемент в итерируемом объекте docgen должен представлять собой список строк-токенов, а не простые строки или что-либо еще. Итерация docgen должна быть повторной многократно. Например, если вы выполните следующие две строки, вы должны увидеть те же два токена списков строк (выглядящих примерно так: ['hello', 'world']:

print(iter(docgen).next())
print(iter(docgen).next())

Если вы видите простые строки, docgen не предоставляет правильные типы элементов для Word2Vec. Если вы видите только один напечатанный элемент, docgen, вероятно, является простым однопроходным итератором, а не итеративным объектом.

Вы также можете включить ведение журнала на уровне INFO и внимательно следить за выходными данными на шаге Word2Vec, а также уделять дополнительное внимание любым числам / шагам, которые кажутся несоответствующими. (Например, какие-либо шаги указывают на то, что ничего не происходит, или подсчет слов / текстовых примеров кажется неправильным?)

...