0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Subword Model的两种模型解析

深度学习自然语言处理 来源:博客 作者:芙蕖 2020-08-31 10:56 次阅读

之前介绍的模型都是基于词向量的, 那么能不能换一个角度来表示语言。说英文的时候, 每个单词都是由音节构成的, 而人们听到了连续的音节就可以理解其中的含义, 而音节显然比词粒度更细。

首先,来梳理下word-level存在的几个问题:

需要系统需要极大的词汇量;

如果遇到了不正式的拼写, 系统很难进行处理;

做翻译问题时, 音译姓名比较难做到。

为了解决这些问题, 一开始想到的是采用character级别的模型,即对26个字母训练word2vec,每个词由其字母的embedding拼接或者求平均得到。但这种方法梯度消失(爆炸)的问题也会更严重。

后来,人们就想用subword模型作为character和word的折中模型。subword模型主要有两种,它们都能解决未登录词(OOV)的问题。第一种是模型结构和word模型完全一样,只不过把word换成了subword。第二种则是word和character模型的杂交模型。

一、人类语言声音:语音学和音系学

语音学(Phonetics)是一种非常基本的理论,只要是正常人,有着相同的人体器官和相同的发声结构,就会遵循着相同的发声规则和原理。

语音体系(Phonology)是有语义的声音的合集,各国各文明的人都会制定自己的语音体系。

音素(Phoneme)是语音中划分出来的最小的语音单位,分为元音和辅音

国际音标(由音素构成)按理来说可以表示所有的语音,但是会发现好多语音是没有语义的,这时我们采取的办法就是看音素的下一级(part of words)。

词法学:一个n-grams的代替方案。在基于单词的模型中存在一些问题:需要处理很大的词汇表,在英语中单词只要变个形态就是另一个单词了,比如说:gooooood bye

二、字符级模型(Character-LevelModels)

通常针对字符级的模型有两种处理思路:一种是把原有的词向量分解处理,一种是把连接的语言分解成字符。

单词嵌入可以由字符嵌入表示:

能为不知道的单词生成嵌入

相似的拼写有相似的嵌入

解决了oov问题

这两种方法都被证明是成功的。后续也有很多的工作使用字符级的模型来解决NMT任务。但这些任务有一些共同的缺点,由于从单词替换成字符导致处理的序列变长,速度变慢;由于序列变长,数据变得稀疏,数据之间的联系的距离变大,不利于学习。于是2017年,Jason等人发表了论文Fully Character-Level Neural MachineTranslation without Explicit Segmentation 解决了这些问题。

论文的模型结构如图所示:

首先是对输入的character首先做一个embedding, 然后分别与大小为3,4,5的filter进行卷积运算,就相当于3-grams, 4-grams和5-grams。之后进行max-pooling操作,相当与选出了有语义信息的segment-embedding。之后将这些embedding送入Highway Network(相当于resnet, 解决了深层神经网络不容易训练的问题)后再通过一个单层的双向GRU,得到最终的encoder的output。之后经过一个character-level的GRU(作为decoder)得到最终结果。

还有一篇2018年的文章(Revisiting Character-Based Neural Machine Translation with Capacity andCompression. 2018.Cherry, Foster, Bapna, Firat, Macherey, Google AI)中展示了纯字符级模型的效果。此论文表明在一些复杂的语言中(比如捷克语),character级别的模型会大幅提高翻译准确率,但在较为简单的语言中(如英语法语),character级别的模型提升效果不显著。同时,研究发现在模型较小时word-level的模型效果更好,在模型较大时character-level 的效果更好。如图所示:

总之,现有的character-level的模型在NMT任务上可以更好的处理OOV的问题,可以理解为我们可以学习一些字符级别的语义信息帮助我们进行翻译。

三、子词模型(Sub-word models)

所谓subword,就是取一个介于字符和单词之间成分为基本单元建立的模型。而所谓Byte Pair Encoding(一下简称BPE),就是寻找经常出现在一起的Byte对,合并成一个新的Byte加入词汇库中。即若给定了文本库,若我们的初始词汇库包含所有的单个字符,则我们会不断的将出现频率最高的n-gram的pair作为新的n-gram加入词汇库中,直到达到我们的要求。

课程在这里介绍了介于word-level和char-leval之间的Sub-word models,主要一般有两种结构,一种是仍采用和word-level相同的结构,只不过采用更小的单元word pieces来代替单词;另一种是hybrid architectures, 主要部分依然是基于word, 但是其他的一些部分用characters

