资源链接:https://www.bilibili.com/video/BV1r4411f7td?p=20

正课内容

5年前NLP的深度学习

  • No Seq2Seq
  • No Attention
  • No large-scale QA/reading comprehension datasets
  • No TensorFlow or Pytorch

深度学习+NLP的未来

  • 利用无标签数据 
    • Back-translation 和 无监督机器翻译
    • 提高预训练和GPT-2
  • 接下来呢? 
    • NLP技术的风险和社会影响(存在安全和风险)
    • 未来的研究方向

为什么最近深度学习如此成功?

  • 统计学习:一大堆想法可能效果不好
  • 深度学习:+更多的层...效果就有了(神经网络扩展性太强了)

趋势:

深度学习的巨大成功(三个使用大量数据获得成功的范例)

  • 图像识别:被 Google, Facebook 等广泛使用 
  • 机器翻译:谷歌翻译等
  • 打游戏:Atari Games, AlphaGo, and more

NLP数据集

  • 即使是英语,大部分任务也只有 100k 或更少的有标签样本
  • 其他语言的可用数据就更少了 
    • 有成千上万的语言,其中有成百上千的语言的母语使用者是大于一百万的
    • 只有 10% 的人将英语作为他们的第一语言
  • 越来越多的解决方案是使用无标签数据(最近比较成功的一个点,而且这样更容易获取数据)

使用未标记的数据进行翻译

机器翻译数据

获取翻译需要人工专业知识+限制数据的大小和范围

语言文本更容易获得!(引擎或者社交软件等)

预训练

1、分别将两个预训练好的语言模型作为 Encoder 和 Decoder

2、然后使用双语数据共同训练

对比结果

自训练

  • 预训练的问题:预训练中两个语言之间没有交互
  • 自训练:标记未标记的数据以获得有噪声的训练样本

循环的/圆形的?

自训练技术没有被广泛使用,因为其训练的来源是其之前的产出(翻译的产品来自于我们的产品生产出来的,在实际生产中,由于这个问题,这并不是一个广泛使用的技术)

反向翻译

(解决上述问题的一种技术---很流行,并在使用未标记的数据进行翻译方面取得了很大的成功)

有两个机器翻译模型朝相反的方向(en->fr)和(fr->en)

  • 不再循环
  • 模型再也看不到“坏”翻译,只有坏输入(翻译出来的好坏更体现在作为下一个反向翻译模型的输入上了)

如何训练模型

  • 模型训练时会加入一些标记数据,确保 en->fr 模型的输出,即  fr->en 模型的输入,从而保证模型的正常

如何协调对标记数据与未标记数据的训练呢? 

  • 先在标记数据上训练两个模型
  • 然后在未标记数据上标记一些数据
  • 再在未标记数据上进行反向翻译的训练
  • 重复如上的过程

反向翻译的成绩

如果没有双语数据怎么办?

无监督词翻译

当我们只有未标记的句子时,我们使用一种比完全的翻译更简单的任务

  • 不是做句子翻译
  • 而是做单词翻译
  • 想要找到某种语言的翻译但不使用任何标记数据

跨语言单词嵌入

  • 两种语言共享嵌入空间
  • 保持单词嵌入的正常良好属性
  • 但也希望单词接近其翻译

想学习单语语料库吗?

每个英语单词的位置上往往对应着一个德语单词,并且距离很近。在使用时,只需选取英文单词在嵌入空间中距离最近的德语单词,就可以获得对应的翻译

(红色为英语单词,蓝色为意大利单词,虽然矢量空间看起来不一样,但是结构很相似,都是腰果形状)

  • 词嵌入有很多结构
  • 假设:不同语言之间的结构应该相似

可以理解为,在英语词嵌入空间中的 cat 与 feline 的距离与意大利语词典如空间中的 gatto 和 felino 之间的距离是相似的
我们在跨语言的词嵌入中想要学习不同种语言的词嵌入之间的对齐方式,例如旋转一下,如下图

  • 即使是运行两次 word2vec 会获得不同的词嵌入,嵌入空间的结构有很多规律性(如腰果图)
  • 学习一个(正交)矩阵 W 使得 WX~Y(类似旋转)

如何学习上述W(有很多种方法,这只是其中一种)

  • 使用对抗训练来学习 W
  • 鉴别器:预测一个嵌入是来自于 Y 的还是来自于 X 并使用 W 转换后的嵌入
  • 训练 W 使得鉴别器难以区分这两者
  • 鉴别器预测:圈出的点是红色还是蓝色?
  • 目的:尽可能的混淆鉴别者
  • 其他可以被用来进一步提升效果的方法参见 Word Translation without Parallel Data

