背景
我想使用fastText将所有三个短语分类为中文,'zh'
。
["Ni hao!", '你好!', 'ni hao!']
然而,训练的模型看起来并不适用于语义分类。
有什么其他方法可以完成相同的任务吗?
输出
[('zh', 0.9305274486541748)][('eo', 0.9765485525131226)][('hr', 0.6364055275917053)]
代码
sample.py
from fasttext import load_modelmodel = load_model("lid.176.bin")speech_texts = ["Ni hao!", '你好!', 'ni hao!']def categolize_func(texts, model, k): for i in range(len(texts)): text = texts[0] label, prob = model.predict(text, k) return list(zip([l.replace("__label__", "") for l in label], prob))print(categolize_func(speech_texts, model, 1))
回答:
我认为这对FastText模型的评估并不公平。该模型在训练时使用了比你用于快速测试的句子长得多的句子,因此存在训练-测试数据不匹配的问题。我还猜测,模型在训练时使用的大多数中文数据并非拉丁字母,因此它可能在处理拉丁字母时会遇到问题。
还有其他用于语言识别的模型:
-
langid.py 使用简单的三元组统计方法。
-
langdetect 是谷歌一个旧的开源项目的移植,使用简单的机器学习模型处理字符统计数据。
-
Spacy有一个语言检测扩展。
-
Polyglot 多语言NLP工具包也具有语言检测功能。
然而,我怀疑它们在处理如此短的文本片段时都会遇到问题。如果你的数据确实是这样的,那么最好的方法是使用与你的用例相匹配的训练数据来训练你自己的FastText模型。例如,如果你只对检测中文感兴趣,你可以将分类分为两类:中文和非中文。