Реалізація автоматичного визначення мови тексту
Визначення мови—базове завдання NLP, розв'язуване за мілісекунди. Використовується як перший крок у багатомовних pipeline: перш ніж застосовувати мово-специфічну модель, потрібно знати, якою мовою текст.
Інструменти та вибір
fasttext lid.176.bin—промисловий стандарт. Модель Facebook, розпізнає 176 мов:
import fasttext
model = fasttext.load_model("lid.176.bin")
predictions = model.predict("Привіт, як справи?", k=3)
# (('__label__uk', '__label__ru', '__label__pl'), array([0.99, 0.003, 0.002]))
Latency: < 1ms. Розмір моделі: 1.8MB (bin) або 131MB (ftz). Точність: 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 або ансамбль
- Близькородинні мови: російський/болгарський/сербський, іспанський/португальський—джерело основних помилок
Застосування в багатомовному pipeline
def process_multilingual(text: str):
lang = detect_language(text) # "uk", "ru", "en"
router = {
"uk": ukrainian_pipeline,
"ru": russian_pipeline,
"en": english_pipeline,
}
pipeline = router.get(lang, default_pipeline)
return pipeline.run(text)
Для production: кешування результатів визначення мови за хешем тексту—повторні запити без виклику моделі.