课堂交流:正交性来约束词嵌入的原因是为了防止过拟合吗?

我们假设我们的嵌入空间是类似的,只是需要对英语的词向量和意大利语的词向量进行旋转,许多没有正交性的,讲者认为没有损害性能

无监督机器翻译

刚刚讲的单词的翻译,现在轮到句子了~

模型:不考虑不同输入和输出语言,使用相同的(共享的) encoder-decoder (没有使用注意力),即使用一个标准的seq2seq模型,甚至没有注意力,如下图

  • 使用 cross-lingual 的词嵌入来初始化,即其中的英语和法语单词应该看起来完全相同

我们可以喂给 encoder 一个英文句子,也可以喂一个法语句子,从而获得 cross-lingual embeddings ,即英文句子和法语句子中各个单词的词嵌入,这意味着 encoder 可以处理任何输入

对于 decoder,我们需要喂一个特殊的标记来告诉模型应该生成什么语言的输出/标明是en->fr还是fr->en,可以用做一个 auto-encoder,完成 en->en,即再现输入序列

 

 

训练目标1:去噪自动编码器

  • 入一个打乱后的英语 / 法语句子
  • 输出其原来的句子
  • 由于这是一个没有注意力机制的模型,编码器将整个源句子转换为单个向量,自编码器的作用是保证来自于 encoder 的向量包含和这个句子有关的,能使得我们恢复原来的句子的所有信息

培训目标2:反向训练

  • 首先翻译fr->en
  • 然后作为“监督”示例来训练en->fr

注意,这里的fr->en输出的句子,是en->fr输入的句子,这个句子是有些混乱的,不完美的,例如这里的 “I am student”,丢失了 “a”
我们需要训练模型,即使是有这样糟糕的输入,也能够还原出原始的法语句子

 

为什么这个有用?

跨语言嵌入和共享编码器为模型提供了一个起点

使用 cross-lingual 的词嵌入来初始化,即其中的英语和法语单词应该看起来完全相同

Objectives encourage language-agnostic representation/目标鼓励 language-agnostic 语言无关的表示 

  • 获得一个与语言类型无关的 encoder vector

我们真的希望模型能够编码一个句子,如上图表示,目标序列是相同的,这意味着英语句子和法语句子的向量将收到相同的训练

无监督机器翻译

水平线为无监督模型,其余为监督模型

在给出大量有监督数据后,有监督的模型大量提升,但是无监督的效果也不错,尤其是少量数据集时,总结如下:

  • 在一定的监督数据规模下,无监督模型能够取得和监督模型类似的效果
  • 当然,随着数据规模的增大,监督模型的效果会提升,超过无监督模型

属性转移

使用标签收集“轻松”和“恼怒”tweets的语料库
学习无监督机器翻译模型

可以讲上述两个语料库当成不同的语言,然后进行无监督翻译,实现了属性转移,如下图所示

并不是很快

这是时候要泼一点冷水了(兴奋的就是,没有标记的数据的情况可以进行翻译)

  • 英语,法语和德语是相当类似的语言
  • 在非常不同的语言上(例如英语和土耳其语) 
    • 完全的无监督的词翻译并不十分有效。需要种子字典可能的翻译 
      • 简单的技巧:使用相同的字符串从词汇

UNMT几乎不工作与纯粹的监督学习差距还是很大的

跨语言BERT

上图 1 是常规的 BERT ,有一系列的英语句子,并且会 mask 一部分单词 

  • 谷歌实际上已经完成的是训练好的多语言的 BERT
  • 基本上是连接一大堆不同语言的语料库,然后训练一个模型 
    • masked LM training objective 

上图 2 是 Facebook 提出的 

  • 联合了 masked LM training objective 和 翻译
  • 给定一个英语句子和法语句子,并分别 mask 一部分单词,并期望模型填补

无监督MT结果

通过使用未标记数据提高翻译质量

无监督关于翻译的部分到此结束~下面讲述,如果我们真的扩大这些无监督模型会发生什么

巨型模型和GPT-2

训练巨型模型

LSTM中型模型大约有1000万个参数,再看一下其他的~GPT-2必蜜蜂脑神经元都复杂...

