专栏首页新智元GitHub超1.5万星NLP团队热播教程:使用迁移学习构建顶尖会话AI

GitHub超1.5万星NLP团队热播教程:使用迁移学习构建顶尖会话AI


了解NLP的读者应该对Hugging Face这个名字非常熟悉了。他们制作了Transformers(GitHub超1.5万星)、neuralcoref、pytorch-pretrained-BigGAN等非常流行的模型。

即便你不是做人工智能的,也可能对这个名字有所耳闻,Hugging Face App在国外青少年中也有不小的影响力。

今天我们带来的是由Hugging Face团队深度学习和计算语言学–科学负责人Thomas Wolf教授撰写的利用迁移学习打造最前进的会话AI。本教程在非常受欢迎,今天新智元为大家译成中文。

可以来体验教程运行的Demo:

https://convai.huggingface.co/

读完本教程,你将学到:

  • 如何使用“迁移学习”功能基于OpenAI GPT和GPT-2 Transformer语言模型构建最先进的会话智能体
  • 如何重现在NeurIPS 2018对话竞赛ConvAI2中使用的模型
  • 如何在少于250行、带注释的训练代码(具有分布式和FP16选项)中提取3k+行竞争代码
  • 如何在云实例上以不到20美元的价格训练该模型,或者仅使用教程提供的开源预训练模型

随教程赠送的预训练模型

https://github.com/huggingface/transfer-learning-conv-ai

让人工智能拥有人格

首先会话智能体具有知识库,用来存储描述其身份(角色)和对话历史的句子。当从用户处接收到新的语音时,智能体将该知识库的内容与新接收的语音相结合,即可生成答复。

具体流程如下:

以端到端的方式训练基于深度学习的会话智能体,面临一个主要问题:对话数据集很小,很难从中学习语言和常识,从而无法进行流利的响应。

预训练模型自然是越大越好。本文使用GPT和GPT-2。GPT和GPT-2是两个非常类似的、基于Transformer的语言模型。这些模型称为解码器或因果模型,这意味着它们使用上下文来预测下一个单词。

在大型语料库上对这些模型进行预训练是一项昂贵的操作,因此,我们将从OpenAI预训练的模型和令牌生成器开始。令牌生成器负责将输入的字符串拆分为令牌(单词/子单词),并将这些令牌转换为模型词汇表的正确数字索引。

使语言模型适应对话任务

语言模型是通过单一输入来训练的:单词序列。

在对话设置中,模型将必须使用几种类型的上下文来生成输出序列:

  • 一或几个角色的句子,
  • 对话的历史记录,至少包含用户的最后一次讲话,
  • 自从逐字生成输出序列开始,已经生成的输出序列的标记。

如何从这些不同的上下文中为模型建立输入?

简单的方法之一就是将上下文段按单个顺序连接起来,然后将答案放在最后。然后可以通过继续执行序列来逐个令牌地生成答复令牌:

这个简单的设置有两个问题:transformer不能区分颜色也不能区分位置。添加以上信息的一种简单方法是为单词,位置和句段构建三个并行的输入序列,并将它们融合为一个序列,对三种类型的嵌入进行求和:单词,位置和句段的嵌入:

实例代码:

这些特殊令牌方法分别将我们的五个特殊令牌添加到令牌生成器的词汇表中,并在模型中创建五个附加嵌入。

现在,从角色,历史记录和回复上下文开始构建输入序列所需的一切都有了。一个简单的示例:

多任务损失

现在,我们已经初始化了预训练模型并建立了训练输入,剩下的就是选择在优化过程中要优化的损失。

下一句预测目标是BERT预训练的一部分。它包括从数据集中随机抽取干扰因素并训练模型,以区分输入序列是以满意回复或者胡乱回复结束。它训练模型以查看全局片段,而不只是局部上下文。

所以需要加载“双头”模型:一个负责将计算语言建模预测,而另一个负责将预测的下一句分类标签。让我们看一下如何计算损失:

总损失将是语言建模损失和下一句预测损失的加权总和,计算方式如下:

现在,我们有了模型所需的所有输入,并且可以对模型进行正向传递以获取两个损失和总损失(作为加权总和):

对话数据集训练

