什么是使一种语言看起来像它自己的因素-
什么是使一种语言看起来像它自己的因素?
原文:
towardsdatascience.com/what-makes-a-language-look-like-itself/
这篇文章探讨了如何使用简单的统计方法来学习这些视觉指纹,即最强烈指示你正在查看哪种语言的字符序列,跨越 20 种不同的欧洲语言。
如何使用统计方法学习语言指纹
要学习一种语言的视觉“指纹”,我们首先需要一种方法来衡量给定字符模式的特点。一个自然的起点可能是查看每种语言中最常见的字符模式。然而,这种方法很快就会失效,因为一个字符模式可能在一种语言中非常常见,同时也频繁出现在其他语言中。仅仅频率并不能捕捉独特性。相反,我们想要问:
“这种模式在一种语言中出现的可能性比所有其他语言高多少?”
这就是统计学的用武之地!正式地说,让:
-
L 是所有 20 种研究语言的集合
-
S 是跨越这些语言的所有观察到的字符模式的集合
要确定给定的字符模式 s∈S 对语言 l∈L 的识别强度,我们计算似然比:
[LR_{s,l} = \frac{P(s|l)}{P(s|\neg l)}]
这比较了在语言 l 中看到字符模式 s 的概率,与在任何其他语言中的概率。比率越高,该模式与该语言的联系就越独特。
实践中计算似然比
在实践中计算每个字符模式的似然比,我们需要将条件概率转换为我们可以实际测量的量。以下是我们的定义
相关的计数:
-
cl: 在语言 l 中字符模式 s 出现的次数
-
c¬l: 字符模式 s 在所有其他语言中出现的次数
-
N[l]: 语言 l 中字符模式出现的总次数
-
N[¬l]: 所有其他语言中模式出现的总次数
使用这些,条件概率变为:
[P(s|l) = \frac{c_l(s)}{N_l},~P(s|\neg l)=\frac{c_{\neg l}(s)}{N_{\neg l}}]
并且似然比简化为:
[LR_{s,l} = \frac{P(s|l)}{P(s|\neg l)} = \frac{c_l(s)\cdot N_{\neg l}}{c_{\neg l}(s)\cdot N_l}]
这给我们一个数值分数,量化了字符模式 s 在语言 l 中出现的可能性比所有其他语言高多少。
处理零计数
很遗憾,我们的似然比公式有一个问题:当 c¬l = 0 时会发生什么?
换句话说,如果某个字符模式 s 只出现在语言 l 中,而不在其他任何地方呢?这会导致分母为零,并且似然比无限大。
技术上,这意味着我们为该语言找到了一个完全独特的模式。但在实践中,这并不很有帮助。一个字符模式可能只在一个语言中出现一次,并且其他地方从未出现过,它会被赋予无限分值。作为一个强大的语言“指纹”,并不太有用。
为了避免这个问题,我们应用了一种称为加性平滑的技术。这种方法稍微调整了原始计数,以消除零值并减少罕见事件的影响。
具体来说,我们在分子中的每个计数上添加了一个小的常数α,在分母上添加了α|S|,其中|S|是观察到的字符模式总数。这相当于假设每个字符模式都有极小的机会在每种语言中出现,即使它尚未被观察到。
通过平滑,调整后的概率变为:
[P'(s|l) = \frac{c_l(s) + \alpha}{N_l + \alpha|S|},~P'(s|\neg l)=\frac{c_{\neg l}(s) + \alpha}{N_{\neg l} + \alpha|S|}]
最后要最大化的似然比是:
[LR_{s,l} = \frac{P'(s|l)}{P'(s|\neg l)} = \frac{(c_l(s) + \alpha)\cdot(N_{\neg l} + \alpha|S|)}{(N_l + \alpha|S|)\cdot(c_{\neg l}(s) + \alpha)}]
这样可以保持稳定性,并确保一个罕见的模式不会仅仅因为它是独特的就自动占据主导地位。
数据集
现在我们已经定义了一个指标来识别最独特的字符模式(我们的语言“指纹”),是时候收集实际的语言数据进行分析了。
为了这个目的,我使用了 python 库wordfreq,它根据维基百科、书籍、字幕和网页文本等大规模来源编译了数十种语言的单词频率列表。
对于这种分析,一个特别有用的函数是top_n_list(),它返回一个按频率排序的列表,列出提供语言中频率最高的前 n 个单词。例如,要获取冰岛语中最常见的 40 个单词,我们会调用:
wordfreq.top_n_list("is", 40, ascii_only=False)
参数ascii_only=False确保非 ASCII 字符(如冰岛语的“ð”和“þ”)在输出中得以保留。这对于这项分析至关重要,因为我们正在寻找语言独特的字符模式,这包括单个字符。
为了构建数据集,我从以下 20 种欧洲语言中提取了每个语言中最常见的 5000 个单词:
加泰罗尼亚语、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、匈牙利语、冰岛语、意大利语、拉脱维亚语、立陶宛语、挪威语、波兰语、葡萄牙语、罗马尼亚语、西班牙语、瑞典语和土耳其语。
这产生了包含 10 万个总词汇的大型多语言词汇表,足够丰富,可以跨语言提取有意义的统计模式。
为了提取分析中使用的字符模式,从数据集中的每个单词中生成长度为 1 到 5 的所有可能的子串。例如,单词language将包含模式如l、la、lan、lang、langu、a、an、ang等。结果是包含 20 种研究语言中观察到的超过 180,000 个独特字符模式的综合集S。
结果
对于每种语言,都显示了按似然比排名的前五个最独特的字符模式。平滑常数被选为α=0.5。
因为原始似然比可能相当大,所以我报告了似然比(LR)的 10 为对数(log10)。例如,对数似然比为 3 表示该字符模式在该语言中出现的可能性是 10³ = 1,000 倍高于其他任何语言。请注意,由于平滑处理,这些似然比是近似的而不是精确的,某些分数的极端性可能被减弱。
每个单元格显示了一个排名靠前的字符模式及其对数似然比。
| 语言 | #1 | #2 | #3 | #4 | #5 |
|---|---|---|---|---|---|
| 加泰罗尼亚语 | ènc 3.03 | ènci 3.01 | cions 2.95 | ència 2.92 | atge 2.77 |
| 捷克语 | ě 4.14 | ř 3.94 | ně 3.65 | ů 3.59 | ře 3.55 |
| 丹麦语 | øj 2.82 | æng 2.77 | søg 2.73 | skab 2.67 | øge 2.67 |
| 荷兰语 | ijk 3.51 | lijk 3.45 | elijk 3.29 | ijke 3.04 | voor 3.04 |
| 英语 | ally 2.79 | tly 2.64 | ough 2.54 | ying 2.54 | cted 2.52 |
| 芬兰语 | ää 3.74 | ään 3.33 | tää 3.27 | llä 3.13 | ssä 3.13 |
| 法语 | êt 2.83 | eux 2.78 | rése 2.73 | dép 2.68 | prése 2.64 |
| 德语 | eich 3.03 | tlic 2.98 | tlich 2.98 | schl 2.98 | ichen 2.90 |
| 匈牙利语 | ő 3.80 | ű 3.17 | gye 3.16 | szá 3.14 | ész 3.09 |
| 冰岛语 | ð 4.32 | ið 3.74 | að 3.64 | þ 3.63 | ði 3.60 |
| 意大利语 | zione 3.41 | azion 3.29 | zion 3.07 | aggi 2.90 | zioni 2.87 |
| 拉脱维亚语 | ā 4.50 | ī 4.20 | ē 4.10 | tā 3.66 | nā 3.64 |
| 立陶宛语 | ė 4.11 | ų 4.03 | ių 3.58 | į 3.57 | ės 3.56 |
| 挪威语 | sjon 3.17 | asj 2.93 | øy 2.88 | asjon 2.88 | asjo 2.88 |
| 波兰语 | ł 4.13 | ś 3.79 | ć 3.77 | ż 3.69 | ał 3.59 |
| 葡萄牙语 | ão 3.73 | çã 3.53 | ção 3.53 | ação 3.32 | açã 3.32 |
| 罗马尼亚语 | ă 4.31 | ț 4.01 | ți 3.86 | ș 3.64 | tă 3.60 |
| 西班牙语 | ción 3.51 | acción 3.29 | ión 3.14 | sión 2.86 | iento 2.85 |
| 瑞典语 | förs 2.89 | ställ 2.72 | stäl 2.72 | ång 2.68 | öra 2.68 |
| 土耳其语 | ı 4.52 | ş 4.10 | ğ 3.83 | ın 3.80 | lı 3.60 |
讨论
以下是对结果的一些有趣解释。这并不是一个全面的分析,只是我发现的一些值得注意的观察:
-
许多具有最高似然比率的字符模式是它们语言中独特的单个字符,例如之前提到的冰岛语的“ð”和“þ”,罗马尼亚语的“ă”,“ț”和“ș”,或土耳其语的“ı”,“ş”和“ğ”。由于这些字符在数据集中的所有其他语言中基本上都缺失,如果没有加性平滑,它们将产生无限的似然比。
-
在某些语言中,尤其是荷兰语,许多顶级结果都是彼此的子串。例如,顶级模式“ijk”也出现在排名更高的下一个模式中:“lijk”,“elijk”和“ijke”。这表明某些字母组合在较长的单词中频繁重复使用,使它们对该语言更加独特。
-
英语在所有分析的语言中具有最不独特的字符模式,其最大对数似然比仅为 2.79。这可能是由于许多其他语言的顶级 5,000 个单词列表中存在英语借词,这稀释了英语特定模式的独特性。
-
在一些情况下,顶级字符模式反映了不同语言之间共享的语法结构。例如,西班牙语的“-ción”,意大利语的“-zione”和挪威语的“-sjon”都作为名词化后缀,类似于英语的“-tion”,将动词或形容词转换为名词。这些结尾在每个语言中都十分突出,并强调了不同语言如何使用不同的拼写遵循相似的模式。
结论
这个项目始于一个简单的问题:是什么让一种语言看起来像它自己?通过分析 20 种欧洲语言中最常见的 5000 个单词及其使用的字符模式,我们发现了每种语言的独特“指纹”——从带重音的字母“ş”和“ø”到重复的字母组合“ijk”或“ción”。虽然这些结果并不旨在成为定论,但它们提供了一种有趣且基于统计的方法来探索使语言在视觉上区别开来的因素,即使不理解一个单词。
请参阅我的GitHub 仓库以获取此技术完整代码实现的详细信息。
感谢您的阅读!
参考文献
wordfreq Python 库:
- Robyn Speer. (2022). rspeer/wordfreq: v3.0 (v3.0.2). Zenodo. https://doi.org/10.5281/zenodo.7199437

浙公网安备 33010602011771号