Реализация автоматического определения языка текста
Определение языка — базовая задача NLP, решаемая за миллисекунды. Используется как первый шаг в мультиязычных пайплайнах: прежде чем применять языко-специфичную модель, нужно знать, на каком языке текст.
Инструменты и выбор
fasttext lid.176.bin — промышленный стандарт. Модель Facebook, распознаёт 176 языков:
import fasttext
model = fasttext.load_model("lid.176.bin")
predictions = model.predict("Привет, как дела?", k=3)
# (('__label__ru', '__label__bg', '__label__mk'), array([0.99, 0.003, 0.002]))
Latency: < 1ms. Размер модели: 1.8MB (bin) или 131MB (ftz). Accuracy: 97%+ для текстов > 20 слов.
langdetect (Python): порт Google Language Detection, 55 языков. Недостаток: недетерминированный (разные результаты при повторных запусках без фиксации seed).
langid.py: 97 языков, детерминированный, хуже fasttext на коротких текстах.
lingua-py: лучшая точность для коротких текстов (1–10 слов), 75 языков.
Сложные случаи
- Смешанный текст (code-switching): «Встречаемся в 5pm на zoom call» — технически русский, но с английскими вставками. Стратегия: определить доминирующий язык, не пытаться сегментировать по-языково для коротких текстов
- Короткие тексты (< 5 слов): точность падает у всех моделей. Для критичных случаев используйте lingua-py или ансамбль
- Близкородственные языки: русский/болгарский/сербский, испанский/португальский — источник основных ошибок
Применение в мультиязычном пайплайне
def process_multilingual(text: str):
lang = detect_language(text) # "ru", "en", "de"
router = {
"ru": russian_pipeline,
"en": english_pipeline,
"de": german_pipeline,
}
pipeline = router.get(lang, default_pipeline)
return pipeline.run(text)
Для production: кэширование результатов определения языка по хэшу текста — повторные запросы без вызова модели.







