#language #language-model #language-detection #identification #compact #detector #binding

sys cld3

Rust对紧凑语言检测器v3 (CLD3)的绑定,CLD3是一个用于语言识别的神经网络模型。C++代码来自 https://github.com/google/cld3

2个版本

0.1.1 2023年6月9日
0.1.0 2023年6月9日

#691 in 机器学习

Apache-2.0

2MB
66K SLoC

C++ 66K SLoC // 0.0% comments Rust 114 SLoC // 0.1% comments Shell 2 SLoC

cld3-rs

crates.io docs.rs downloads latest version downloads

Rust对紧凑语言检测器v3 (CLD3)的绑定,CLD3是一个用于语言识别的神经网络模型。

C++代码来自 https://github.com/google/cld3

使用方法

libprotobuf 是构建此crate所需的。

let mut cld = cld3::NNetLanguageIdentifier::new(0, 500).unwrap();
let rs = cld.find_language("こんにちは");
println!("{:?}", rs.language);
// ja

紧凑语言检测器v3 (CLD3)

模型

CLD3是一个用于语言识别的神经网络模型。此包包含推理代码和训练好的模型。推理代码从输入文本中提取字符n-gram,并计算每个n-gram出现的频率。例如,如图所示,如果输入文本是 "banana",则提取的三元组之一是 "ana",相应的频率是 2/4。n-gram被哈希到一个小的范围内的ID,每个ID由训练期间估计的密集嵌入向量表示。

该模型根据频率平均每个n-gram类型的嵌入,然后将平均嵌入连接起来产生嵌入层。网络的其他部分是一个隐藏(修正线性)层和一个softmax层。

要为输入文本获取语言预测,我们只需在网络中进行前向传递。

Figure

支持的语言

该模型输出BCP-47风格的代码,如下表所示。对于某些语言,输出根据脚本区分。语言和脚本名称来自 Unicode CLDR

输出代码 语言名称 脚本名称
af 阿非利堪斯语 拉丁文
am 阿姆哈拉语 埃塞俄比亚文
ar 阿拉伯语 阿拉伯语
bg 保加利亚语 西里尔文
bg-Latn 保加利亚语 拉丁文
bn 孟加拉语 孟加拉语
bs 波斯尼亚语 拉丁文
ca 加泰罗尼亚语 拉丁文
ceb 宿务语 拉丁文
co 科西嘉语 拉丁文
cs 捷克语 拉丁文
cy 威尔士语 拉丁文
da 丹麦语 拉丁文
de 德语 拉丁文
el 希腊语 希腊语
el-Latn 希腊语 拉丁文
en 英语 拉丁文
爱沙尼亚语 世界语 拉丁文
西班牙语 西班牙语 拉丁文
爱沙尼亚语 爱沙尼亚语 拉丁文
巴斯克语 波斯语 拉丁文
波斯语 芬兰语 阿拉伯语
芬兰语 菲律宾语 拉丁文
菲律宾语 法语 拉丁文
法语 法语 拉丁文
法语 荷兰语 拉丁文
爱尔兰语 爱尔兰语 拉丁文
苏格兰盖尔语 苏格兰盖尔语 拉丁文
加利西亚语 加利西亚语 拉丁文
古吉拉特语 古吉拉特语 古吉拉特语
豪萨语 豪萨语 拉丁文
夏威夷语 夏威夷语 拉丁文
印地语 印地语 梵文
梵文拉丁化 印地语 拉丁文
赫蒙语 赫蒙语 拉丁文
克罗地亚语 克罗地亚语 拉丁文
海地克里奥尔语 海地克里奥尔语 拉丁文
匈牙利语 匈牙利语 拉丁文
亚美尼亚语 亚美尼亚语 亚美尼亚语
印尼语 印尼语 拉丁文
伊博语 伊博语 拉丁文
冰岛语 冰岛语 拉丁文
意大利语 意大利语 拉丁文
希伯来语 希伯来语 希伯来语
日语 日语 日语
日语拉丁化 日语 拉丁文
爪哇语 爪哇语 拉丁文
格鲁吉亚语 格鲁吉亚语 格鲁吉亚语
哈萨克语 哈萨克语 西里尔文
柬埔寨语 柬埔寨语 柬埔寨语
卡纳达语 卡纳达语 卡纳达语
韩语 韩语 韩语
库尔德语 库尔德语 拉丁文
吉尔吉斯语 吉尔吉斯语 西里尔文
拉丁语 拉丁文 拉丁文
卢森堡语 老挝语 拉丁文
老挝语 拉脱维亚语 拉脱维亚语
拉脱维亚语 立陶宛语 拉丁文
立陶宛语 马尔加什语 拉丁文
马尔加什语 毛利语 拉丁文
毛利语 马其顿语 拉丁文
马其顿语 马拉雅拉姆语 西里尔文
马拉雅拉姆语 蒙古语 蒙古语
蒙古语 马拉地语 西里尔文
马拉地语 马来语 梵文
马来语 马耳他语 拉丁文
缅甸语 缅甸语 拉丁文
缅甸 尼泊尔语 尼泊尔语
荷兰语 荷兰语 梵文
挪威语 挪威语 拉丁文
挪威语 挪威语 拉丁文
尼亚扬贾语 尼亚扬贾语 拉丁文
旁遮普语 旁遮普语 旁遮普语
波兰语 波兰语 拉丁文
普什图语 普什图语 阿拉伯语
葡萄牙语 葡萄牙语 拉丁文
罗马尼亚语 罗马尼亚语 拉丁文
俄语 俄语 西里尔文
俄语拉丁化 俄语 英语
信德语 信德语 阿拉伯语
僧伽罗语 僧伽罗语 僧伽罗语
斯洛伐克语 斯洛伐克语 拉丁文
斯洛文尼亚语 斯洛文尼亚语 拉丁文
萨摩亚语 萨摩亚语 拉丁文
绍纳语 绍纳语 拉丁文
索马里语 索马里语 拉丁文
阿尔巴尼亚语 阿尔巴尼亚语 拉丁文
塞尔维亚语 塞尔维亚语 西里尔文
南非语 南非语 拉丁文
巽他语 巽他语 拉丁文
瑞典语 瑞典语 拉丁文
斯瓦希里语 斯瓦希里语 拉丁文
泰米尔语 泰米尔语 泰米尔语
泰卢固语 泰卢固语 泰卢固语
塔吉克语 塔吉克语 西里尔文
泰语 泰语 泰语
土耳其语 土耳其语 拉丁文
乌克兰语 乌克兰语 西里尔文
乌尔都语 乌尔都语 阿拉伯语
乌兹别克语 乌兹别克语 拉丁文
越南语 越南语 拉丁文
祖鲁语 祖鲁语 拉丁文
意第绪语 意第绪语 希伯来语
约鲁巴语 约鲁巴语 拉丁文
汉语 汉语 汉字(包括简体和繁体)
汉语拉丁化 汉语 拉丁文
祖鲁语 祖鲁语 拉丁文

类似的工作

Rust的自然语言检测库。 https://github.com/greyblake/whatlang-rs

将谷歌的cld3语言检测器翻译成Rust。仅为了乐趣。 https://github.com/edvakf/langdetect

依赖关系

~0.6–2MB
~31K SLoC