Python自然语言理解:自然语言理解系统开发与应用实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 自然语言与字符编码

根据Babbel.com(https://www.babbel.com/en/magazine/the-10-most-spoken-languages-in-the-world)所述,尽管大多数人说的是十大语言之一,但世界上存在着成千上万种口语和书面语形式的自然语言。本书将重点关注世界上的主要语言,但需要注意的是,不同的语言会给NLP应用程序带来不同的挑战。例如,在中文书面语中,词之间不存在空格,而大多数NLP工具使用空格来识别文本中的词。这意味着在处理中文时,除了识别空格外,还需要额外的步骤来分隔中文的词。这一点可以从图1.1由Google Translate翻译的例子中看出,该例子中的中文词之间没有空格。

图1.1 中文不像大多数西方语言那样用空格分隔单词

另一个需要注意的问题是,在有些语言中同一个词有许多不同的形式。一个词的尾缀反映出这个词的部分信息,如这个词在句子中所起的作用。如果你主要使用英语,你可能习惯了这种单词尾缀形式较少的情况。这使应用程序可以相对容易地计算一个词出现的频率。然而,这并不适用于所有语言。

例如,在英语中,单词walked可以用在不同的语境中,其形式相同但含义不同,例如“I walked”“they walked”或者“shehas walked”。然而,在西班牙语中,同一个动词(caminar)可能有不同的形式,比如Yo caminéellos caminaron,或者ella ha caminado。这给NLP带来的挑战是,可能需要额外的预处理步骤才能成功地分析这些语言中的文本。第5章将讨论如何为这些语言添加额外的预处理步骤。

另一个需要记住的要点是,在不同的语言之间,可用的处理工具及其质量可能存在显著的差异。对于世界上的主要语言,如西欧和东亚语言,一般都有相当不错的处理工具。然而,对于使用人数不足1000万的语言,可能不存在任何处理工具,或者处理工具的效果较差。这主要是由于可用的训练数据有限,以及处理这些语言的商业兴趣较低。

开发资源相对较少的语言被称为低资源语言。对于这些语言,没有足够的书面语样本用于训练大型机器学习模型。也许只有极少数的使用者能够对该语言的运作机理提供见解。这些语言可能濒临灭绝,或者只有少数人群在使用。尽管为其中一些语言开发自然语言方法可能不现实,或者代价非常昂贵,但为这些语言开发NLP技术的方法正在积极研究中。

最后,许多常见的语言并不使用罗马字符,如汉语、俄语、阿拉伯语、泰国语、希腊语和印地语等。在处理非罗马字母语言时,重要的是要认识到工具必须能够处理各种不同的字符编码。字符编码用于表示各种不同书写系统中的字符。在许多情况下,文本处理库中的函数具有多个参数,这些参数允许开发人员为打算处理的文本指定适当的编码。在为非罗马字母语言选择处理工具时,必须考虑工具能否处理这些字符编码。