Gensim DOC2VEC обрезает и удаляет словарь - PullRequest
0 голосов
/ 28 мая 2018

Я пытался создать простую модель Doc2Vec:

 sentences = []
 sentences.append(doc2vec.TaggedDocument(words=[u'scarpe', u'rosse', u'con', u'tacco'], tags=[1]))
 sentences.append(doc2vec.TaggedDocument(words=[u'scarpe', u'blu'], tags=[2]))
 sentences.append(doc2vec.TaggedDocument(words=[u'scarponcini', u'Emporio', u'Armani'], tags=[3]))
 sentences.append(doc2vec.TaggedDocument(words=[u'scarpe', u'marca', u'italiana'], tags=[4]))
 sentences.append(doc2vec.TaggedDocument(words=[u'scarpe', u'bianche', u'senza', u'tacco'], tags=[5]))

 model = Doc2Vec(alpha=0.025, min_alpha=0.025)  # use fixed learning rate
 model.build_vocab(sentences)  

Но в итоге я получил пустой словарь.С некоторой отладкой я увидел, что внутри функции build_vocab () словарь фактически создается функцией vocabulary.scan_vocab (), но он удаляется следующей функцией vocabulary.prepare_vocab ().Более глубоко, эта функция вызывает проблему:

def keep_vocab_item(word, count, min_count, trim_rule=None):
    """Check that should we keep `word` in vocab or remove.

    Parameters
    ----------
    word : str
        Input word.
    count : int
        Number of times that word contains in corpus.
    min_count : int
        Frequency threshold for `word`.
    trim_rule : function, optional
        Function for trimming entities from vocab, default behaviour is `vocab[w] <= min_reduce`.

    Returns
    -------
    bool
        True if `word` should stay, False otherwise.

    """
    default_res = count >= min_count

    if trim_rule is None:
        return default_res # <-- ALWAYS RETURNS FALSE
    else:
        rule_res = trim_rule(word, count, min_count)
        if rule_res == RULE_KEEP:
            return True
        elif rule_res == RULE_DISCARD:
            return False
        else:
            return default_res  

Кто-нибудь понимает проблему?

1 Ответ

0 голосов
/ 28 мая 2018

Я нашел ответ сам, значение по умолчанию для min_count - 5, и у меня не было слов со счетчиком 5 или более.Я просто должен был изменить эту строку кода:

model = Doc2Vec(min_count=0, alpha=0.025, min_alpha=0.025)
...