Реализация извлечения ключевых фраз (Keyword/Keyphrase Extraction)
Ключевые фразы — короткие n-граммы, отражающие основные темы документа. Применение широкое: индексирование, поиск, теггирование контента, автоматические аннотации.
Методы извлечения
Статистические методы — быстро, без обучения:
- YAKE (Yet Another Keyword Extractor): учитывает позицию слова, коллокации, частоту. Работает без корпуса, 5ms/документ
- RAKE (Rapid Automatic Keyword Extraction): разбивка по стоп-словам, scoring по co-occurrence
- TF-IDF: лучшие слова по TF-IDF весу — эффективно при наличии корпуса для IDF
Граф-based методы:
- TextRank (аналог PageRank для слов): строит граф co-occurrence, ранжирует узлы. Реализация: gensim, pytextrank
Семантические методы (лучшее качество):
- KeyBERT: эмбеддинги документа и кандидатов сравниваются косинусным сходством
from keybert import KeyBERT
kw_model = KeyBERT(model="cointegrated/rubert-tiny2")
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(1, 3), top_n=10)
Для русского языка
Статистические методы работают хуже без лемматизации. Правильный пайплайн: лемматизация (pymorphy3) → YAKE/KeyBERT. KeyBERT с rubert-tiny2 даёт хорошее качество при latency ~50ms/документ.
Применение в production
Типичная задача: теггирование 10K статей в день. Оптимальный стек: YAKE для скорости + KeyBERT для топ-документов. Результаты нормализуются (лемматизация, lowercase, дедупликация) и сохраняются в поисковый индекс (Elasticsearch с полем keywords).