这是ML的一个普遍趋势

  • peta : 用于计量单位,表示10的15次方,表示千万亿次
  • FLOPS = FLoating-point Operations Per Second,每秒浮点运算次数

计算机视觉中的大模型

这些图像都是模型生成的,看起来非常真实,推荐的网站: https://thispersondoesnotexist.com(可以生成图片,利用的GAN)

5亿个参数的图像网络模型,比BERT大,但是远远不到GPT-2,这个图貌似显示出:精度随着模型尺寸的对数而增加

  • 更好的硬件
  • 数据和模型的并行化(两种并行)

目前许多公司已经开展研究更适合深度学习运算的硬件了(比gpu更适合的),例如谷歌公司的TPU等,实际上很多公司正在研究ing

GPT-2

只是一个非常大的Transformer LM

40 GB的训练文本 

  • 投入相当多的努力去确保数据质量
  • 使用 reddit 中获得高投票的网页 link

那么GPT-2能做什么呢?

如果我们有一个语言模型,可以用它进行语言建模

数据集上得到最先进的困惑,甚至没有训练

OpenAI(GPT-2的研发团队)还有一些其他的有趣实验

  • Zero-Shot Learning: no supervised training data!/ 无监督训练数据,在没有接受过训练的情况下常识完成任务
    • Ask LM to generate from a prompt/要求LM根据提示生成
  • Reading Comprehension: <context> <question> A:
  • Summarization: <article> TL;DR:
  • Translation:
    <English sentence1> = <French sentence1>
    <English sentence 2> = <French sentence 2>
    …..
    <Source sentenc> =
  • Question Answering: <question> A:

GPT-2的成果

(虚线为无监督的)

GPT-2是怎么做翻译的?

它只是给出了一个很大的文本库,几乎全是英语

由于数据集中存在一些翻译的例子,例如:法语习语及其翻译、法语引用及其翻译,看到足够的例子,它实际上就开始学习如何生成法语了

GPT-2问答

更深入的挖掘是它具有能够回答问题的能力~

简单基线:1%准确度
GPT-2:~4%准确度
Cherry挑选了最有信心的结果

当模型变得更大时会发生什么

对于一些任务,性能似乎随着日志(模型大小)的增加而增加,如图1,但是有些任务则不是很明确,如图2

GPT-2反应/回应

大致意思:由于担心大规模的语言模型被用来生成欺骗性的、有偏见的或辱骂性的语言,我们只删除了GPT-2的一个小版本以及samplingcode。我们不会发布数据集、训练代码或GPT-2模型权重。将近一年前,我们在Openai宪章中写道

下面是一些相关后续评论等~

一些辩论的结果:

NLP专家应该做这些决定吗? (关于一些安全、危险的讨论等)

  • 计算机安全专家?
  • 技术和社会专家?
  • 道德专家?

需要更多的跨学科科学

许多NLP具有较大社会影响的例子,尤其是对于偏见/公平

(越来越多人正在研究NLP真正高风险的应用,如下几个方面)

高影响力决策

越来越感兴趣用NLP帮助高影响力的决策 

  • 司法判决
  • 招聘
  • 等级测试

一方面,可以快速评估机器学习系统某些偏见,然而,机器学习反映了训练数据,甚至放大偏见…这可能导致更偏向数据的创建(19课内容~讲偏见的已经讲了),写一个筛选简历的模型非常容易,但是可能解决5000个歧视女性的高管是一个严重的问题,如下例子

下面是一个评分系统,但是比较容易被一些花里胡哨高大上的话进行欺骗

Chatbots

聊天机器人也是一个非常不错的工具,可以帮助别人放松心情等,但是有些可能会出现一些种族主义等,也存在许多风险

(这让我想到了 九号秘事 的一个片段,一个关于心理咨询的,打电话往往是心理出现问题的,许多带有自杀倾向的,而这个部门则是缓解他们的,但是因为每天都有负面情绪,导致这些心理缓解人员也非常压抑,存在一些心理问题,而对面自杀倾向的人如果产生了不好的情绪对待,可能会导致他们倾向的加剧,感觉和这个问题非常类似)

BERT“解决”了什么?我们接下来要做什么?

GLUE 基准结果/通用语言理解评估

10种nlp任务,BERT很接近人类了...

The Death of Architecture Engineering?/建筑工程之死?

