简单的方法使用字符n-gram统计:每种语言有独特的字符模式(“th”在英语中常见,“tion”在法语中常见,“ung”在德语中常见)。FastText的语言识别模型使用字符n-gram和浅层神经网络,仅需一个句子就能以高准确率识别176种语言。对于非常短的文本(几个词),准确率会下降,因为信号不足。
有些语言对极难区分:塞尔维亚语(西里尔文)与塞尔维亚语(拉丁文)、克罗地亚语和波斯尼亚语共享大部分词汇和语法。简体中文与繁体中文需要检查特定的字符选择。像“no”这样的短模糊文本可能是英语、西班牙语、意大利语或葡萄牙语。语码转换文本(“I went to the tienda to buy leche”)在句子中混合语言。稳健的系统通过统计置信度分数而非硬分类来处理这些边界情况。
对于大多数应用,Google的CLD3、FastText的lid.176.bin或langdetect Python库提供了足够的准确率。LLM也可以作为训练的副产品来检测语言,不过用一个70B的模型做语言检测就像用电锯切黄油。实用的架构是:先用快速语言检测(FastText,<1ms),然后路由到语言特定的处理。