Hybrid architectures:主要的模型含有单词,一些其他的含有字符、字节对的编码。使用的是一个压缩算法:将大部分频繁出现的字节对标记为新的字节对。

3.1 Byte Pair Encoding(BPE)

Byte Pair Encoding,简称BPE,是一种压缩算法。

给定了文本库,我们的初始词汇库仅包含所有的单个的字符,然后不断的将出现频率最高的n-gram pair作为新的n-gram加入到词汇库中,直到词汇库的大小达到我们所设定的某个目标为止。如图所示:

上述例子是,比如有一个初始的文本库和词汇库。首先,可见此时出现频率最高的n-gram pair是“e,s”,出现了9次,因此我们将“es”作为新词加入到词汇库中同时更新文本库。然后,这时词汇库中出现频率最高的n-gram pair是“es,t”,出现了9次,因此我们将“est”加入词汇库中同时更新文本库。依次类推,可以逐渐的通过增加新的n-gram的方式达到我们的目标。对于现实生活中有很多词汇量非常大的task,这种通过BPE逐步建立词汇库的方式就显得非常有用了。

使用这种方法可以自动生成vocab。

谷歌的NMT模型有两个版本,版本一采用的是BPE模型,版本二对BPE模型进行了改进,称为wordpiece mode。这种方法不在使用n-gram的计算来算,而是使用搜索算法搜索最大化的该语言模型的片段去选择pieces。

另外还有一种模型叫sentencepiece,它直接从raw text中获取,同时把空格视为一种特殊的token(_)

课程介绍了几篇在这方面发展的论文,有用Character-level去产生词向量的(LearningCharacter-level Representations for Part-of Speech Tagging),还有用char-level结合high-way网络进行机器翻译的。

课程分析用char-level得到词向量的特点,经由他们直接输出的word-embedding更倾向于在形状上相似,输入high-way之后,形状上的相似会朝含义上的相似发展。如图所示:

使用char-level的可以轻易解决,此没有出现在词库的情况,如图所示:

四、混合字符和词级模型

4.1 Hybrid NMT

核心思想:大部分时候都使用word-level的模型来做translate,只有在遇到rare or unseen的words的时候才会使用character-level的模型协助。这种做法产生了非常好的效果。

混合模型即两种方式并存的模型,在正常处理时采用word-level的模型,当出现奇怪的词的后,使用char-level级的模型。

一篇论文的结构如图所示:

可以看到输入未知的单词时,采用char-level进行编码,输出《 unk 》时也采用char-level级的进行解码。同时训练跟beam-search也时要同时对两个结构进行。

4.2 Chars for word embeddings

采用subword的方式长生词向量,课程中提到了FastText。主要思路如图所示:

字符的卷积来生成词嵌入

使用pos标记固定的窗口

五、FastText

使用n-grams和整个单词来代表单词。我们知道在word2vec方法中我们基于word-level的模型来得到每一个单词的embedding,但是对于含有许多OOV单词的文本库word2vec的效果并不好。由此很容易联想到,如果将subword的思想融入到word2vec中是不是会产生更好的效果呢?

FastText embeddings是一个word2vec like embedding。用where举例, 它把单词表示成了: “where = 《wh, whe, her,ere, re》, 《where》”这样的形式。 注意这里的“《》”符号是表达了开始和结束。 这样就可以有效地解决OOV的问题, 并且速度依然很快。

然后把它们加起来:

于是,就可以使用原有的word2vec算法来训练得到对应单词的embedding。其保证了算法速度快的同时,解决了OOV的问题,是很好的算法。

5.1 FastText和word2vec的区别

1. 相似处:

图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。

都采用很多相似的优化方法,比如使用Hierarchicalsoftmax优化训练和预测中的打分速度。

2. 不同处:

模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用。

模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容。

3. 两者本质的不同,体现在 h-softmax的使用:

Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax也会生成一系列的向量,但最终都被抛弃,不会使用。

fastText则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

FastText是一个能用浅层网络取得和深度网络相媲美的精度,并且分类速度极快的算法。按照作者的说法“在标准的多核CPU上,能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内”。但是它也有自己的使用条件,它适合类别特别多的分类问题,如果类别比较少,容易过拟合。

六、写到最后