ConvAI2竞赛使用了Facebook去年发布的一个有趣的数据集:PERSONA-CHAT。

这是一个相当大的对话数据集(一万个对话),该数据集可在Facebook的ParlAI库中以原始标记化文本格式使用。本教程还上传了JSON格式的版本,可以使用GPT的令牌生成器下载和令牌化,如下所示:

PERSONA-CHAT的JSON版本可快速访问所有相关输入,可以将我们的模型训练为嵌套的列表字典:

借助令人敬畏的PyTorch ignite框架和NVIDIA apex提供的新的自动混合精度API(FP16 / 32),我们能够在少于250行的训练代码中使用分布和FP16选项提取+ 3k竞争代码!

train.py代码在这里:

https://github.com/huggingface/transfer-learning-conv-ai

在具有8个V100 GPU的AWS实例上训练该模型需要不到一个小时的时间(目前在最大的p3.16xlarge AWS实例上,该费用还不到25美元),其结果接近在ConvAI2比赛中获得SOTA的Hits@1(超过79), perplexity(20.5)furthermore1(16.5)。

与模型对话-解码器

对话模型的奇妙之处在于可以与他们交谈?

为了与我们的模型进行交互,我们需要添加一个解码器,它将根据我们模型的下一个令牌预测来构建完整序列。

当前,成功进行beam-search/贪婪解码的两个最佳选择是top-k和nucleus (或top-p) 采样。这是我们如何使用top-k或nucleus/top-p)采样进行解码的方法:

示例:

本文分享自微信公众号 - 新智元(AI_era)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自然语言处理的中文语义分析模式介绍

    随着计算机的使用范围更加广泛,社会信息化程度提高,计算机的使用频率增加,人们对自然语言理解也提出了更高的要求,而对于自然语言的理解,则基于中文语义分析的研究和分...

    用户6287968
  • 文本分析在收集产品反馈时的作用

    文本分析现在已经能够在多个行业实现应用,今天灵玖软件从收集产品回馈方面来讲一下文本分析的作用。

    用户6287968
  • 中秋佳节,用 AI 为家人写一首诗(文末送中秋福利)

    面对中秋花好月圆的良辰美景,古人能够吟出「海上生明月,天涯共此时」的绝美诗句,而现在大多数人却只能无奈地,将无限感慨化为一句「啊,月亮好圆。」

    数据森麟
  • 『开发技术』Python中文分词工具SnowNLP教程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    小宋是呢
  • AI Pioneer | 一知智能李一夫:完美的智能语音客服有多难?

    2019年9月7日,一知智能受邀参加由AICUG人工智能技术社区主办的AI 先行者大会(AI Pioneer Conference),大会聚焦国际AI前沿技术、...

    一知智能科技
  • 预训练小模型也能拿下13项NLP任务,谷歌ALBERT三大改造登顶GLUE基准

    通常而言,在预训练自然语言表征时增加模型大小可以提升模型在下游任务中的性能。但在某些情况下,由于 GPU/TPU 内存限制、训练时间延长以及意外的模型退化等原因...

    机器之心
  • 超强NLP思维导图,知识点全面覆盖:从基础概念到最佳模型,萌新成长必备资源

    有个名叫Tae-Hwan Jung的韩国小伙伴,做了一份完整的思维导图,从基础概念开始,到NLP的常用方法和著名算法,知识点全面覆盖。

    量子位
  • 【Github】nlp-roadmap:自然语言处理路相关路线图(思维导图)和关键词(知识点)

    看到Reddit和Github上一个有意思的项目:graykode/nlp-roadmap

    AINLP
  • NLP技术路线详解:这是从数学到算法的艺术

    自然语言处理很多时候都是一门综合性的学问,它远远不止机器学习算法。相比图像或语音,文本的变化更加复杂,例如从预处理来看,NLP 就要求我们根据对数据的理解定制一...

    机器之心
  • 超强NLP思维导图,知识点全面覆盖:从基础概念到最佳模型,萌新成长必备资源

    有个名叫Tae-Hwan Jung的韩国小伙伴,做了一份完整的思维导图,从基础概念开始,到NLP的常用方法和著名算法,知识点全面覆盖。

    代码医生工作室

扫码关注云+社区

领取腾讯云代金券