2个版本
| 0.1.1 | 2023年6月9日 |
|---|---|
| 0.1.0 | 2023年6月9日 |
#691 in 机器学习
2MB
66K SLoC
cld3-rs
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层。
要为输入文本获取语言预测,我们只需在网络中进行前向传递。

支持的语言
该模型输出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