本文介绍了Subword Model的两种模型。对于第一种模型,其关键点在于怎样得到subword,在此采用BPE算法来提取高频Subword的形式。第二种被称为杂交模型的方法相对简单,是在文本中有这个word时就用word embedding,没有的时候就用char embedding来学习word embedding,非常简单。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Model
    +关注

    关注

    0

    文章

    318

    浏览量

    24787

原文标题:【NLP入门】通俗讲解Subword Models

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    两种采样方式

    两种采样方式.....................................
    发表于 08-08 15:04

    请问这两种机械手模型哪种实验性能更好,可扩展性更好

    `我打算买个六轴机械手模型用来验证自动运行算法,但不知道从机械角度上来来说哪种实验性能更好,可扩展性更好,这两种都是数字舵机带动的。麻烦给出为什么的理由,谢谢!左上角那种好像是工业机械手的模型,右下角那种是什么呢?
    发表于 07-15 17:00

    突然发现有两种电压源和电流源等效模型

    今天看书才发现有两种电压源电流源等效变换, 之前一直没注意. 1. 我以前一直是 电压源和电阻串联, 电流源和电阻并联的模型. 这可以解释得通 I*R = U2. 今天发现高频书上是 电流源和电导
    发表于 03-14 14:31

    IC设计基础:说说wire load model

    说起wire load model,IC设计EDA流程工程师就会想到DC的两种工具模式:线负载模式(wire load mode)和拓扑模式(topographicalmode)。为什么基本所有深亚
    发表于 05-21 18:30

    怎么比较两种FPGA设计

    在比较两种设计时使用什么更实用?来自地图报告的占用切片或来自综合报告的实际比率以上来自于谷歌翻译以下为原文What is more practical to use in comparing two
    发表于 10-22 11:17

    双绞线分为哪两种

    `  谁知道双绞线分为哪两种?`
    发表于 12-31 15:53

    Matlab提供的两种聚类分析

    Matlab提供的两种聚类分析提供源程序代码
    发表于 04-29 11:21

    两种芯片的区别

    我想知道28027和28034这这两种芯片有什么区别或者联系呢?希望各位大佬能够尽量讲解得通俗易懂一些,刚开始学习,有点懵,感谢感谢
    发表于 06-18 20:27

    怎么实现两种智能小车的建模与仿真?

    1.两种智能小车的构造简介在市面上常见的两种智能小车都是基于轮式的,在某宝上面卖的最多的,各位在学生时代拿来应付课程设计和毕业设计用的各种小车分为两种。1.后轮驱动,前轮阿克曼转向的,通常后轴通过有
    发表于 08-30 06:08

    了解实际电源的两种模型及其等效变换

    。 2 .了解实际电源的两种模型及其等效变换。 3 .了解非线性电阻元件的伏安特性和静态电阻、动态电阻的概念以及简单的非线性电阻电路的图解分析法。第1章电路的分析方法、1.3.3电压源和电流源的等效变换、图...
    发表于 09-06 07:57

    SPI接口的两种模式

    ADI HMC系列该系列支持SPI接口,有两种通信MODE,SPI_OPEN_MODE和SPI_HMC_MODE。这两种模式由软件控制,根据上电时SCK和SEN谁先出现rise edge来选择,如果
    发表于 11-05 07:03

    SQL语言的两种使用方式

    SQL语言的两种使用方式在终端交互方式下使用,称为交互式SQL嵌入在高级语言的程序中使用,称为嵌入式SQL―高级语言如C、Java等,称为宿主语言嵌入式SQL的实现方式源程序(用主语言和嵌入式SQL
    发表于 12-20 06:51

    keras顺序模型与函数式模型

    keras提供两种搭建模型的方式: 1. 顺序模型(也可看做是函数式模型的一特殊情况) 2. 函数式
    发表于 08-18 06:01

    TFllite模型的格式简介

    简单来说:所谓模型就是一个滤波器,训练的权重就是滤波系数,输入经过滤波器后得到一个输出。所以嵌入式AI部署一般就是解析模型得到“滤波系数”,输入信号进行一系列类似"滤波&
    发表于 08-18 07:01

    理解什么是NLP Subword算法

    Subword算法如今已经成为了一个重要的NLP模型性能提升方法。自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型如同雨后春笋般涌现,其中Subword算法
    的头像 发表于 02-22 14:16 379次阅读