《Speech and Language Processing》Chapter 2 Text Normalization 文本规范化

C2. Text Normalization

处理文本之前还需要Text Normalization。归结起来有以下几种Normalization方式:

  1. Tokenizing (segmenting) words
  2. Normalizing word formats
  3. Segmenting sentences

1. 用Unix工具进行粗略的Tokenization和Normalization

可以使用几个Unix命令进行粗略的标注和标准化(以及词频统计)。如tr,可以更改输入为特定的字符;sort,可以将输入按字母顺序排列;uniq,可以折叠相邻的行并统计数量。

2. Word Tokenization(分词)

用Unix粗略的处理方式会忽略掉标点和数字,而对于大多数NLP任务而言,它们之中也有对于文本而言非常重要的部分,如Ph.D,AT&T,价格($45.6),日期(01/02/06)。不应该将它们分割开。又比如URLs,hashtags,Emails。下面是几种需要特别考虑的情况。

2.1 Number expressions

数字表达式还有其他的复杂情况。逗号通常处在单词的边缘,有时又会在数字之间:555,500.50。不同国家之间关于这个数字位数分割的表达还有不同的形式。

2.2 clitic(附加词)

缩写的附加词通常会有一个单撇号’。we’re→we are,附加词不能单独出现,一定会跟在其他单词的后面。

2.3 Tokenize multiword expressions as a single word

某些分词条件下,还会将多个单词视为一个token,如New York。因此Tokenization和**命名实体识别(named entity detection)**任务有密切联系(18章)。

2.4 Penn Treebank tokenization

这是一种常用的分词标准。它使用的语料库是Linguistic Data Consortium (LDC)发布的。该语料库将附加词(clitic)与其相连的单词分隔开,同时保留分隔符’-’,将其余所有标点分隔开。

An example of Penn Treebank tokenization

实际上,由于tokenization需要在任何其他语言处理之前运行,因此它必须非常快。因此,tokenization的标准方法是使用基于正则表达式的确定性算法,这些正则表达式被编译为非常有效的有限状态自动机(FSA)。其他精心设计的分词算法还能避免语句中的歧义。

在这里插入图片描述

对于像汉语、日语这样不依靠空格实现单词分隔的语言而言,分词任务更加艰难,每一个字符有特定的含义称之为“词素(morpheme)”。

Chinese Sentence Word Tokenization

对于中文NLP分词任务,通常将字符(characters)作为输入,而不是单词(words)。

3. Byte-Pair Encoding for Tokenization

这是另一种对输入文本进行分词标注的手段,它并不是按“单词(Words)”或“字符(Characters)”进行分词。有时我们希望对以空格分隔(space-delimited)的单词(独立、完整的一个单词)进行标记,或是长度超过一个单词的,如New York Times;或是小于一个单词的词素(morphemes),如-est,-er,un-。

3.1 subword

考虑subword的一个好处是,它能够帮助我们解决一些未知单词的情况。对于机器学习系统,如果在训练集中包括了low,lowest单词,而不包含lower这个词,那么在对该系统进行测试时就不会认识lower这个词。

一种解决办法是,对绝大多数的单词采用word级的token,而对于一些常见的词素,如un-,-er这种subword单独进行token。这样通过组合就能表示一些未知单词的情况。最简单的一种算法是byte-pair encoding(BPE),它是基于文本压缩的一种方法,但这里我们将其用作tokenization。

3.2 byte-pair encoding

该算法以一个符号集合(即字符集合,set of characters)开始。每个word被表示为字符序列加上‘

终结符 _ 。如low:l o w _。在每次循环中,统计出现频次最高的符号对(‘A’,‘B’),然后将其表示为一个新的符号(‘AB’)添加到符号集合中。重复上述过程,生成越来越长的字符串为新的符号,在经过k次融合后,算法会向原始的符号集合里添加了新的k个符号,k是算法的一个参数。

在测试集上使用该算法时,我们按照词素融合的顺序贪婪地处理测试集单词。如果遇到了学习过的单词,它会被表示(token)为一个完整单词,而若是一个新的单词,它会表示为已经学会符号的token组合。

3.3 Wordpiece and Greedy Tokenization

3.3.1 wordpiece model

wordpiece model和BPE算法一样,可以进行byte pair encoding。与BPE算法不同之处在于,wordpiece model模型将单词边界的下划线符号放在单词开头而不是结尾处。另一方面,wordpiece不是合并出现频次最高的符号对,它合并的目的是最小化训练数据语言模型的可能性(原文:merges the pairs that minimizes the language model likelihood of the training data)。

一种在BERT中使用的wordpiece segmenter,首先通过空格将输入文本分割为粗略的单词。然后通过使用特殊符号##标记内部子词,将单词初始子词(word-inital subwords)与不以单词开头的子词区分开来,如unaffable→un, ##aff, ##able。在测试集上运行时(decoding),wordpiece采用贪婪的最长匹配算法,对token进行匹配,而不是像BPE算法那样按照训练时的生成顺序匹配。

3.4 Word Normalization, Lemmatization and Stemming

3.4.1 Word Normalization

word nomalization是将words/tokens的格式标准化的方法,这种标准化可能很有价值,尽管在规范化过程中丢失了拼写信息。比如在对包含“US”的文本进行信息检索或信息提取时,我们希望能够看到提及“US”或是“USA”的文章。

3.4.2 Case folding

Case folding是另一种规范化的方法。将所有的字母都小写,那么Woodchuck和woodchuck表示为同一种形式,这在如信息检索语音识别应用方面有很大帮助,有助于信息的概要。相反的,在情感分析、文本分类、信息提取、机器翻译等领域,大小写又是非常重要的,所以通常不会进行Case folding。

在许多NLP情景下,我们希望同一单词的不同形式的表现相似。在web搜索中,用户输入woodducks,一个有效的搜索引擎应该能返回woodduck的检索结果,尽管他不带s。

3.4.3 Lemmatization

词形还原

Lemmatization任务是确定两个词形不同的单词含有相同词根。比如is, am, are有共同的lemma(词元、词根):be。Lemmatization就是将句子中的单词还原为单词对应的lemma的形式。

He is reading detective stories.→He be read detective story.

如何实现词形还原?最复杂的词素化方法涉及单词的完整形态解析。Morphology(词法学)研究单词是如何从最小的意义承载单元(morphemes)构建起来的。morphemes的两类不同分支:stems和affixes。stems:承载单词核心含义的部分;affixes:为单词添加附加含义的部分。一个词形解析任务将cats这一个单词解析为两个词素,cat和s。

3.4.4 The Porter Stemmer

Lemmatization算法是非常复杂的,通常我们以简单粗暴的方式进行处理,如切除词尾的词缀。这种简单的词形分析方法称为stemming。一种广泛使用的stemming算法称为Porter

3.5 Sentence Segmentation

文本处理的另一重要环节是Sentence Segmentation(句子分割)。将文本分段为句子的最有用线索是标点符号,例如句点(period character),问号(Question marks)和感叹号(exclamation points)。问号和感叹号代表的是相对而言清晰的句子边界。而句号的边界意义的代表比较模糊,比 如 Mr. 或 Inc. 中也包含句号。sentence tokenization和word tokenization是需要被共同解决的。

sentence tokenization处理首先考虑句号是否是单词的一部分,还是句子的边界。通过额外的缩写字典可以辅助判断句号是否是缩写的一部分。

猜你喜欢

转载自blog.csdn.net/weixin_45850137/article/details/107142932
今日推荐