资源链接:https://www.bilibili.com/video/BV1r4411
正文内容
人类语言声音:语音学和音韵学( Phonetics and phonology)
(课件内容,不是很懂。。。)
- Phonetics 语音学是一种音流——物理学或生物学
- Phonology 语音体系假定了一组或多组独特的、分类的单元:phoneme 音素 或者是独特的特征
- 这也许是一种普遍的类型学,但却是一种特殊的语言实现
- 分类感知的最佳例子就是语音体系
- 音位差异缩小;在音素之间被放大
大致意思就是:caught和cot有不同的元音在发音,但是美国西南部长大的人很多不区分元音,这样这两个词对于不区分的来说是相同的,这个也和自然语言处理中分类有很大影响,区分哪些声音对他们是敏感的
词法:词的部分
- 声音本身在语言中没有意义:a和e,b和p是没有意义的(没有实际意义,词是有实际意义的)
- parts of words/词 是音素的下一级的形态学,是具有意义的最低级别(也就是单个字母没有意义,但是单词是有意义的,例如财富代表巴拉巴拉,幸运代表巴拉巴拉)
- 传统上,morphemes 词素是最小的语义单位(以不幸/unfortunately为例子)
- 深度学习:形态学研究较少;递归神经网络的一种尝试是 (Luong, Socher, & Manning 2013)
- 处理更大词汇量的一种可能方法——大多数看不见的单词是新的形态(或数字)
(斯坦福大学之前也研究过这种语义表示的树状结构,如上图)
Morphology/形态学
- 一个简单的替代方法是使用字符 n-grams (上图n=3)
- Wickelphones (Rumelhart& McClelland 1986)
- Microsoft’s DSSM (Huang, He, Gao, Deng, Acero, & Hect2013)
- 使用卷积层的相关想法
- 能更容易地发挥词素的许多优点吗?
在神经网络80年代中期到九十年代初期,语言结构是个很有争议的问题,有些人建立了学习动词过去式形态的系统,但是最困难的地方是很多不规则的动词过去式(上述图就是当时人们使用的模型方法,类似一个三元组/每次取三个,但是这个想法遭到了很多争议,但是单纯作为工程解决方案,事实证明是很好的方法)
书写系统中的单词
许多语言没有分词:比较出名的就是咱们的汉语啦~,例如:美国关岛国际机场及其办公室均接获(希腊语也木有)
附著词?
- 分开的:
- 连续的:
复合的(复合名词)?
- 分开的:
- 连续的:
(英语复合名词是带-的,但是例如德语、日耳曼语等复合词类似上述连续的)
单词级别下的模型
- 需要处理数量很大的开放词汇:巨大的、无限的单词空间 (例如捷克语、美国土著语等都比较复杂...单词空间贼大)
- 丰富的形态
- 音译(特别是名字,在翻译中基本上是音译)
- 非正式的拼写(下图的Goooo...od和Vibesss...)
字符级模型
- 词嵌入可以由字符嵌入组成
- 为未知单词生成嵌入
- 相似的拼写共享相似的嵌入
- 解决OOV问题
- 连续语言可以作为字符处理:即所有的语言处理均建立在字符序列上,不考虑 word-level
- 这两种方法都被证明是非常成功的!
- 有点令人惊讶的是——传统上,音素/字母不是一个语义单元——但深度学习模型组成了组
- 深度学习模型可以存储和构建来自于多个字母组的含义表示,从而模拟语素和更大单位的意义,从而汇总形成语义
(感觉有个分布式词向量的那个味道)
书写系统
大多数深度学习NLP的工作都是从语言的书面形式开始的——这是一种容易处理的、现成的数据
但是人类语言书写系统不是一回事!各种语言的字符是不同的!(有的字符带有语义)
纯字符级模型
- 上节课我们看到了一个很好的纯字符级模型的例子用于句子分类
- 非常深的卷积网络用于文本分类
- Conneau, Schwenk, Lecun, Barrault.EACL 2017
- 强大的结果通过深度卷积堆叠
纯字符级NMT模型
- 以字符作为输入和输出的机器翻译系统
- 最初,效果不令人满意
- (Vilaret al., 2007; Neubiget al., 2013)
- 后来,人们拥有成功的字符集解码器/decoder
- (JunyoungChung, KyunghyunCho, YoshuaBengio. arXiv 2016).
- 证明了这个是一个有前景的~
- (Wang Ling, Isabel Trancoso, Chris Dyer, Alan Black, arXiv 2015)
- (Thang Luong, Christopher Manning, ACL 2016)
- (Marta R. Costa-Jussà, José A. R. Fonollosa, ACL 2016)
英语-捷克WMT 2015年的结果(英语和捷克语的翻译系统)
- Luong和Manning测试了一个纯字符级seq2seq (LSTM) NMT系统作为基线/基准
- 它在单词级基线/基准/基础上运行得很好
- 对于 UNK/不存在的词,是用 single word translation 或者 copy stuff from the source
- 字符级的 model 效果更好了,但是太慢了 ,但是在运行时需要3周的时间来训练,运行时没那么快,如果放进了 LSTM 中,序列长度变为以前的数倍(大约七倍)
事实证明翻译还是比较好的~
(char/角色级模型效果很好;而word模型中对于不认识的词,可能直接进行原文替换,这就比较失败了)
Fully Character-Level Neural Machine Translation without Explicit Segmentation
Jason Lee, Kyunghyun Cho, Thomas Hoffmann. 2017. Encoder as below; decoder is a char-level GRU
(大概2020年就出来了,一个更复杂,能了解原端语言含义的模型,用了很多我们上次说的技术,编码方面使用字母嵌入序列)
在LSTM seq2seq模型中,深度越大,字符越强
Revisiting Character-Based Neural Machine Translation with Capacity and Compression. 2018. Cherry, Foster, Bapna, Firat, Macherey, Google AI
(在捷克语这样的复杂语言中,字符级模型的效果提升较为明显,但是在英语和法语等语言中则收效甚微。小型的模型适合文字模型,大型的适合角色模型,也就是模型较小时,word-level 更佳;模型较大时,character-level 更佳)
子词模型:两种趋势
与word级模型相同的架构
- 但是使用更小的单元:“word pieces”
- [Sennrich, Haddow, Birch, ACL’16a], [Chung, Cho, Bengio, ACL’16].
混合架构
- 主模型使用单词,其他使用字符级
- [Costa-Jussà& Fonollosa, ACL’16], [Luong & Manning, ACL’16].
字节对编码
- BPE 并未深度学习的有关算法,但已成为标准且成功表示 pieces of words 的方法,可以获得一个有限的词典与无限且有效的词汇表。
- 最初的压缩算法 (本来字节作为单位,可以将词作为单位)
- 最频繁的 字节 -> 一个新的字节。
- 用字符ngram替换字节(实际上,有些人已经用字节做了一些有趣的事情)
- Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural Machine Translation of Rare Words with SubwordUnits. ACL 2016.
- 分词算法 word segmentation
- 虽然做得很简单,有点像是自下而上的短序列聚类
- 将数据中的所有的Unicode字符组成一个unigram的词典
- 最常见的 ngram pairs 视为 一个新的 ngram
- 有一个目标词汇量,当你达到它的时候就停止
- 做确定性的最长分词分割
- 分割只在某些先前标记器(通常MT使用的 Moses tokenizer )标识的单词中进行
- 自动为系统添加词汇,不再是基于传统方式的 strongly “word”
- 阿紫2016年WMT排名第一!仍然广泛应用于2018年WMT
词条/句子模型
谷歌NMT (GNMT) 使用了它的一个变体
- V1: wordpiece model
- V2: sentencepiece model
- 不使用字符的 n-gram count,而是使用贪心近似来最大化语言模型的对数似然函数值,选择对应的pieces
- 添加最大限度地减少困惑的n-gram
Wordpiece模型标记内部单词
Sentencepiece模型使用原始文本
- 空格被保留为特殊标记(_),并正常分组
- 您可以通过将片段连接起来并将它们重新编码到空格中,从而在末尾将内容反转
- https://github.com/google/sentencepiece
- https://arxiv.org/pdf/1804.10959.pdf
BERT 使用了 wordpiece 模型的一个变体
- (相对)在词汇表中的常用词
- at, fairfax, 1910s
- 如果词汇表中不存在,则其他单词由wordpieces组成
- hypatia = h ##yp ##ati ##a
如果你在一个基于单词的模型中使用BERT,你必须处理这个
字符级建立单词级
Learning Character-level Representations for Part-of-Speech Tagging (Dos Santos and Zadrozny 2014)
- 对字符进行卷积以生成单词嵌入
- 为PoS标签使用固定窗口的词嵌入
与字符结合就能处理无限的词了
Character-based LSTM to build word rep’ns/基于字符的LSTM构建word rep'ns/Bi-LSTM构建单词表示
运行角色级/字符级Bi-LSTM连接两个最终状态,我们称之为外向代表,然后我们把这个单词放入更高级的语言模型(我们目标最好就是降低角色级LSTM生成词的困惑度---不太明白这句话。。)
字符感知神经语言模型
Yoon Kim,Yacine Jernite, David Sontag, Alexander M. Rush. 2015
一个更复杂/精密的想法
动机是:
- 派生一个强大的、健壮的语言模型,该模型在多种语言中都有效
- 编码子单词关联性:eventful, eventfully, uneventful…
- 解决现有模型的罕见字问题
- 用更少的参数获得可比较的表达性
对字符卷积后选择最可能的词送入词级别
尽管我们对他是存疑的,但是事实上是有很好的效果的,如下图
(红色的是单词前缀,蓝色的是单词后缀,橙色的是连词符,灰色的是其他的一切)
Take-away
(课上没讲,属于ppt内容)
- 本文对使用词嵌入作为神经语言建模输入的必要性提出了质疑
- 字符级的 CNNs + Highway Network 可以提取丰富的语义和结构信息
- 关键思想:您可以构建“building blocks”来获得细致入微且功能强大的模型!
混合式NMT/混合式神经翻译系统
- 两全其美的建筑(比单纯的字符级更好,比字符级底层然后词级上层的也更加合理)
- 翻译大部分是单词级别的
- 只在需要的时候进入字符级别
- 使用一个复制机制,试图填充罕见的单词,产生了超过 2 BLEU的改进
模型想法/架构如下:(只是打算。还没做哟~)
2-stage Decoding
单词级别的束搜索
- 只有当遇到<UNK>时,才使用字符级别的束搜索
- 混合模型与字符级模型相比
- 纯粹的字符级模型能够非常有效地是用字符序列作为条件上下文
- 混合模型虽然提供了字符级的隐层表示,但并没有获得比单词级别更低的表示
WMT2015年冠军系统
2015冠军,用了30倍数据和三个系统,但是混合系统更np
英语-捷克语翻译示例
遇见<UNK>时有两种策略,一种是尽最大程度去复制这个词,或者就是字符级模型去处理,理论上很好,但是现实中却容易出现问题,如下图:
Chars for word embeddings/单词嵌入的字符
一种用于单词嵌入和单词形态学的联合模型(Cao and Rei 2016)
- 与word2vec目标相同,但使用字符
- 双向LSTM计算单词表示
- 模型试图捕获形态学
- 模型可以推断单词的词根
FastText embeddings/子词嵌入
目标:下一代高效的类似于word2vecd的单词表示库,但更适合于具有大量形态学的罕见单词和语言
- 带有字符n-grams的 w2v 的 skip-gram模型的扩展
- 将单词表示为用边界符号和整词扩充的字符n-grams
- where=<wh,whe,her,ere,re>,<where>
- 注意<her>和<her是不同于her的
- 前缀、后缀和整个单词都是特殊的
- 将word表示为这些表示的和。上下文单词得分为
- 细节:与其共享所有n-grams的表示,不如使用“hashing trick”来拥有固定数量的向量
这里课程讲的比较浅,有兴趣可以看看动手学习深度学习的这部分内容
这个子词模型也是很成功的,如下:单词相似度得分?
罕见单词的差异收益