NLP学习-Task 3: 子词模型Subword Models
更新流程↓
Task 1: 简介和词向量Word Vectors
Task 2: 词向量和词义Word Senses
Task 3: 子词模型Subword Models
Task 4: Contextual Word Embeddings
Task 5: 大作业
日本人综艺感从昭和时代开始就这么强了吗?
今日份的舒适
常见餐桌礼仪
文章目录
- 0. 有关语言学(linguistics)的启发
- 1. Word-Level Models(单词级模型)
- 2. Character-Level Models(字符级模型)
- 3. Subword Models(子词模型)
- 3.1. Byte Pair Encoding
- 3.2. SentencePiece Model
- 4. Hybrid Character and Word-Level Models
- 5. Chars for word embeddings
- 5.1. FastText
- 6. 参考链接
0. 有关语言学(linguistics)的启发
- 语音学(Phonetics)是一种非常基本的理论,只要是正常人,有着相同的人体器官和相同的发声结构,就会遵循着相同的发声规则和原理。
- 语音体系(Phonology)是有语义的声音的合集,各国各文明的人都会制定自己的语音体系。
- 音素(Phoneme)是语音中划分出来的最小的语音单位,分为元音和辅音。
国际音标(由音素构成)按理来说可以表示所有的语音,但是会发现好多语音是没有语义的,这时我们采取的办法就是看音素的下一级(part of words)。
同样的思想我们可以用在深度学习上,如果我们在做翻译任务(Neural Machine Translation,NMT)时发现一些没有含义的单词(也就是不在词汇库中的单词),我们可以通过找比单词更基本的成分来解决问题。
现实生活中做翻译任务时我们确实需要处理很大的,很开放的词汇(所以上述讨论是有意义的):
- 非常丰富的词形
- 音译的单词(例如人名)
- 非正式的拼写(Gooood=Good,u=you,r=are)
在之前学习的word2vec和GloVe是以单词作为最小基本单位的,这样虽然能够用词向量表示词库中的单词,但是若出现OOV(out-of-vocabulary)即词库中没有的单词,而且对于单词的一些词法上的修饰(morphology)处理的也不是很好。
所以利用比word更小的基本单位来建立模型能更好的解决这些问题。本节思考采用n-gram思想训练Word Vector模型,也就是FastText。
1. Word-Level Models(单词级模型)
以单词为最小基本单位的模型,例如word2vec和GloVe。
- 优点:能够较为完美地用词向量表示词库中的单词。
- 缺点:会出现OOV(out-of-vocabulary)即词库中没有的单词,例如“Gooooood”。且对于一些单词词法上的修饰(morphology)处理不是很好。
2. Character-Level Models(字符级模型)
以字符Character为最小基本单位的模型,通常针对字符级模型有两种处理思路:
- 是把原有的词向量分解处理。先生成character-embedding, 然后为OOV生成word-embedding, 即使用character-embedding来组成word-embedding。
- 把连接的语言分解成字符。只生成character-embedding,不考虑word级别。
这两种的方法共同的优缺点如下:
优点
- 能够解决 Word-level 所存在的 OOV 问题。
- 拼写类似的单词 具有类似的 embedding。
缺点:
- 由于从单词替换成字符导致处理的序列变长,速度变慢。
- 由于序列变长,数据变得稀疏,数据之间的联系的距离变大,不利于学习,训练速度降低。
为了解决以上缺点问题,Jason Lee, Kyunghyun Cho, Thomas Hoffmann于2017年发表了论文Fully Character-Level Neural Machine Translation without Explicit Segmentation,提出了利用多层conv和pooling和 highway layer的方式来解决该问题来解决了这些问题。
该论文的思路如下所示:
- 输入的字符首先需要经过Character embedding层,并被转化为character embeddings表示。
- 采用不同窗口大小的卷积核对输入字符的character embeddings表示进行卷积操作,论文中采用的窗口的大小分别为 3、4、5 ,也就是说学习Character-level的3-gram、4-gram、5-gram。
- 对不同卷积层的卷积结果进行max-pooling操作,即捕获其最显著特征生成segment embedding。
- segment embedding经过Highway Network(有些类似于Residual network,方便深层网络中信息的流通,不过加入了一些控制信息流量的gate)。
- 输出结果,再经过单层BiGRU,得到最终的encoder output。
- 之后,decoder再利用Attention机制以及character level GRU进行decode。
通过这种方式不仅能够解决Word-level所存在的OOV问题,而且能够捕获句子的3-gram、4-gram、5-gram信息,这个也是后期FastText的想法雏形。
3. Subword Models(子词模型)
这是介于Word-Level和Character-Level之间的Subword models,主要有两种趋势,一种是仍采用和Word-Level相同的结构,只不过采用更小的单元——Word pieces,名为Byte Pair Encoding(BPE);另外一种是采用混合结构,Word和Character都有,名为SentencePiece。
3.1. Byte Pair Encoding
BPE是一种压缩算法,是一种自下而上的算法。将单词作为单词片段处理(Word pieces),以便于处理未出现单词。在NMT任务中,先将训练集单词划分成片段(利用BPE),然后将片段随机赋值后放到RNNs或CNNs中训练出片段的embedding,再将片段组合得出Word-embedding后,进行NMT工作。这样如果在训练集或者其他情况中,遇到生僻词或者未登录词时,直接利用片段进行组合来进行NMT任务。
1.首先将统计text中单词,做成词汇表(频率-单词),然后按照unigram进行分解。
5 l o w
2 l o w e r
6 n e w e s t
3 w i d e s t词汇表:l, o, w, e, r, n, w, s, t, i, d
2.寻找频率最大的片段(字符),进行组合,将组合片段加入词汇表。
5 l o w
2 l o w e r
6 n e w es t
3 w i d es t词汇表:l, o, w, e, r, n, w, s, t, i, d, es
3.继续重复上述操作,直到达到设定的阈值
词汇数+操作数⇒操作数是唯一的超参数词汇数+操作数\Rightarrow操作数是唯一的超参数词汇数+操作数⇒操作数是唯一的超参数
5 l o w
2 l o w e r
6 n e w est
3 w i d est词汇表:l, o, w, e, r, n, w, s, t, i, d, es,est
⇓\Downarrow⇓
5 lo w
2 lo w e r
6 n e w est
3 w i d est词汇表:l, o, w, e, r, n, w, s, t, i, d, es,est,lo
以此类推,直到词汇库大小达到我们所设定的目标。这个例子中词汇量较小,对于词汇量很大的实际情况,我们就可以通过BPE逐步建造一个较小的基于subword unit的词汇库来表示所有的词汇。
BPE仅使用一个字符频率来训练合并操作。频繁的子字符串将在早期连接,从而使常用单词作为唯一的符号保留下来(如the and 等)。由罕见字符组合组成的单词将被分割成更小的单元,例如,子字符串或字符。因此,只有在固定的词汇量很小的情况下(通常是16k到32k),对一个句子进行编码所需要的符号数量不会显著增加,这是高效解码的一个重要特征。
3.2. SentencePiece Model
sentencepiece model将词间的空白也当成一种标记,可以直接处理sentence,而不需要将其pre-tokenize成单词。
算法过程:
拆分句子中有两个变量,一个为词表和句子的切分序列。EM算法,句子的切分序列为隐变量。
开始时,随机初始化一个词表和随机切分一下句子。
- 固定词表,求一个句子困惑度最低的切分序列。
- 根据这个切分序列求固定词表,剔除一个词,然后计算困惑度,最后对困惑度设定一个阈值,筛选一些对语料集影响较大的词。
具体困惑度推导可以通过语言模型中困惑度(perplexity)的推导进行了解。
4. Hybrid Character and Word-Level Models
这是一个非常出色的框架,主要是在单词级别进行翻译,但是在有需要的时候可以很方便的使用字符级别的输入。核心思想:大部分时候都使用Word-Level的模型来做translate,只有在遇到rare or unseen的Words的时候才会使用Character-Level的模型协助。这种做法产生了非常好的效果。
其网络结构图如下:
可以看到输入未知的单词时,采用Character-Level进行编码,输出< unk >时也采用Character-Level级的进行解码。同时训练跟beam-search也时要同时对两个结构进行。
该模型还同时对Word-Level和Character-Level进行了beam search操作,并且对隐藏层进行了初始化操作。
对于句子中的 “cute”,其属于 OOV 词汇,为了解决该问题,我们需要构建一个Character-Level表示,但在 decode 过程中遇到 OOV 的特殊符号表示 时,需要采用Character-Level的 decode 进行 解码。
该训练过程是end2end的,不过损失函数是Word部分与Character-Level部分损失函数的加权叠加。
5. Chars for word embeddings
在前面,我们已经介绍和比较了Word-Level和Character-Level的优缺点,并根据其特点,提出一种介于Word-Level和Character-Level之间的Model——Subword Model。
那么,我们可不可以采取类似于上面的subword的思路来产生更好的Word embedding呢?FAIR的[FastText]((https://arxiv.org/pdf/1607.04606.pdf or https://fasttext.cc))就是利用subword将word2vec扩充,有效的构建embedding。
5.1. FastText
fastText是一个快速文本分类算法,与基于神经网络的分类算法相比的优点:
- fastText在保持高精度的情况下加快了训练速度和测试速度
- fastText不需要预训练好的词向量,fastText会自己训练词向量
例如,对于单词“< where >”,以及n=3。则集合可以表示为< wh,whe,her,ere,re >,其中<>代表单词的开始与结束。
对于每个单词www ,其对应n-gram集合用GwG_wGw 表示,每个n-gram的矢量表示为zg⃗\vec{z_g}zg
中心词www 与上下文单词ccc 间的相似度可表示为s(w,c)=∑g∈Gwzg⃗Tvc⃗s(w,c)=\sum_{g\in G_w} {} \vec{z_g}^T\vec{v_c}s(w,c)=g∈Gw∑zgTvc 于是就可以使用原有的word2vec算法来训练得到对应单词的embedding。其保证了算法速度快的同时,又解决了OOV的问题。
6. 参考链接
- CS224N Subword Models
- 12-Subword Models 读书笔记
- 自然语言处理 cs224n 2019 Lecture 12: Information from parts of words: Subword Models课程笔记
- CS224N学习笔记(十二)Subword Models
- CS224N(12)-子词模型
- BPE(Byte Pair Encoding)算法
- sentencepiece原理和使用
NLP学习-Task 3: 子词模型Subword Models相关推荐
- 斯坦福NLP名课带学详解 | CS224n 第12讲 - NLP子词模型(NLP通关指南·完结)
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...
- Task 3: Subword Models (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)
Task 3: Subword Models 目录 Task 3: Subword Models 回顾:Word2vec & Glove 一.人类语言声音:语音学和音系学 二.字符级模型(Ch ...
- datawhale 8月学习——NLP之Transformers:编写BERT模型
前情回顾 1.attention和transformers 2.BERT和GPT 结论速递 跟着教程,阅读了HuggingFace的BERT模型,分为tokenizer和model两大部分,而mode ...
- NLP入门 | 通俗讲解Subword Models
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:芙蕖,Datawhale优秀学习者,东北石油大学 对于英文来说,文 ...
- NLP学习————实现一个BERT(简记)
NLP学习-实现一个BERT(简记) 本文主要内容是介绍了BERT的代码结构.具体实现与原理,对BERT的一些简记 内容包括以下几个部分: BERT Tokenization 分词模型(BertTok ...
- Task 3: Subword Models
1.人类语言的声音:语音和语音学 语音是声音流–毫无争议的"物理" 语音学假设一小部分或几组独特的类别单元:音素或独特特征 也许是普遍的类型学,但特定语言的实现 类别感知的最佳证据 ...
- fastText中的子词嵌入和高效文本分类:简单高效性能好
fastText 由Facebook主持的研究.该研究分为两个项目:子词嵌入和高效文本分类.有学者认为fastText只包含高效文本分类,主张它才是该研究的重中之重.不过,在Facebook相关研究的 ...
- 2019年CS224N课程笔记-Lecture 12: Subword Models
资源链接:https://www.bilibili.com/video/BV1r4411 正文内容 人类语言声音:语音学和音韵学( Phonetics and phonology) (课件内容,不是很 ...
- CS224n-Lecture12-Information from parts of words (Subword Models)
(shift,图片复制转存失败问题搞不定,复制黏贴写在本地的文章是真的被恶心到了) 综述 Lecture 12: Information from parts of words: Subword Mo ...
最新文章
- TDD与FDD技术对比
- 性能优化技巧 - 组表数据更新
- html 搜索框 自动补全,自动完成的搜索框javascript实现
- [转]将input file的选择的文件清空
- [冷枫推荐]:数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。...
- python面试题之你如何管理不同版本的代码?
- vim表达式正则替换
- ActiveMQ 依赖JDK版本
- github private链接访问_Hands-On Design Patterns With C++(十八)访问者模式与多分派(下)...
- 41. 和为s的两个数字VS和为s的连续正数序列(C++版本)
- android sdk救黑砖,华为EC6108 V9C 8G 救黑砖教程及固件下载
- win10 java模拟鼠标_Win10移动体验:模拟鼠标工具
- 微擎模块-微信门禁小区物业版(微信开门)
- 手机怎么录游戏视频 手机屏幕录制的方法
- 【LDO带载能力和两端压差有关】
- 齐次线性方程组系数矩阵的秩与解集的秩
- excel如何把多张表合并成一个表_excel如何快速把多个工作表合并到一个excel表
- 北京跑步入夏--妞妞跑步长大
- 小程序emijo表情的正则问题
- 人脸检测论文:FaceBoxes: A CPU Real-time Face Detector with High Accuracy及其Pytorch实现
热门文章
- 平衡家庭和事业,如何用RPA化解职场女性的痛
- 毫米波雷达AWR1642BOOST代码走读学习笔记
- gta5的服务器状态,Gta5OL一直处于加载过程中,你可能遇到了这些问题
- sklearn preprocessing 数据预处理 OneHotEncoder
- Kotlin Jetpack Compose remember 给Icon添加透明度 remember 添加参数来记录其位置
- GitLab WorkFlow
- 编写一个完整的矩阵向量乘法的MPI编程代码
- linux dae文件下载,linux dae命令详解.doc
- RabbitMQ高级之如何保证消息可靠性?
- [Power]Mockito使用和扩展