seq2seq

动手做个DialoGPT:生成式多轮对话模型

旧巷老猫 提交于 2020-10-06 02:36:37
  前段时间刷Arixv的时候,发现清华大学开源了一个大规模的中文闲聊语料库LCCC,从开源的文件上来看,这可能是目前开源的数量最大、质量最好的闲聊语料库了,而且还包含了部分多轮对话聊天,总的来说可玩性还是蛮强的。笔者也被它吸引到了,尝试着用它来训练了一个闲聊对话模型,结果看上去还是不错的,在此分享一下自己的经验。   论文名称:《A Large-Scale Chinese Short-Text Conversation Dataset》      论文链接:https://arxiv.org/abs/2008.03946   项目地址:https://github.com/thu-coai/CDial-GPT    1    语料简介   这里简单介绍一下LCCC这个数据集(Large-scale Cleaned Chinese Conversation),具体细节大家可以去Github上看,下载链接也在上面。LCCC分base和large两个版本,base主要是来源于微博对话,large则是在base的基础上融合了其他开源对话语料,按照作者的说法,LCCC经过了严格的清洗过程,所以整体质量看上去还是很不错的。      为了简化任务,所有样本都被处理成双人对话。下面是一些样本示例:    A: 等过年咱们回去买点兔头好好吃顿火锅 B: 太原就没看见有好吃的兔头 A:

动手实现 Bahdanau 注意力模型

做~自己de王妃 提交于 2020-10-02 02:50:11
前一篇我们学习了 seq2seq 模型,从它的模型结构中我们可以看到存在 两个瓶颈: 例如,当我们用 seq2seq 翻译一句话时,它的 Encoder 需要将原始句子中的主语,谓语,宾语,以及主谓宾之间的关系等信息都压缩到一个固定长度的上下文向量中,这个向量的长度通常只是 128 或者 256, 如果输入数据很长时,就会有很多信息无法被压缩进这么短的向量中。 另一个瓶颈是,这个上下文向量在 Decoder 中只是在最开始的时候传递一次,之后都要靠 Decoder 自己的 LSTM 单元的记忆能力去传递信息, 这样当遇到长句子时,记忆能力也是有限的。 于是为了改善这两个问题,Bahdanau 在 2015 年首次提出注意力模型。 在这个注意力模型中,Decoder 的每一个时间步都可以访问到 Encoder 的所有状态信息,这样记忆问题得以改善,而且在 Decoder 的不同时间步可以对 Encoder 中不同的时间步予以不同程度的关注,这样重要信息不会被淹没。 我们来更直观地对比看一下有和没有注意力机制的 seq2seq 模型有什么区别: 在没有注意力的 seq2seq 中,上下文向量是 Encoder 最后的隐向量,在 Attention 中, 上下文向量是这些隐向量的加权平均。 在没有注意力的 seq2seq 中,上下文向量只是在 Decoder 开始时输入进去,在

###好好好####多模态中的BERT

百般思念 提交于 2020-10-01 22:33:42
image BERT自问世以来,几乎刷新了各种NLP的任务榜,基于BERT的变种也层出不穷,在很多任务里都可以看到其身影。大浪淘沙,沉者为金,回想第一次看到BERT的论文时,确实不曾想其也能对工业界产生极大的影响。 本文尝试梳理今年BERT在多模态任务(主要涉及视觉和文本模态)上的一些工作,尝试比较各工作的主要思路以及做法上的区别,因此不会过多的涉及细节。总的来看,众多工作的主体模型大同小异,均使用Transformer,从表1(引用自VL-BERT论文)可以对各工作之间的相似和不同之处有个整体的认识。 image 可以看到,各方案之间的差异基本在于模态融合方式、预训练任务、以及下游任务微调,下文也将主要从这几个维度展开介绍和对比(排名不分先后)。 VideoBert image VideoBert主体采用单Transformer同时对文本token和视频片段进行模态表示和融合。与BERT区别在于把原来的句子对是否匹配(是否为下一句),换成了句子视频是否匹配任务。同时对于视频片段帧进行随机的MASK,预测对应的特征向量,文中叫visual words(通过预训练的视觉模型抽取得来,如S3D,然后聚类得到相应特征向量的id),对应于BERT的masked语言模型。 CBT image 和VideoBert不同在于,视频输入和文本输入分成了两支。视频输入经过S3D网络得到视觉特征序列

