《自然语言处理技术综述(第三版)》(2)----分词和归一化

写在前面:

学习和应用NLP有几年了,在工程应用上也小有成果,除了开发了智能客服、智能营销、智能回访、保险智能机器人系统外,正在做一个开放平台,希望不久能为更多企业、个人所使用。在这个过程中积累了很多算法改进、应用架构、工程实施以及产品优化方面的经验,希望能尽可能的分享给大家。这个专栏里,我将翻译《Speech and Language Processing(第三版)》(目前还是草案)。希望能给大家带来最新的内容,为大家提供一个系统学习NLP的基础内容。英文原文在这里http://web.stanford.edu/~jurafsky/slp3/,如有喜欢请大家自行下载。

由于目前原作者还没有开放第一章,我将从第二章开始介绍给大家。因业务和翻译水平有限,力求大家明白,不当之处请大家多多包涵,并不吝赐教。同时,本文均为我一字一字敲写,如有与其他人雷同,纯属巧合。

2.2 词和语料库

在我们讨论如何处理一个词之前,我们需要先确定什么是一个词。让我们先看一个语料库——一个计算机可读的文本或语音集合。例如,布朗语料库是来自一百万种不同题材(报纸、小说、非小说、学术等)的500个书面文本,共计上百万个单词的集合,该语料库由布朗大学在1963年-1964年间收集。请看下面的布朗句子有多少个单词?

He stepped out into the hall, was delighted to encounter a water brother.

如果不包括标点符号,这个句子有13个词。如果我们计算标点符号,则是15个词。我们是否把句号(“.”)、逗号(“,”)等标点当作一个单词取决于具体任务。标点对于发现边界(逗号、句号、冒号)和识别语义(问号、感叹号、引号)方面至关重要。对于一些任务,比如词类标注、句法分析或语音合成,我们有时把标点符号当作是单独的单词。

在90年代初,一个电话语料库收集了2430个陌生人之间电话对话,平均每条语料6分钟,总共240个小时的对话和大约300万个单词。这样的口语语料库没有标点符号,但在界定词时也会引入其他的语法。让我们看一个来自该语料库的一条话语:

I do uh main- mainly business data processing

这个语料里有两处不流利的地方。main-被称为片段;像uh和um这样的词称为填充词或填充暂停。我们应该把这些看作是词吗?同样,这取决于应用程序。如果我们正在构建一个语音转录系统,我们可能希望最终消除这些差异。

但我们有时也会保持这些不流畅。像uh或um这样的不流畅现象实际上在语音识别中有助于预测即将到来的单词,因为它们可能表明说话者正在重新开始一个句子或概念,因此对于语音识别,他们被视为规则词。不流畅性也可以成为说话人识别的线索。事实上,克拉克和福克斯树(2002)的文章表述了uh和um的不同含义。你也可以思考一下它们是什么?

首字母大写的词如They和首字母小写的they,它们是同一个词吗?这些在某些任务(语音识别)合并为一个词,而对于词性标注或命名实体识别,大小写是有用的特征并被保留。

cats和cat这种形式如何算?这两个词有相同的词根cat,但有不同的词形。是一组具有相同词干、相同主要词性和相同词义的词形。词形是词的直接变形或派生形式。对于形态复杂的语言,如阿拉伯语,我们经常需要进行词形还原处理。然而,对于英语中的许多任务来说,单词表就足够了。

英语中有多少单词?要回答这个问题,我们需要区分两种计算词的方式。词类数是语料库中不同词的数量;如果字典中的词的集合是V,则词类数和词汇量|V|相同。分词数是语料中各种类型词出现的次数(译者注:出现一次计数一次,词类是去重的)。如果我们忽略标点符号,下面的布朗句有16个分词和14种词类型:

They picnicked by the pool, then lay back on the grass and looked at the stars.

当我们说词的数量时,我们通常指的是词类型的数量。

 

图2.10 一些语料库的词类型和分词的粗略数目。最大的谷歌N-gram语料库包含1300万种词类型,但是这个计数只包括出现40次或更多次的类型,所以真正的数字会大得多。

图2.10显示了从一些流行的英语语料库中计算得出的词类型数和分词数的粗略数据。我们发现语料库越大,词类型数就越多。事实上,|V|词类型数和分词数N之间存在着某种关系,称为Herdan定律(Herdan,1960)或Heaps定律(Heaps,1978)。方程2.1表示了这种关系,其中K和β为正常数,0<β<1。

β的值取决于语料库的大小和题材,但对于图2.10中的大语料库,β的范围在67-75之间。

语言中的单词数的另一种度量是词根的数目而不是词形类型。字典可以帮助给出词根计数;字典条目或黑体形式是词根数的粗略上限(因为一些词根具有多个黑体形式)。《牛津英语词典》1989版共有615000个词条。

2.3 文本归一化

       一个文本几乎在进行任何一种自然语言处理前都必须被归一化。归一化过程通常至少包括以下三个任务:

  1. 对目标文本分词
  2. 规范词的格式
  3. 对目标文本分句

在后面的章节中,我们将介绍每一个任务

