如何对用其他形式的字符书写的自然语言进行分类?
How to classify natural languages written in other forms of characters?
背景
我想将这三个短语都归类为中文,'zh'
使用 fastText。
["Ni hao!", '你好!', 'ni hao!']
然而,经过训练的模型看起来不适用于语义分类。
有什么想法可以用不同的方式来完成同样的任务吗?
输出
[('zh', 0.9305274486541748)]
[('eo', 0.9765485525131226)]
[('hr', 0.6364055275917053)]
代码
sample.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 是 Google 的旧开源项目的一个端口,它使用简单的 ML 模型进行字符统计。
Spacy 有 language detection extension.
Polyglot 多语言 NLP 工具包也有语言检测。
但是,我怀疑他们所有人都会遇到这么短的文本片段的问题。如果这确实是您的数据的样子,那么最好的办法是使用与您的用例相匹配的训练数据来训练您自己的 FastText 模型。例如,如果您只对检测中文感兴趣,则可以分为两种类:中文和非中文。
背景
我想将这三个短语都归类为中文,'zh'
使用 fastText。
["Ni hao!", '你好!', 'ni hao!']
然而,经过训练的模型看起来不适用于语义分类。
有什么想法可以用不同的方式来完成同样的任务吗?
输出
[('zh', 0.9305274486541748)]
[('eo', 0.9765485525131226)]
[('hr', 0.6364055275917053)]
代码
sample.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 是 Google 的旧开源项目的一个端口,它使用简单的 ML 模型进行字符统计。
Spacy 有 language detection extension.
Polyglot 多语言 NLP 工具包也有语言检测。
但是,我怀疑他们所有人都会遇到这么短的文本片段的问题。如果这确实是您的数据的样子,那么最好的办法是使用与您的用例相匹配的训练数据来训练您自己的 FastText 模型。例如,如果您只对检测中文感兴趣,则可以分为两种类:中文和非中文。