使用字母 N-gram 代替单词有以下几个原因:
1) 给定语言所需的单词列表非常大,如果您考虑 fast、fast、fastest、fasted、fasts、fasting ……作为所有不同的单词,可能有 100,000 个。对于 80 种语言,您需要大约 80 倍的单词,占用大量空间—— 50 多兆字节。
2) 26 个字母的字母表的字母三元组数量为 26**3 或约 17,000 个,四元组 (N=4) 约 450,000 个,涵盖使用该字母表的所有语言。对于 30-100 个字符的较大字母表中的 N-gram,数字相似但稍大一些。对于汉文字母超过 4000 个的 CJK 语言,一元组 (N=1) 就足够了。对于某些 Unicode 脚本,每个脚本只有一种语言(希腊语、亚美尼亚语),因此不需要字母组合(所谓的 nil-grams N=0)
3)对于单词,当给定一个不在字典中的单词时,您根本没有任何信息,而对于字母 N-gram,您通常在该单词中至少有一些有用的字母组合。
CLD2 对大多数 Unicode 文字(字母表)使用四元组,包括拉丁文、西里尔文和阿拉伯文,对 CJK 脚本使用一元组,对于其他脚本使用 nilgrams,并且还包括数量有限的非常独特且相当常见的完整单词和单词对用于区分在统计上相似的语言困难组中,例如印度尼西亚语和马来语。字母二元组和三元组可能有助于区分少数语言(大约八种,参见https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit),但对于区分几十种语言是无用的。因此,CLD2 使用四元组,将每个字母组合与最有可能使用该组合的前三种语言相关联。这允许使用大约 1.5 MB 的表覆盖 80 种语言,以及使用大约 5MB 的表更详细地覆盖 160 种语言。