背景
我想用fastText把这三个短语都归类为中文,'zh'
。
["Ni hao!", '你好!', 'ni hao!']
然而,训练的模型看起来不适用于语义分类。
有没有用不同的方法完成同一项任务的想法?
输出
[('zh', 0.9305274486541748)]
[('eo', 0.9765485525131226)]
[('hr', 0.6364055275917053)]
代码
示例.py
from fasttext import load_model
model = 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是谷歌一个旧的开源项目的端口,该项目在字符统计上使用了一个简单的ML模型。
-
Spacy有一个语言检测扩展。
-
用于多语言NLP的Polyglot工具包也具有语言检测功能。
然而,我怀疑他们所有人都会对如此短的文本片段产生问题。如果你的数据真的是这样的,那么最好的办法就是用与你的用例匹配的训练数据训练你自己的FastText模型。例如,如果你只对检测汉语感兴趣,你可以分为两类:汉语和非汉语。