如何对以其他文字形式书写的自然语言进行分类



背景

我想用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模型。例如,如果你只对检测汉语感兴趣,你可以分为两类:汉语和非汉语。

最新更新