lecture12 - Subword model

课程内容

一些关于语言学的内容(a tiny bit about linguistics)

音素(phoneme)

音系学中假定了声音的组成单元:音素,如下图,列出了几种不同的音素发音,例如第一行的p就是一种爆破音(plosive)。
在这里插入图片描述

词态(morphology)

一般来说,构成一个单词的词素(morpheme)可以视作一个单词中包含语义的最小单元。
举个例子,单词 u n f o r t u n a t e l y unfortunately unfortunately,将其拆分为不同词素则有 [ [ u n [ f o r t u n ( e ) ] a t e ] ] l y ] [[un[fortun(e)]ate]]ly] [[un[fortun(e)]ate]]ly],这样拆分后,可以看到一个完整单词被拆成了有意义的几部分, u n un un代表一个否定的前缀, f o r t u n e fortune fortune是单词的词根, a t e ate ate是一个后缀,作形容词时有“具备。。。的”含义,至于 l y ly ly则是一个词性后缀。
但是,在深度学习领域,很少有词素级的模型,Manning只列出了他本人在13年的一篇文章。
从量级上看,训练模型时,对于词素有另外一种替代方式——就是字符级别的n-gram模型。
在这里插入图片描述
对于这样的模型,还可以考虑使用卷积层来提取特征。

单词的书写(words in writing system)

单词的书写可以明显体现出不同语言之间的差异,这也给诸如分词之类的任务带来了麻烦。
比如中文与英文,英文天然就带有空格这一分隔符,而中文在书写时只有标点符号会将句子分开,而一个完整句子中,词与词之间是连在一起书写的。这就需要另想办法进行分词。
此外,还有一些语言也颇有特点,比方说德语,德语的造词能力相当了得。
课件中这个例子就很好:
在这里插入图片描述
英文中是一个由四个单词构成的名词短语,而德语中就是一个单词而已。

模型(model)

单词级模型(woed-level model)

单词级模型算是使用最多的模型了,但是其在应用中,由于人类语言的神奇,还是会存在这样那样的问题。课堂上也列举了一些常见的问题:
1、词态上的变化
在不同语言之间,同样的词语可能会有完全不同的形式
在这里插入图片描述
2、非常规的形式
在单词的书写中,会有各种各样的缩写,改写。尤其在社交媒体上,单词的各式变化能反应作者的情绪,但对于计算机而言,就不是那么好理解了。
在这里插入图片描述
针对这些问题,有人提出利用字符级模型来进行处理的思路。课堂上列出两条主要思路:
1、利用字符级的embedding来构成单词的embedding
这个方法有一个显而易见的好处,未登录词将不复存在,因为每一个词都可以由26个字母构成(对于英文而言)。拼写相近的单词应当获得相近的embedding。问题也同样存在,对于单个字符而言,能够捕捉的信息十分有限。不过在深度学习领域这个方法还是取得了一定的成功。
2、无分割的语言可以通过字符来处理
我觉得对于中文而言尤其如此,中文的单个字符本身就包含十分丰富的含义。

NLP在深度学习领域中利用的数据通常都是书写产生的语句,这是最普遍也是最容易获取的数据,但是这些语句各自的形式也是大相径庭,既有中文这样的型意字。也有英语这样由固定词素经由构词法产生的语言。甚至还有日语这种既有型意字与词素构词相结合的语言。

纯字符级模型(pure character level model)

纯字符的模型,如字面意义,就是模型数据的流动在字符级上进行。
在lecture11中提到的VDCNN就是一个成功的字符级别的模型。在这里Manning只是列举了一系列的文章,之后再找来看。
在这里插入图片描述
在这里插入图片描述

子词模型(subword model)

所谓子词,实际上与之前提到的字符级n-gram是类似的,不是纯字符,而是一个单词中不同字符构成的片段,不过对于中文而言,这个概念也可以认为对应字符了。
这一领域,课上指出两个方向:
1、与词级模型相同的架构,但是将词替换为子词
2、混合型模型,主要部分仍然词级,在处理特殊情况(OOV)时使用字符级的架构
两个方向均是给了两篇文章。
接下来,介绍了一种能够产生wordpiece的算法——Byte Pair Encoding,当前大火的bert模型在词嵌入层也使用了BPE算法的变种wordpiece embedding。

BPE(Byte Pair Encoding)

BPE可以看作一种按照频度对字符进行聚类的算法。是一种自底向上的聚类。
步骤:
1、将语料中所有单词视作字符的集合,并统计每一个单词的频度。
此时,我们产生的词典只有单个的字符。下图构成的词典包含l, o, w, e, r, n, w, s, t, i, d,11个字符。
在这里插入图片描述
2、遍历语料,迭代统计频度最高的bigram。

在这里插入图片描述
如图,es这一组合出现了9次,因此作为频度最高的bigram加入词典中。之后,将e,s两个字符构成新的subword。
接下来,如出一辙,继续搜索频度最高的bigram,下一个是est,在下一个是lo,然后是low。以此类推。每一次加入词典后均进行合并操作。
3、在词典达到既定的规模后算法终止。
在具体实施的过程中,每一个单词还需要加上一个特殊的token代表单词结尾。这样就可以避免词尾的subword出现在词头。比方说star,longest两个单词中均有st,但是后一个代表了形容词的最高级,与前一个st有截然不同的语言,显然不能算作同种subword。

编码/解码阶段
得到subword词典之后,就要利用其对一个语句中的单词进行编码,也就是拆解wholeword变为subword的集合。
首先,对词典中的subword按照长度进行排序。随后,对每一个单词,顺序遍历词典,若有符合单词某一子字符串的subword,则认定该subword为构成单词的一部分。
对每一个单词都进行如上操作,若对某一单词,在遍历完词典后还有部分子字符串未能被subword替代,则用一个特殊的"UNK"token代替。
例如highest这样的单词,编码后就变成[high,est]这样的subword集合。
实际应用中,若是对每一个词都这样编码,未免太耗时,常用做法是将BPE运行中使用语料的单词分割方式保存为一个lookup-table,这样,只有未见过的词才需要遍历整个subword词典,其他的直接查表即可。
解码就是将subword拼接起来即可。
此段参考:几种分词算法
此外,还有wordpiece/sentencepiece两种分词法。不过课上没有展开。

字符级/词级混合模型(hybrid character and word level model)

这个部分列举了几个模型。
1、Learning Character-level Representations for Part-ofSpeech Tagging
模型利用卷积层从字符的分布式表示中形成word embedding,并将之应用在词性标注任务。
在这里插入图片描述
2、Character-based LSTM to build word representations
原文名称:
Finding Function in Form:
Compositional Character Models for Open Vocabulary Word Representation
在这里插入图片描述
该模型利用双向lstm从字符构建word embedding。文章利用这样产生的词向量进行词性标注任务以及语言模型。

3、Hybrid NMT
由Manning及其学生共同提出的结构。混合字符级以及词级模型。仅在需要使用字符级模型时才使用。
在这里插入图片描述
大体上,字符级别的模型应用在UNK这一特殊token上。具体细节之后还是得去原文找找看。

FastText

fasttext采用了与CBOW大致的思想进行文本分类任务,只不过,在CBOW中输入的是对应上下文单词的词向量。而fasttext中则是直接将单词的ngram片段直接叠加作为隐藏层的结果。这部分之后单开一篇。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值