2.2.1 词语切分
对于绝大部分印欧语系(Indo-European languages)的语言来说,词语之间通常由分隔符区分开来。英语是印欧语系语言的典型代表,英语句子中绝大部分单词之间都由空格或标点分隔。但是在以汉语为代表的汉藏语系(Sino-Tibetan languages)的语言中,词之间通常没有分隔符。因此在对文本进行分析前,通常需要将句子切分为词序列,称之为词语切分(Word Tokenization)。
词语切分任务可以被定义为:给定一个符号串x=c1c2···cn(其中,ci对于英语来说是字母、数字、标点符号等,对于汉语来说是汉字、数字、标点符号等),输出一个词形序列y=t1t2···tm,可能会省略或删除其中的部分标点符号。例如:
输入:Let's first understand what's NLP.
输出:Let␣'s␣first␣understand␣what␣'s␣NLP␣.
通过上面的例子可以看到,虽然英语句子中绝大部分单词都可以以空格和标点符号为分隔符进行识别,但还是存在一些例外情况,例如缩写(Prof.)、日期(02/18/2022)、数字(562,000)、连字符(upper-case)等。此外,还可以看到“Let's”被划分为“Let”和“'s”。正是因为此,在词语切分的定义中使用了词形。词形(Token)指的是在一个特定文档中某个能够表达语义含义的字符序列。虽然在大部分情况下词形和词没有区别,但是对于某些场景和算法,则有必要对词和词形进行区分。
在英语中,一些特殊的符号和数字也需要完整地保留在一起。比如数字(67.20)、时间(22:37)、微博话题标签(#北京2022年冬奥会#)、E-mail地址(cs_nlp@fudan.edu.cn)等。在特定的应用中,有时也会将“Hong Kong”“Head,Shoulders,Knees and Toes”划分为一个词形。这也使得在某些应用中词语切分与命名实体识别任务(将在第7章信息抽取中进行详细介绍)紧密相关。
在通常情况下,针对英语等印欧语系语言的词语切分任务,可以采用基于有限状态自动机(Fi-nite State Automaton,FSA)融合正则表达式的方法完成。但是对于汉语、日语、阿拉伯语等词语中间没有分隔符的语言,词语切分问题更加复杂,在后续章节中我们将以中文分词为例进行详细介绍。