上一节,我们尝试使用正则表达式工具来提取必要的信息,接下来则是要对提取出来的文本正规化。
基本的任务(根据实际应用会产生变化):
- 让文本句子token化/segment化(获得单词)
- 正规化单词(word)的形式 (例如提取单词的主干,比方说英语中的原型和过去式)
- 让句子segment化
上述的任务是逐层递进的:先确定单词,再到正规化单词的形式,最后确认完整的句子。
Example:How many Words?
这么说有一点抽象,举几个例子:
I do uh main-‐ mainly business data processing.
这是一句很口语的话,里面包含了一些让句子十分卡顿的成分,例如 uh 等语气词。
Seuss’s cat in the hat is different from other cats!
- 词干(Lemma) :是词汇最本身的形式,例如cat和cats就具有相同的Lemma,如果把它们当成两个词,显然没什么道理。
- 词形(wordform):词汇的外貌,最表面的形式,cat和cats虽然Lemma一样,但外形却完全不一样。
they lay back on **the **San Francisco grass **and **looked at **the **stars **and **their
- 类型(type):单词类型 V。上面的例子共有15个词,但是有重复的词汇,如果去掉重复的, V=13.
- 标记(token):一共有多少个单词符号,这句话所含有的单词个数,N=15.
其中,V 和 N 符合 Heran's / Heap's 定理:
常见语料库的的情况:
Word Tokenization
Tokenization:意思是将 文本 切分成 词汇。
这其中包含许多问题:
简单粗暴的分开方法,可以使用Penn Treebank 分词标准:
针对不同的语言,也有相对应的问题:
- 法语
L'ensemble -> 这算是一个还是两个token? - 德语
Lebensversicherungsgesellschaftsangestellter(德语经常会用连接在一起的大词汇)
等同于英语的:life insurance company employee - 中文
莎拉波娃现在居住在美国东南部的佛罗里达。(中文没有空格来区分词汇)
Sharapova now lives in US southeastern Florida。
Byte Pair Encoding 算法
词汇的切分方法多种多样,但是根据某种规则自动合并,实在是太复杂了,当然了,ML方法也不是不行,但又没有一种更加简单的方法?
因此就引入了BPE方法:通过循环迭代,将高频出现的char对融合起来,融合之后,加入字典。
直接看一个例子:
假设我们有:low 出现5次,lower 出现2次,newest 出现6次,widest 出现3次
每个词汇的末尾加入一个特殊字符,作为标注,表示该subword是一个尾巴。
然后将每一个word打散,初始化结束,如下面这个例子所示:
0. {'l o w ': 5, 'l o w e r ': 2, 'n e w e s t ': 6, 'w i d e s t ': 3}
观察出现最多的subword,在这个阶段还是char,我们发现,e+s的组合,出现了6+3次,于是我们判断,它们大概率是可以被视作一直在一起的。
- {'l o w ': 5, 'l o w e r ': 2, 'n e w es t ': 6, 'w i d es t ': 3}
发现es+t的组合,也不错,是9次,那么继续合并。
2. {'l o w ': 5, 'l o w e r ': 2, 'n e w est ': 6, 'w i d est ': 3}
一直运行,直到获得了类似于low+er的组合,就能够停止了。
是否停止取决于这个算法的元参数:融合的数量,也可以叫步数,k。
如果k非常大,意味者几乎所有的单词都能够得到『自己的完整表达』。
例如,lower将不再是low+er的组合,而是完整的lower,毕竟k取的非常大。
如果你还不能理解,可以参考额外的来源:
https://zhuanlan.zhihu.com/p/86965595
https://zhuanlan.zhihu.com/p/38130825
Word Normalization 单词正规化
单词正规化的意思,就如同把零散的人员收编成统一的队列。
例如:{U.S. U.S.A USA} -> USA
tokenization 和 normalization 通常只能够正则表达式或者基于ML算法的方式来完成。