词与词元
用户:我需要一些帮助,这一点似乎很确定。ELIZA:如果你得到一些帮助,那对你意味着什么?用户:也许我可以学会与母亲相处。ELIZA:多告诉我一些你的家庭情况。用户:我母亲照顾我。ELIZA:你家里还有谁照顾你?用户:我父亲。ELIZA:你的父亲。用户:你在某些方面很像我的父亲。
Weizenbaum (1966)
上面的对话来自 ELIZA。它是一个早期的自然语言处理系统(natural language processing system),能够模仿罗杰斯学派心理治疗师的响应,与用户进行有限的对话(Weizenbaum, 1966)。ELIZA 是一个出人意料地简单的程序:它对词语进行模式匹配,识别“I need X”之类的短语,再把其中的词改写成“What would it mean to you if you got X?”等适当输出。以现代标准衡量,ELIZA 对人类对话的模仿非常粗糙,却取得了惊人的成功:许多与 ELIZA 交互的人逐渐相信,它真的理解自己。因此,这项工作促使研究者首次开始思考聊天机器人会给用户带来什么影响(Weizenbaum, 1976)。
当然,现代聊天机器人不再使用 ELIZA 首创的简单模式式模仿。不过,ELIZA 所体现的词语模式方法,在今天的词元化(tokenization)语境下依然重要。词元化是从连续文本中分离词和词的组成部分、把它们转换为词元的任务。作为现代 NLP 的第一步,词元化仍包含可以追溯到 ELIZA 的模式式方法。
要理解词元化,我们首先必须追问:什么是词?um 是一个词吗?New York 呢?不同语言中词的性质是否相似?越南语、粤语等语言的词非常短,而土耳其语等语言的词则很长。我们还需要思考如何用字符表示词语。本章将介绍 Unicode——现代字符表示系统——以及 UTF-8 文本编码(UTF-8 text encoding)。我们还将介绍语素(morpheme),即词语中有意义的组成部分,例如 longer 中的语素 -er。
文本词元化的标准做法,是使用输入字符作为指引。因此,在理解词语可能包含的组成部分后,我们将介绍标准的字节对编码算法(Byte-Pair Encoding,BPE),它会自动把输入文本拆分为词元。该算法利用字母序列的简单统计信息,归纳出由子词词元组成的词表。所有词元化系统还都依赖正则表达式执行某个处理步骤。正则表达式(regular expression)是一种用来形式化描述和操作文本字符串的语言,也是所有现代 NLP 系统中的重要工具。本章将介绍正则表达式并展示其使用示例。
最后,我们将介绍一种称为编辑距离(edit distance)的度量。它根据把一个字符串变成另一个字符串所需的编辑次数——插入、删除和替换——衡量两个词或字符串有多相似。每当 NLP 需要比较两个词或字符串时,编辑距离都会发挥作用;例如,它被用于自动语音识别中至关重要的词错误率(word error rate)指标。