在SQuAD上,对于构建模型往往需要各种复杂的结构(类似于设计盖楼),但是有个BERT之后,我们只需要训练一个变压器并提高大量的数据就可以做的很好(类似于之前模型需要各种设计,而现在只需要一个变压器即可,所以说之前的设计也就是 Architecture Engineering/建筑工程可以已经不需要了...)

  • 花费六个月来研究 体系结构的设计,得到了 1 F1 的提升
  • 或知识让BERT变得 3 倍大小,得到了 5 F1 的提升
  • SQuAD的TOP 20 参赛者都是用了BERT

(虽然感觉BERT有点一力破万法的感觉,但是对于设计框架的研究者,感觉有点小悲伤...)

更难理解自然语言

BERT提出:我们需要更艰巨的任务---->BERT几乎已经解决了SQuAD,需要更加复杂的任务来解决了

更难的任务:

  • 阅读理解 
    • 在长文档或多个文档
    • 需要多跳推理
    • 在对话中定位问答
  • 许多现有阅读理解数据集的关键问题:人们写问题时看着上下文 
    • 不现实的
    • 鼓励简单的问题

QuAC:上下文中的问答

一个新的问答数据集合(感觉有种对话的意味,需要考虑之前的对话信息进行回答)。老师看维基百科的文字,而学生想要了解这篇维基百科的内容,目的是培养充当教师的机器学习模型。有种自动化教学的意味。

问题取决于谈话的整个历史。这个比单纯的问答系统更加具有挑战~

在QuAC上,即使是BERT以扩展模型与人的表现还是有很大差距的(大约低了 15 个 F1 点)

HotPotQA

一个新的推理数据集合,专门为多跳推理而设计。基本为了回答一个问题,必须看多个文件,从多个文件中查看不同的事实,并进行一定的推断来获得正确答案。

在HotPotQA上,即使是BERT以扩展模型与人的表现也是相差非常之大

多任务学习

NLP的另一个前沿是让一个模型执行许多任务。GLUE 和 DecaNLP是最近的例子,在BERT的基础上,多任务学习产生了改进

多任务的重要性在不断增加,之前也有一节课专门讲过

关于多任务的内容可以详见之前的课(具体哪节课忘记了,本次课程中没怎么讲,只是简单一提这一部分)

低资源设置

处理资源匮乏的环节也是一个非常重要的研究内容,目前在nlp领域的代表性不足,因为大部分数据集都是英文的

资源可以理解:数据集(大量的数量、不同的种类,例如问答可以增加其他语言的)、计算能力等,本部分主要强调计算能力。

BERT很棒,但是需要大量的计算,往往不现实

  • 不需要很多计算能力的模型(不能使用BERT) 
    • 为移动设备尤其重要
  • 低资源语言
  • 低数据环境(few shot learning 小样本学习) 
    • ML 中的元学习越来越受欢迎

解释/理解模型

对于从事ai的人,可能都把神经网络模型当成一个黑盒,需要问题都归结于随机初始化,或者一些神经网络的不可解释性,尤其是对于刚入门的来说,更加难以理解~我们非常想知道为什么是这个结果、一些理由或者解释,如果知道后,甚至可以去人为调整模型~

  • 我们能得到模型预测的解释吗?
  • 我们能理解模型,例如BERT知道什么和他们为什么工作这么好?
  • NLP中快速增长的地区
  • 对于某些应用程序非常重要(如医疗保健)

诊断/探测分类器

  • 看看模型知道什么语言的信息
  • 诊断分类器需要表示一个模型(例如BERT)作为输入,并做一些任务
  • 只有诊断分类器被训练
  • 诊断分类器通常非常简单(例如,单个softmax)。否则他们不通过模型表示来自省会学会完成任务
  • 一些诊断任务,如下

诊断/探测分类器:成果

较低层次的BERT在较低层次的任务中表现更好

工业NLP

NLP并不是学术研究的背景,NLP在工业领域也在迅速发展。

其中工业NLP中两个特别大的领域:

  • 对话 
    • 聊天机器人
    • 客户服务
  • 健康 
    • 理解健康记录
    • 理解生物医学文献

总结

  • 在过去的5年里,由于深度学习,进步很快
  • 由于较大的模型和更好地使用无标记数据,在去年有了更大的进展,是在NLP领域激动人心的时刻 
  • NLP是正逐渐对社会产生巨大影响力,使偏差和安全等问题越来越重要

(2019年的CS224N系列到此完结撒花了🎉,目前初步打算走知识图谱和推荐系统的方向,可能会后续更新这方面的内容)

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