主要内容

  • 课程内容
    • 一些关于语言学的内容(a tiny bit about linguistics)
      • 音素(phoneme)
      • 词态(morphology)
      • 单词的书写(words in writing system)
    • 模型(model)
      • 单词级模型(woed-level model)
      • 纯字符级模型(pure character level model)
      • 子词模型(subword model)
        • BPE(Byte Pair Encoding)
      • 字符级/词级混合模型(hybrid character and word level model)
      • FastText

课程内容

一些关于语言学的内容(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片段直接叠加作为隐藏层的结果。这部分之后单开一篇。

lecture12 - Subword model相关推荐

  1. CS224n笔记——Subword Model(十二)

    系列文章 Lecture 1: Introduction and Word Lecture 2: Word Vectors and Word Senses Lecture 12: Subword Mo ...

  2. 【NLP CS224N笔记】Lecture 12 - Information from parts of words Subword Models

    本次梳理基于Datawhale 第12期组队学习 -CS224n-预训练模块 详细课程内容参考(2019)斯坦福CS224n深度学习自然语言处理课程 1. 写在前面 自然语言处理( NLP )是信息时 ...

  3. NLP入门 | 通俗讲解Subword Models

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:芙蕖,Datawhale优秀学习者,东北石油大学 对于英文来说,文 ...

  4. Information from parts of words: Subword Models

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

  5. NLP学习-Task 3: 子词模型Subword Models

    NLP学习 更新流程↓ Task 1: 简介和词向量Word Vectors Task 2: 词向量和词义Word Senses Task 3: 子词模型Subword Models Task 4: ...

  6. CS224N-子词模型(subwords)

    文章目录 一.语言学知识(linguistics) 语音学与音韵学 形态学(Morphology) 人类语言书写系统 二.Subword Model Byte Pair Encoding Word p ...

  7. Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读

    Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...

  8. T5: Text-to-Text Transfer Transformer 阅读笔记

    作者:徐啸 知乎专栏:自然语言处理学习之旅 https://zhuanlan.zhihu.com/p/89719631 写在前面 谷歌用一篇诚意满满(财大气粗)的基于实验的综述,试图帮助研究者们「拨开 ...

  9. ​深度学习基础 | Seq2seq+Attention

    作者 | Chilia 整理 | NewBeeNLP 首先,请阅读先修知识: 深度学习基础 | 从Language Model到RNN 深度学习基础 | RNN家族全面解析 1. Seq2seq 1. ...

最新文章

  1. [NOI2017]游戏(2-SAT)
  2. SpringMVC拦截器2(资源和权限管理)(作为补充说明)
  3. 两大开源游戏引擎Cocos2d-x及OGEngine对比分析
  4. 组件开发之ASP.NET中集成资源文件的服务器端控件开发
  5. Dubbo 注解驱动(Annotation-Driven)
  6. Blazor Day
  7. [剑指offer]面试题第[57-2]题[JAVA][和为s的连续正数序列][数学法][滑动窗口]
  8. springboot oauth 鉴权之——password、authorization_code鉴权
  9. Scala 获取当前时间
  10. Golang json 解析与生成
  11. provide sth for sb; provide sb with sth
  12. 《计算传播学导论》读书笔记:第六章 网络传播模型与机器学习框架
  13. 关于环境光、漫反射、镜面反射
  14. python提取excel一列或多列数据另存为新表(1)
  15. 国际服服务器怎么换账号吗,战争雷霆国际服怎么切换账号 | 手游网游页游攻略大全...
  16. 广东python编程比赛
  17. MATLAB数字图像水印
  18. kali连接MySQL
  19. JS检测是否有企业微信应用程序
  20. LES07 :JNI编程

热门文章

  1. java image 反色_Java SWT Image 图像 —— 变灰、变亮变黑、旋转、反色、拉伸、透明叠加...
  2. 拼多多API接口,Onebound数据
  3. 金融帝国实验室(Capitalism Lab)官方即将推出【实验DLC】!!
  4. 第1章第9节:如何置入其它演示文稿中的幻灯片 [PowerPoint精美幻灯片实战教程]
  5. 市场调研-全球与中国巴西莓油市场现状及未来发展趋势
  6. MATLAB安装、使用及卸载
  7. 库存管理-多个仓库库存扣减-简单算法
  8. 6个故事:都体会了你就是营销超人!
  9. Java面试题,java四舍五入保留小数点后四位
  10. win10启动IIS服务