PhrasesTransformer
оборачивает экземпляр модели Phrases
от gensim, которая выполняет фактическую компиляцию статистики совпадений и продвижение биграмм во фразы.
К сожалению, объект Phrases
не предоставляет, по крайней мере, до gensim-3.8.3
(апрель 2020 года), список всех фраз, которые он может испускать. По сути, он просто компилирует статистику, а затем, когда он представлен с новым текстом, проверяет, какие биграммы должны быть объединены (в соответствии с его текущей статистикой и параметрами).
Недостатками этого подхода являются:
- множество избыточных пересчетов
- нет удобного списка «всех» возможных фраз
- сохраняет потенциальные фразы, занимающие память, которые не соответствуют текущим параметрам оценки / порога, но могут, если они изменились
Недостатки этого подхода включают:
- изменение оценки Параметры / threshold могут немедленно включить новые фразы
Чтобы фактически получить список фраз, которые может создать экземпляр Phrases
, вам нужно передать в него текст всеми потенциальными фразами и посмотреть, что он продвигает. Вероятно, это должен быть служебный метод в gensim Phrases
- поскольку очень похожее перечисление уже сделано внутри инициализации связанного класса Phraser
- но это не так. Такой метод может работать примерно так (могут быть ошибки, поскольку я его не тестировал):
from gensim.models.phrases import pseudocorpus
def report_all_phrases(phrases_model):
corpus = pseudocorpus(phrases_model.vocab, phrases_model.delimiter, phrases_model.common_terms)
phrasegrams = set()
for bigram, score in phrases_model.export_phrases(corpus, self.delimiter, as_tuples=True):
phrasegrams.add(bigram)
return phrasegrams