Bert: 双向预训练+微调

五迷三道 提交于 2020-09-30 15:02:23
最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系。 以下是要写的文章,文章大部分都发布在公众号【雨石记】上,欢迎关注公众号获取最新文章。 Transformer:Attention集大成者 GPT-1 & 2: 预训练+微调带来的奇迹 Bert: 双向预训练+微调 Bert与模型压缩 Bert与模型蒸馏:PKD和DistillBert ALBert: 轻量级Bert TinyBert: 模型蒸馏的全方位应用 MobileBert: Pixel4上只需40ms 更多待续 Transformer + AutoML: 进化的Transformer Bert变种 Roberta: Bert调优 Electra: 判别还是生成,这是一个选择 Bart: Seq2Seq预训练模型 Transformer优化之自适应宽度注意力 Transformer优化之稀疏注意力 Reformer: 局部敏感哈希和可逆残差带来的高效 Longformer: 局部attentoin和全局attention的混搭 - Linformer: 线性复杂度的Attention XLM: 跨语言的Bert T5 (待续) 更多待续 GPT-3 更多待续 背景 Bert,全称是Bidirectional Encoder Representation from

How to use TimeDistributed layer for predicting sequences of dynamic length? PYTHON 3

孤人 提交于 2020-08-26 09:01:49
问题 So I am trying to build an LSTM based autoencoder, which I want to use for the time series data. These are spitted up to sequences of different lengths. Input to the model has thus shape [None, None, n_features], where the first None stands for number of samples and the second for time_steps of the sequence. The sequences are processed by LSTM with argument return_sequences = False, coded dimension is then recreated by function RepeatVector and ran through LSTM again. In the end I would like

BERT解析及文本分类应用

