学习笔记:《无处不在的自然语言处理》

作者: 趙00 | 来源:发表于2018-11-16 20:45 被阅读59次

    这节课是集智学园《迎接AI时代》系列课程的第六讲:《无处不在的自然语言处理》

    一、语言的起源与发展

    对于语言的起源,有两种观点/学派:

    1. 认为语言产生无先天基础,是后天社会的产物。
    2. 认为语言是先天本能(较为普遍)

    “语言是先天本能”学派有以下观点(参考《语言本能》)

    1. 每个人都有先天的语法知识(三方面论证)
      • 语言的普遍性:各种语言都能找到相似的语法结构
      • 输入贫乏论证
      • 生理基础论证
    2. 基本语法为原则
    3. 语言与语言之间细微差别被称为参数,人类学习语言的过程就是在原则上训练出不同的参数。
    人类语言和机器语言的对应关系

    二、语言模型

    语言模型:衡量一个句子是否合理的概率。
    具体过程:

    1. 将句子的每个字/词建模为从X1到XL的序列(X1,X2,…,XL);
    2. 计算序列在语言模型下的概率,概率高则可能是合理的句子。

    1. 经典语言模型:N-gram语言模型

    例如将中文的两个字为一个单位,定义为一个gram,计算n-gram序列的概率P(X1,X2,…,XL)

    首先假设这个序列符合马尔科夫假设:


    N-gram模型

    如图,两个东西的转变过程有一个概率(依赖关系/相关关系)。这种概率依赖关系很普遍:如“一蹴而”的状态后面是“就”的状态的概率很高。


    提取n-gram的统计信息

    只需要从语料中提取n-gram的统计信息:从能够获得的所有语料(人民日报、书籍、微博……所有渠道可获得的语料信息)中,提取n-gram的统计信息,如统计“一蹴”、“蹴而”、“而就”、“一蹴而”、“蹴而就”、“一蹴而就”出现的次数和概率。

    2. N-gram模型局限性

    • 数据稀疏问题:造新词的能力更强了,而新词的语料不足,可能其中某一个gram机器无法认识,因而概率为零,进而导致相关的几个概率都是零。

      解决:使用一些平滑的技巧,如加一个微小扰动,使概率不为零。

    • 缺少泛化能力:如太阳和月亮有相似性,若有“明亮的太阳”,也应可说“明亮的月亮”,但机器不知道可以这样推广。

      缺少泛化能力

    缺少泛化的原因——离散表达/1-hot表达:比如把一万个常用汉字编成字典,每个字用一个一万维向量表示,则每个向量只有一位是1(第序列号的那一位是1),从而相互没有相似性
    缺少泛化能力的问题过去一直没有很好的解决方法,直到深度学习的神经网络语言模型出现。

    三、语言表达

    1. 单词表示word representation

    (1) 深度学习的神经网络模型

    image.png
    由离散型表达(不是0就是1)变为可以连续型实数化的向量表达。如上图三个含C的表达,C是指连续化表达,向量中的每一维可以是(0,1)的实数,而不再是二值向量了——word embedding词嵌入
    将embedding的计算从上述复杂模型中简化,提取出较为简单的两个对称的模型。推出一个用于获取词向量的密集向量表示的开源工具包——Word2Vec,采用两个较为特殊的神经网络结构来进行词向量的构建,分别为:CBOW模型(左)和Skip-gram模型(右)
    Word2Vec
    • CBOW模型:在已知当前词w上下文的前提下预测当前词。“我要去吃饭”:用“我要”和“吃饭”预测“去”——两边预测中间。

    • Skip-gram模型:已知当前词w的前提下,预测其上。反之,用“去”预测“我要”和“吃饭”——中间预测两边。

    (2) 词嵌入的作用

    1. 通过向量的值可以计算词语相似度(word similarity calculation)。比如“求单词A的同义词”,就可以通过“求与单词A在cos距离下最相似的向量”来做到。

      计算词语相似度
    2. 获知词汇的语言属性:对词做分类,比如根据形容人/动物/颜色的属性等,通过向量加减可以获得。如下图“中国”减“北京”、“俄罗斯”减“莫斯科”等国家与首都的关系所形成的一系列平行的结构。

      词汇的语言属性
    3. 获知词语之间的关系:比如“水果”涵盖“苹果”等词语间包含与被包含/上下位的关系。

    4. 获知多语言之间的映射:多种语言之间语法、复杂度相似,因而能将相似的部分映射到同一个位置

    5. 多模化的“词语”之间的映射:多种媒介,比如把图片和文本/文本和语音放在一起学,也能学出一个映射。

    2. 词组表示Phrase Representations

    用相似的方法扩展词组的表示

    3. 句子表示Sentence Representations

    句子表示目前尚不精确。目前比较经典的有以下两种句子表示的模型:

    (1) RNN循环神经网络模型

    • 把句子看成词组成的序列sequence of words
    • 如图进行循环计算,例如有了the以后cat的概率是多少,有了cat以后is的概率是多少……(符合马尔可夫假设)
      RNN循环神经网络

    (2) CNN卷积神经网络模型

    • 把句子看作自底向上的组成式结构。比如先两两组合,再三三组合,如此一层层组合上去最终成为句子。
    • 重点用到池化操作Pooling:类似于取平均
      CNN卷积神经网络

    四、机器翻译:视作一种句子层面的交流

    1. 神经网络机器翻译Neural Machine Translation

    • 将以前复杂的提取特征、分类、输入规则等复杂的方法和过程替换为神经网络模型。条件概率最大代表正确率高
    • 优点:
      • 不用人工特征工程feature engineering,只用关注管神经网络的输入和输出,解放人工。
      • 端到端end-to-end,每一个神经网络的子模块都直接指向最后的输出,直接为最终的翻译质量服务。

    2. 编码-解码器框架encoder-decoder framework

    (1) 编码器解码器模型介绍

    使用encoder-decoder编码器-解码器模型实现端到端/序列到序列的学习。是对输入端的句子进行编码成中间表示(共同理解的东西),然后对之解码得到输出。由此句子中间有个中间表示——语义空间。

    encoder-decoder framework

    此框架非常火,有以下三个优点:

    • 综合:集合了很多可以干的事情。
    • 灵活:可以做不止文字翻译的工作,只要中间能够找到语义空间的都能应用,比如图片生成文字,文字生成图片。
    • 可扩展:框架没有对编码器、解码器的模型有严格要求,既可以是CNN,也可以是RNN,可以在编码器、解码器上加很多东西。

    (2) 编码器解码器工作过程

    • 编码过程——下图是一个RNN的结构:(1)输入向量→(2)向量从1-hot转化为连续的→(3)进行循环计算→(4)得到在语义空间中的中间表达。
    编码过程
    • 解码过程:(1)依照语义空间中的表达调用模型中的参数→(2)计算下一个词的概率→(3)转化成真正的语言
    解码过程

    (3) 问题和弊端

    • 问题:尤其对于长句子来说,压缩成向量后真的能表示出原意吗?是否损失太多细节信息?

    • 补救措施:基于注意力的神经网络机器翻译模型

    3. 注意力机制

    让机器在解码某个词的同时明白那个词在原句中处于哪个位置,先集中注意力于词而不是直接整句话。赋予每个词一个权重,根据词的权重(词越重要,权重就越高)来解码

    图片翻译:如下例根据图片生成图片标题,明暗代表着注意力的不同,比如生成斑马时更集中地注意斑马,斑马位置比较亮;生成草时集中注意草,草地位置比较明亮。

    图片翻译

    视频摘要生成:将不同帧更集中地生成不同的词。

    视频摘要生成

    五、语言生成

    1.衡量机器是否理解语言:机器不仅要人给输入而有输出,还要能主动生成语言。
    2.无限猴子定理:无数只猴子在打字机上打东西,总能有一个猴子打出莎士比亚的作品。

    考虑以下问题:

    • 可以做到的概率是多少?
    • 如果猴子能做到的话,机器能不能可以?
    • 如果机器可以,那么如何驱动机器的行为做到?
    • 能否生成其他类型的自然语言?
    • 终极问题:机器如何自动生成自然语言?

    1. 深度学习带来突破

    (1) 当前已经可以自动生成的

    • 天气预报:很早就解决了
    • 中国对联:微软亚洲研究院
    • 英文诗歌、中文古诗、宋词:结构有对称性所以好做

    (2) 当前效果还不好的

    • 图片视频标题与简介:机器根据图片或视频生成对它的描述。要完成目标识别-理解目标间关系-将关系组合成符合语法规则的句子。相似于机器翻译,使用编码-解码器模型就可以实现。

      图片/视频描述
      实现过程
    • 生成故事:给定题材自动生成故事;故事接龙;机器补全段落(如小说)

    • 对话生成:微软小冰、而苹果Siri、谷歌Allo

    2. 语言生成中的问题:

    (1) RNN和LSTM模型本身局限性带来的问题(普遍问题):

    • 难以生成长句子/复合句,也生成不出复合句,表现为生成一半后不知该生成什么,从而产生语言漂移,语言跳跃。如“今天天气很好”+“美国换新总统了”
    • 有语法问题(不能完全规避语法问题)
    • 会往词频高的方向漂移,因为词频高的更不容易出错

    (2) 生成对话过程中的独特困难(也是RNN问题的结果):

    • a) 万能回复现象:频繁说百搭/兜底/不容易犯错/最安全的话

      • debug:semantic drift+highly frequent pattern domination
      • 万能回复现象解决方法:混合回答策略(Google)
        1. 知识检索,让它触发知识库与知识图谱,从中抽取内容就能聊很多。
        2. 通过定义场景缩小搜索范围,在某一范围内比如【时间】、【地点】、【工作】、【买衣服】、【天气】等场景内搜索,从而排除万能回复。
    • b) language style语言风格

      • debug:回复过长、过于学究等问题。(尤其是从知识库中抽取的内容)
      • 人们在聊天中喜欢较短的、口语化的对话,需要对句子摘要来回复,最好还能带一些情绪、性格;人格化;根据不同人设置不同风格的回复。

    总结回顾:
    语言模型、语言表达、机器翻译、语言生成四个方向。四者之间的关系是:语言模型是了解NLP最基本的东西,语言模型中不能解决的问题已经被词嵌入word embedding词嵌入、continuous representation解决了,continuous representation解决之后就有了句子的表达,有了句子表达之后就有了很多可以做的任务如机器翻译等等,这些任务中最难的就是语言生成的任务,只有通过了语言生成的任务,才能认为机器真正理解了自然语言。

    附课程PPT:

    《无处不在的自然语言处理》
    链接:https://pan.baidu.com/s/1gbS6B8hDCo2Og1p2gXGj-w
    提取码:ryl3

    相关文章

      网友评论

        本文标题:学习笔记:《无处不在的自然语言处理》

        本文链接:https://www.haomeiwen.com/subject/lylrxqtx.html