2.3.1用于分词和归一化的UNIX工具

我们从一个简单的分词和归一化版本开始,这些简单的功能基本上可以通过一个UNIX命令行来完成。我们将使用一些UNIX命令:tr,用于系统地改变输入中的特定字符;sort,按字母顺序对输入行进行排序;uniq,对相邻的相同行进行合并和计数。

例如,我们从一个莎士比亚文本文件sh.txt中的单词开始。我们可以使用tr来将每一个非字母序列转换成换行符,从而将每个字母序列单独成行('AZ-Z’是指字母、-c选项补充到非字母表,而-s选项将所有序列压缩成单个字符)。

输出是这样的:

THE

SONNETS

by

William

Shakespeare

From

fairest

creatures

We

...

现在每行有一个单词,我们可以对这些行进行排序,并将它们传递给uniq -c,将排序后的单词进行合并和计数:

       通过这样的处理,将输出:

1945 A

72 AARON

19 ABBESS

25 Aaron

6 Abate

1 Abates

5 Abbess

6 Abbey

3 Abbot

...

       或者,我们可以将所有的大写字母合并为小写字母

       通过该命令行,输出结果为:

14725 a

97 aaron

1 abaissiez

10 abandon

2 abandoned

2 abase

1 abash

14 abate

3 abated

3 abatement

...

       现在我们可以重新排序,找到频繁的单词。-n选项排序意味着按数值排序而不是按字母顺序排序,而-r选项意味着按相反顺序排序(最高到最低):

       这个结果显示了莎士比亚中最常见的词,就如同在任何其他语料库一样,基本都是短功能词:文章、代词、介词:

27378 the

26084 and

22538 i

19771 to

17481 of

14725 a

13826 you

12489 my

11318 that

11112 in

...

       这种类型的UNIX工具在建立任何语料库的快速词表统计数据方面非常方便。

2.3.2 分词和归一化

上面简单的UNIX工具对于获取粗略的单词统计来说是很好的,但是更复杂的算法通常需要用到分词,例如将文本分割成单词的任务、归一化的任务、以及将词转为标准格式的任务。

虽然UNIX命令序列刚刚删除了所有的数字和标点符号,但对于大多数NLP应用来说,我们需要保留在我们的分词中。我们经常希望把标点符号作为一个单独的分词;逗号在解析器中是非常有用的信息,句号帮助找到句子的边界。但是,我们经常也希望保持内部出现的标点符号,例如M.P.H,Ph.D. AT& T,cap’n 。价格($45.55)和日期(01 / 02 / 06)需要保留特殊字符和数字;我们不希望把这个价格分为“45”和“55”两个单独分词。还有网址URL(http://www.stanford.edu) ,Twitter标签(#nlproc),或者电子邮件地址(someone@cs.colorado.edu)这些场景中也都希望保留特殊字符和数字。

数字表达式同时也引入了其他并发症;逗号通常出现在单词边界上,但逗号被用在英语数字中用于三数字分段555,500.50。当然,每种语言在分词上的要求也不尽相同。例如许多欧洲大陆语言,如西班牙语,法语和德语,则使用逗号来标记小数点,和空格表示(或某时期这样用)英语中的三数字分段,例如,555 500,50

一个分词器也可以用来拆分连写词,例如,把what’re转换为what are,将we’re转换为we are连写不会是一个词单独存在,一定是依附于另一个词。在其他字母语言中,也会有这样的缩写,包括法语中的文章和代词(j’ai, l’homme)。

根据不同的应用场景,分词算法也可以将多词表达式作为一个分词(如New York 或者rock ’n’ roll),做到这一点需要某种类型的多词表达式字典。因此,分词与命名实体识别密切相关,如检测名称、日期和组织的任务(第20章)。

宾州树库分词(Penn Treebank tokenization)是一种常用的分词标准,用于解析由语言数据联盟(LDC)发布的语料库(treebanks),这是许多有用数据集的来源。这个标准可以分离连词(比如,把doesn’t变为doesn’t),保持连接符的连接,并分离出所有标点:

分词还需要被归一化,其中一种是将多种形式的词归一化,如USAUSuh-huhuhhuh。尽管在归一化过程中丢失了拼写信息,但这种方法是非常有价值的。在信息检索中,我们可能需要一个查询US来匹配包含USA字样的文档;在信息抽取中,我们可能需要在不同拼写的实例中提取一致的信息。

大小写合并法是另一种归一化方法。对于诸如语音识别和信息检索的任务,一切都映射到小写。相比之下,在情感分析、文本分类、信息抽取和机器翻译等任务中,区分大小写是很有帮助的,且一般情况下不做大小写合并。(例如,US是国家和us是代词,这种情况下如果使用大小写合并,则弊大于利)。

在实践中,由于分词过程需要在任何其他算法处理之前运行,所以它执行效率就很重要。归一化的标准方法是使用基于正则表达式的确定性算法,编译成非常有效的有限状态自动机。精心设计的确定性算法可以处理歧义性。比如,撇可以用于很多场景:属格,如the book’s cover;引用,‘The other class’, she said;附着词,they’re。那么在不同场景下就要做不同的区分。我们将在第3章中讨论自动机的用法。

2.3.3 中文分词:最大匹配算法

       有些语言,包括中文、日文和泰语,不使用空格来标记单词边界,因此需要用其他分词方法。例如,在汉语中,词组是由称为汉字的字符组成。每个字符一般代表单个语素,可作为单个音节发音。词组平均长度约为2.4个字符。最大匹配算法是一个基于贪婪思想的简单、有效的中文分词法。这个方法也经常用作衡量一个新算法先进行程度的参照基线。该算法需要一个字典(词组列表)。

最大匹配算法是从字符串的开头开始的。它从字典中选择与当前位置可以匹配的最长词组。然后指针指向字符串中的这个词组的结尾。如果没有词组被匹配,指针就指向下一个字符(产生一个单字词)。然后从新的指针位置迭代此算法。图2.11呈现的是该算法的一个版本。

图2.11 分词中的最大匹配算法

最大匹配法在中文上效果很好,下面的例子展示了一个简单的中文句子的应用,它使用了一个从语言数据联盟获得的简单的汉语词汇表:

最大匹配算法在英语表现就很差了。为了更直观清晰,我们把图灵的名言“We can only see a short distance ahead”中的空格去掉,产生一个没有空格的句子 “wecanonlyseeashortdistanceahead
”。使用最大匹配算法结果如下所示。

       在英语中,该算法会产生各种混乱,比如错误地选择了canon而不是在can,产生了单字符词ly,并且使用非常罕见的单词ort

这个算法在中文中比英语更好,因为汉语中的词组比英语短很多。我们可以用一个称为分词错误率的度量来量化分词器的性能。该方法通过比较分词器的输出与人工标注的分词,看到有多少分词不同。分词错误率通过最小编辑距离来判定分词器输出的分词与手工标注分词之间近似程度。最小编辑距离是单词插入、删除和替换的数量除以改手工标注的分词长度,我们将在第2.4节中看到如何计算编辑距离。然而,即使在汉语中,最大匹配算法也存在一些问题,例如处理未知词组(不在字典中的词组)。

最精确的中文分词算法一般使用在已做标注的训练集上通过监督机器学习训练的统计序列模型;在第10章中我们将介绍序列模型。

2.3.4 词形还原和词干提取

词形还原是确定两个具有相同词根,但形式不同的词的任务。如单词am、are、is的词形还原是be;dinner和dinners的词形还原是dinner。通过词形还原来表示一个词对于网络搜索是很重要的,比如我们想通过搜索woodchuck,找到包含wood-chuck的页面。在像俄语这样的形态复杂的语言中,这一点尤其重要,例如,Moscow这个词在Moscow, of Moscow, from Moscow等词中有不同的结尾。把这些形式通过词形还原转化为同一个词,都会让我们找到所有关于Moscow的句子。像He is reading detective stories那样的句子词形还原为He be read detective story。(译者注:词形还原,基本不改变句子的意思,只是会影响词语的形态和语法)。

如何进行词形还原?最复杂的词形还原方法涉及完整的词法解析。词法是研究词是如何从称为语素的较小单位组建起来的方法。语素的两大类分别是:词干——一个词的核心语素,提供主要语义;词缀——添加各种附加的含义。例如,fox这个词由一个语素(语素是fox)组成,单词“cats”由两个语素组成:词素cat和词素-s。形态分析器将cats解析成两个词素cat和s。我们将在第3章中介绍词法解析。

波特词干提取

虽然使用有限状态机来构建完整的形态分析器是处理词形变化的最常用的方法,但有时我们也会使用词缀的简单、粗略的切分。这种朴素的形态学分析被称为词干提取,最广泛使用的词干提取算法之一是简单有效的波特(1980)算法。波特提取作用于一下句子:

词干提取的结果如下:

该算法基于串联运行的一系列重写规则,即级联,其中每个处理的输出被作为输入传递给下一个处理;这里是规则的采样:

波特提取的详细规则列表以及代码(用javaPython等语言)可以在Martin Porter的主页上找到;也可以看到原始文件。

在我们需要合并具有相同词干但不同形态的任务时,我们一般使用简单的词干提取方法,这样非常有效。当然,他们也会产生超过和泛化的错误,如下表所示:

2.3.5 分句

分句是文本处理中的另一个重要步骤。将文本分割成句子最有用的线索是标点符号,如句号、问号、感叹号。问号和感叹号是句子边界的相对明确的标记。另一方面,句号有很多歧义的地方。句号“.”可以在用于句子边界标记还是缩略语标记(Mr. or Inc.)时是有歧义的。比如如果恰好Inc.在一个句子的结尾,那么这个句号即表示缩写也表示句子结束。因此,分句和分词可以联合解决。

一般来说,分句的方法是通过建立一个二元分类器(基于一系列规则或机器学习)来确定一个周期是单词的一部分还是句子边界标记。在作出判定时,这个分类器可以知道该句号是否附属于一个常用的缩写;因此,缩写词典是非常有用的。

目前最先进的分句方法是基于机器学习,并在后面的章节中介绍。

 

 

 

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值