喜夏-厌秋 提交于 2020-08-20 06:37:58
目录 前言 BERT模型概览 Seq2Seq Attention Transformer encoder部分 Decoder部分 BERT Embedding 预训练 文本分类试验 参考文献 前言 在18年末时,NLP各大公众号、新闻媒体都被BERT(《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》)刷屏了,刷新了自然语言处理11项纪录,也被称为了2018年最强自然语言处理模型。 笔者很早便完整看了这篇论文,迟迟没有动手,一方面是因为自己懒,各种事情耽搁了,另一方面还是想通过在具体的任务中进行了确切的实践后再与大家分享交流。废话不多说,下面我们进入正题,2018最强自然语言处理模型BERT(注意修饰语2018,因为最近冒出来的OpenAI的研究人员训练的超大规模15亿参数模型已经进一步打破了记录,并开源了一个117M的小模型和代码: https://github.com/openai/gpt-2,感兴趣的读者可以看看) BERT模型概览 了解BERT模型我们需要先回顾谷歌在早前发表的一些观点和paper,我们首先来简单回顾下seq2seq,之后说说attention引出的transformer模型,最后看看BERT模型的细节以及创新点。 Seq2Seq

NLP中的Transformer 简介

孤人 提交于 2020-08-14 03:32:00
作者|Renu Khandelwal 编译|VK 来源|Towards Data Science 在这篇文章中,我们将讨论以下有关Transformer的问题 为什么我们需要Transformer,Sequence2Sequence模型的挑战是什么? 详细介绍了Transformer及其架构 深入研究Transformer中使用的术语,如位置编码、自注意力、多头注意力、掩码多头注意力 可以使用Transformer的NLP任务 Sequence2Sequence (Seq2Seq)的缺点 顺序计算 :在Seq2Seq中,我们以顺序的方式在每个步骤中向编码器输入一个单词,以便在解码器中每次生成一个单词的输出。在Seq2Seq架构中我们做不到通过并行化操作来提高计算效率。 长期依赖关系 :长期依赖关系是Seq2Seq的一个问题,这是由于需要为长句执行大量操作造成的,如下所示。 这里的“it”指的是“Coronavirus”还是“countries”?。 让我们深入了解Transformer的体系结构和Transformer的关键概念,以了解Transformer如何应对这些挑战 Transformer架构 Transformer有6个编码器和6个解码器,不像Seq2Seq,该编码器包含两个子层:多头自注意层和一个全连接层。 该解码器包含三个子层,一个多头自注意层

具有注意力机制的seq2seq模型

蓝咒 提交于 2020-08-11 09:02:31
作者|Renu Khandelwal 编译|VK 来源|Towards Data Science 在本文中,你将了解: 为什么我们需要seq2seq模型的注意力机制? Bahdanua的注意力机制是如何运作的? Luong的注意力机制是如何运作的? 什么是局部和全局注意力? Bahdanua和Luong注意力机制的关键区别 什么是注意力,为什么我们需要seq2seq模型的注意力机制 让我们考虑两个场景,场景一,你正在阅读与当前新闻相关的文章。第二个场景是你正在阅读准备考试。两种情况下的注意力水平是相同还是不同? 与新闻文章相比,你在准备考试时会相当注意阅读。在准备测试的时候,你会更加关注关键词来帮助你记住一个简单或复杂的概念。这也意味着我们要专注于某一特定领域的任何深度学习任务。 序列到序列(Seq2Seq)模型使用编码器-解码器架构 。 seq2seq的几个场景 神经机器翻译(NMT) 图像字幕 聊天机器人 文本摘要等 Seq2Seq模型将源序列映射到目标序列。在神经机器翻译的情况下,源序列可以是英语,目标序列可以是印地语。 我们将英语源语句传递给编码器;编码器将源序列的完整信息编码为单个实值向量,也称为上下文向量。然后,这个上下文向量被传递到解码器上,以生成目标语言(如印地语)中的输出序列。上下文向量负责将整个输入序列汇总为单个向量。 如果输入的句子很长

神经机器翻译的直观解释

瘦欲@ 提交于 2020-08-09 11:34:26
作者|Renu Khandelwal 编译|VK 来源|Towards Data Science 什么是神经机器翻译 ? 神经机器翻译是一种将一种语言翻译成另一种语言的技术。一个例子是把英语转换成印地语。让我们想想,如果你在一个印度村庄,那里的大多数人都不懂英语。你打算毫不费力地与村民沟通。在这种情况下,你可以使用神经机器翻译。 神经机器翻译的任务是使用深层神经网络从一个源语言(如英语)的一系列单词转换成一个序列的目标语言(如西班牙语)。 神经机器翻译的特点是什么 ? 能够在多个时间步中持久存储顺序数据 NMT使用连续的数据,这些数据需要在几个时间步中进行持久保存。人工神经网络(ANN)不会将数据保存在几个时间步长上。循环神经网络(RNN),如LSTM(长短时记忆)或GRU(门控递归单元),能够在多个时间步长中持久保存数据 处理可变长度的输入和输出向量的能力 ANN和CNN需要一个固定的输入向量,在这个向量上应用一个函数来产生一个固定大小的输出。NMT将一种语言翻译成另一种语言,源语言和目标语言的单词序列的长度是可变的。 RNN与LSTM或GRU一样如何帮助进行顺序数据处理 ? RNN是一种神经网络,结构中具有循环来保存信息。它们对序列中的每个元素执行相同的任务,并且输出元素依赖于以前的元素或状态。这正是我们处理顺序数据所需要的。 RNN可以有一个或多个输入以及一个或多个输出

Social LSTM 实现代码分析

谁说胖子不能爱 提交于 2020-08-08 15:09:01
----- 2019.8.5更新 实现代码思维导图 ----- ----- 初始原文 ----- Social LSTM最早提出于文献 “Social LSTM: Human Trajectory Prediction in Crowded Spaces”,但经过资料查阅目前暂未找到原文献作者所提供的程序代码和数据,而在github上有许多针对该文献的实现版本代码。 本文接下来的实现代码来自 https://github.com/xuerenlv/social-lstm-tf ,代码语言为Python3,代码大体实现了原论文中 核心原创部分 的模型,包括Vanilla LSTM(没有考虑行人轨迹之间关联性的LSTM)和Social LSTM(使用池化层考虑了行人轨迹之间关联性的LSTM模型)的模型构建、训练和小样本测试的代码,但对横向对比的其他模型、模型量化评估方法等暂未实现。 本文下面将从代码中 矩阵数据和列表(list)数据的维度 细说实现过程和模型的特点。 Vanilla LSTM 模型 训练数据 主要功能代码文件: util.py 数据格式: input_data, target_data = dataLoader.next_batch() # input_data : [batch_size, seq_length, 2] # target_data : [batch