2.1 词
下面的句子中有多少个词?
They picnicked by the pool, then lay back on the grass and looked at the stars.
如果不把标点符号算作词,这句话有 16 个词;如果把标点算进去,则有 18 个。是否把句号(“.”)、逗号(“,”)等当作词,取决于具体任务。标点符号对于寻找事物的边界(逗号、句号、冒号)以及识别意义的某些方面(问号、感叹号、引号)都至关重要。大语言模型通常把标点符号算作独立的词。
口语给“词”的定义带来了其他复杂问题。请看下面这句口语对话中的话语(话语(utterance)是语言学技术术语,指句子在口语中的对应形式):
I do uh main- mainly business data processing
这句话包含两类不流利现象(disfluency)。中途截断的词 main- 称为片段(fragment);uh 和 um 这样的词称为填充词(filler)或填充停顿(filled pause)。我们应该把它们视为词吗?答案仍然取决于应用。如果在构建语音转写系统,我们最终可能希望删除这些不流利现象;但有时也会保留它们。uh 或 um 等不流利现象其实有助于语音识别预测下一个词,因为它们可能表示说话者正在重新开始一个分句或思路;因此,语音识别会把它们作为普通词处理。不同的人会使用不同的不流利表达,所以这些表达也可作为识别说话者的线索。事实上,Clark and Fox Tree(2002)表明,uh 和 um 在英语中具有不同含义。你认为分别是什么?
在思考什么是词时,或许最重要的是区分两种谈论词的方式;这一区分将在全书中反复使用。请看下面的句子。如果忽略标点,它包含 16 个词,却只有 14 个不同的词(因为 the 出现了 3 次)。
They picnicked by the pool, then lay back on the grass and looked at the stars.
我们把一个语料库中不同词语的集合称为词类型(word type)。因此,上句含有 14 个词类型。如果整种语言的词表(该语言中所有可能词语的集合)为 ,类型数量就是词表规模 。我们把连续文本中的词语实例数量 称为词实例(word instance),所以上例中 。[1]
我们仍然需要作出一些决定!例如,是否应当把首字母大写的字符串(如 They)和不大写的字符串(如 they)视为同一个词类型?答案取决于任务!在一些不太关心格式的任务中,They 与 they 可以合并为同一类型;在另一些任务中,大小写是一项有用特征,需要予以保留。有时,我们会为同一个 NLP 模型保留两个版本:一个区分大小写,另一个不区分大小写。
到目前为止,我们讨论的都是正字法词(orthographic word),即根据英语书写系统划分的词。但词还有许多其他可能的定义方式。
| 语料库 | 类型数 = |V| | 实例数 = N |
| Shakespeare | 2.9 万 | 88.4 万 |
| Brown corpus | 3.8 万 | 100 万 |
| Switchboard telephone conversations | 2 万 | 240 万 |
| COCA | 200 万 | 4.4 亿 |
| Google n-grams | 1300 万 | 1 万亿 |
图 2.1 若干英语语料库中词形类型与实例的粗略数量。规模最大的 Google n-grams 语料库含有 1300 万个类型,但该统计只包括出现至少 40 次的类型,因此真实数量会大得多。
例如,从正字法角度看,I’m 是一个词;但从语法功能看,它相当于两个词:主语代词 I 和动词 ’m,后者是 am 的缩写。
一旦开始考虑其他语言,这些区分就更难作出。例如,汉语、日语和泰语等语言的书写系统根本没有正字法词!也就是说,它们不使用空格标示潜在的词边界。以汉语为例,词由汉字构成。每个汉字通常表示一个意义单位(即下文将介绍的语素(morpheme)),并且可以读作一个音节。根据度量方法的不同,汉语词的平均长度约为 1.5 到 1.9 个汉字。但由于汉语没有正字法词,判断汉语中什么算作一个词非常复杂。例如,请看下面的句子:
(2.1) 姚明进入总决赛 yao m ´ ´ıng j`ın ru z ` ong ju ˇ e s ´ ai` “Yao Ming reaches the finals”
正如 Chen et al.(2017b)所指出的,这句话可以被视为 3 个词。这采用了称为“Chinese Treebank”的词定义,其中中文姓名(姓后接名)被视为一个词:
(2.2) 姚明 进入 总决赛YaoMing reaches finals
同一句话也可以被视为 5 个词(“Peking University”标准):姓名的各部分被拆成独立单位,某些形容词也作为不同的词:
(2.3) 姚 明 进入 总 决赛
Yao Ming reaches overall finals
最后,也可以在汉语中完全忽略词,把汉字作为基本元素,将这句话视为由 7 个汉字构成的序列。由于汉字对大多数应用来说处于适当的语义层级,这种方法处理汉语的效果相当不错(Li et al., 2019):
(2.4) 姚 明 进 入 总 决 赛
Yao Ming enter enter overall decision game
但这种方法不适用于日语和泰语,因为单个字符作为单位过小。
上述词语定义问题,使我们很难在跨语言 NLP 中以词作为文本词元化的基础。
然而,词还存在另一个问题:词实在太多了!!!英语究竟有多少个词?当我们谈论一种语言的词数时,通常指的是词类型数量。图 2.1 展示了若干英语语料库中类型与实例的粗略数量。
你会注意到,所考察的语料库越大,我们发现的词类型就越多!这说明“有多少个词”并没有明确答案;随着数据增多,答案会不断增长!我们可以从数学上看到这一事实:类型数 与实例数 之间的关系称为 Herdan 定律(Herdan’s Law)(Herdan, 1960),也称 Heaps 定律(Heaps’ Law)(Heaps, 1978),分别以其在语言学和信息检索领域的发现者命名。公式 2.5 展示了这一定律,其中 和 是正常数,且 :
的值取决于语料库规模和体裁;常见报告值为 0.44 到 0.56,有时甚至更高。粗略来说,文本的词表规模增长速度略快于其词数长度的平方根。
这一定律还有一些变体,它们反映了词语大致可以分成两类。第一类是功能词(function word),即英语 a、of 等语法词;它们的数量通常不会无限增长(一种语言往往只有固定数量的功能词)。第二类是实词(content word),即意义往往涉及人物、地点和事件的名词、形容词与动词。名词,尤其是姓名和技术术语等专有名词,确实会无限增长。因此,考虑功能词与实词差异的模型,在语料库开头所有词仍不断出现的阶段采用一个 值;到了后来只有实词中的新词仍在出现时,则采用另一个 值。图 2.2 展示了 Tria et al.(2018)的一个例子:在 Gutenberg 图书语料库上计算 Heaps 定律时得到两个 值(在原图中记为 )。

图 2.2 粗蓝线表示词表规模 (原图记为 )如何随文本长度(原图的 )变化,数据来自公开图书构成的 Gutenberg 语料库。请注意,在语料库开头,常用词和功能词都在出现,语料库规模与词表规模之间大致呈线性关系(绿线,)。此后,当功能词大多已经出现,新词数量的增长速度减慢,更接近语料库规模的平方根。图片来自 Tria et al.(2018)。
词语数量无限增长这一事实,会给所有计算模型带来问题。无论词表有多大,我们都永远无法建立一个涵盖所有可能出现词语的词表!这意味着计算模型会不断遇到未知词(unknown word),也就是它以前从未见过的词。这对机器学习模型而言是一个巨大问题。
由于这两个问题——第一,许多语言没有正字法词,事后定义它们非常困难;第二,词语数量会无限增长——语言模型和其他 NLP 模型通常不把词作为处理单位。相反,它们使用称为子词(subword)的更小单位;这些单位可以重新组合,用来表示模型从未见过的新词。为了思考如何定义子词,我们首先需要讨论比词更小的单位:语素和字符。
依照早期传统,词语实例过去常被称为词元(word token),如今偶尔仍能见到这种用法;但现在我们尽量把 token 一词专用于指称子词词元化算法的输出。