Класс Gensim Phrases
использует простой статистический анализ, основанный на относительных подсчетах и некоторых настраиваемых пороговых значениях, чтобы решить, что некоторые пары токенов (обычно пары слов, а не пары символов) должны быть повышены до одной связанной биграммы. Потенциальным парам присваивается «оценка», а те, которые превышают настраиваемый «порог», объединяются.
Даже при использовании в своей обычной области, словах, его результаты часто не кажутся впечатляющими для человеческой оценки — пропуская многие комбинации, которые мы считаем логичными, создавая другие комбинации, которые мы группируем по-другому. Но с большим количеством обучающих данных и некоторой настройкой его параметров даже его несовершенные комбинации могут помочь нижестоящим моделям работать лучше.
Для вашего крошечного игрушечного корпуса биграммы персонажей, которые вы хотели бы видеть, не подходят, исходя из значений класса по умолчанию.
Вы можете просмотреть код original_scorer()
по умолчанию для оценки потенциальных пар по адресу:
https://github.com/RaRe-Technologies/gensim/blob/460dc1cb9921817f71b40b412e11a6d413926472/gensim/models/phrases.py#L663
Вы можете запустить этот код на своей модели для одной из ожидаемых пар, чтобы увидеть ее оценку:
>>> from gensim.models.phrases import original_scorer
>>> original_scorer(bigram.vocab[b'G'], bigram.vocab[b'o'],
bigram.vocab[b'G_o'], len(bigram.vocab),
bigram.min_count, bigram.corpus_word_count)
4.666666666666666
По сравнению с bigram.threshold
из 10.0
по умолчанию, эта биграмма 'G_o'
не подходит.
Вы можете повозиться с threshold
(или другими параметрами Phrases
), чтобы получить разные результаты, но какие значения/компромиссы лучше всего будут зависеть от ваших конечных целей. Например:
>>> bigram.threshold = 4.0
>>> list(bigram.export_phrases(documents_proc, out_delimiter=b''))
[(b'Go', 4.666666666666666),
(b'Go', 4.666666666666666),
(b'od', 4.666666666666666),
(b'ha', 7.0),
(b'ha', 7.0)]
>>> list(bigram[documents_proc])
[['G_o', 'd'],
['G_o', 'o_d'],
['h_a', 'p', 'p', 'y'],
['h_a', 'n', 'g', 'r', 'y'],
['p', 'y', 'p', 'i']]
Таким образом, с bigram.threshold=4.0
желаемого 'p_y'
по-прежнему нет, поскольку для этого потребуется еще меньшее threshold
, учитывая количество 'p'
и 'y'
.
person
gojomo
schedule
28.04.2019