NLP模型应用之一:基础知识
NLP 模型应用之一:基础知识
#自然语言处理
引入
2018 年底发布的 BERT 模型和 2019 年初发布的 GPT-2
模型,开始挑战人类的语言处理能力。二者都基于之前介绍过的 Transformer
基础模型。
对模型的研究有几个层次:研究基础模型、扩展模型、应用模型
研究基础模型 我们熟知的卷积神经网络 CNN,循环神经网络
RNN,Transformer 模型,残差网络 ResNet
等等,都是底层模型,它们是神经网络应用的基础。
扩展模型
基础模型需要经过适配和扩展,才能应用到更多领域。如图像识别一开始主要支持图片分类,而后扩展到人脸识别、图像分割等等领域。在自然语言处理领域
Transformer
模型最初被用于解决翻译问题,而后扩展到解决问答、判断一致性、完型填空等问题之中,比如
BERT 通过 Mask 遮蔽技术优化了自然语言处理中的更多问题的解决方法。
应用模型
再上层是针对某一个领域的具体应用和细化,调用模型解决问题并调优模型。例如使用模型判断正常和病变细胞、预测股票趋势,使用预训练好的语言模型撰写某种类型的文章……这些大多是由工程师完成的工作。从算法角度看 ...
Transformer-XL框架
Transformer-XL 框架
1 引入
Transformer-XL 超长上下文的注意力模型,出自 CMU 和 Google Brain 在
2019 年 1 月发表的论文:《Transformer-XL: Attentive Language Models
Beyond a Fixed-Length Context》。其中 XL 是 extra long
的缩写,意为额外长度。论文地址:https://arxiv.org/pdf/1901.02860.pdf
先简单举例 Transformer XL 与 Transformer 的区别。比如有以下数据:
“小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。”
如果把序列长度设为十个字,代入模型时数据被切分为:
“小说是以刻画人物形象”(序列一)
“为中心,通过完整的故”(序列二)
……
在训练第二个序列时,它的意思是不完整的,Transformer
计算第二个序列中的第三字“心”时只能通过前两个字“为中”作为输入计算,而
Transformer-XL 可以把序列一中的十个字同时作为输入。
切分,尤 ...
国产的自然语言处理框架ERNIE
国产的自然语言处理框架 ERNIE
看到题目是否引发一些刻板印象?国产的自然语言处理,主要是用于处理中文?有没有用到最前沿的技术?是不是只提供服务,里面是黑盒?是否全面开源并提供模型?平台是否通用?本文将为您一一解答。
ERNIE 是继 BERT,ELMo 之后又一个以芝麻街人物命名的自然语言模型。ERNIE
全称 Enhanced Language Representation with Informative Entities。
原理
ERNIE 的结构类似 BERT 框架,或可视为 BERT
的延续。也是通过海量无标签数据预训练模型,并在特定领域使用 fine-tuning
调优,同样也使用了在序列中插入符号,以适配不同的训练任务,以及 Mask
遮蔽部分数据的方法。
从全称可以看出,它最初主要致力于在自然语言处理中加入关于实体的信息。在
ERNIE 1.0 阶段,着重改进了遮蔽策略,BERT 遮蔽语料中的词,而
ERNIE
把短语和一些专有名词也作为遮蔽的对象。之前的自然语言模型都是国外模型,因为分词有一定难度,所以处理中文时只是简单地以字为单位。可以想见,引入了词和短语后, ...
定向写作模型CTRL
定向写作模型 CTRL
介绍
CTRL 全称为 Conditional Transformer Language
有条件的文本生成模型,它始于 Salesforce 在 2019 年发布的论文《A
Conditional Transformer Language Model for Controllable
Generation》,该模型用于定向写作。论文地址如下:https://arxiv.org/pdf/1909.05858.pdf
这两年非常流行的 BERT 和 GPT-2 都基于 Transformer
模型,虽然代码量不大,逻辑也并不复杂,但是极大规模的数据量、训练强度和模型容量,以及利用无监督文本建模,使模型的能力空前强大,在一些领域已超过人类水平。
GPT-2
使用各种类型的文章训练模型,包括散文、小说、新闻、科技文章,用它写作的文章也综合了各种风格。如果想生成“金庸风格”的小说,则需要用所有金庸先生的小说重新训练模型;或者从原模型中提取特征构造新模型;也可以在原有模型基础上
fine-tuning。如需撰写新闻稿,则需要另行训练。
GPT-2
模型根据文章开头的内容,继 ...
Transformer框架
123name_ch: 注意力就是你所需要的name_en: Attention is All you Needpaper_addr: https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
Transformer 框架
1 读后感
应该是本世纪最重要的论文之一,提出 Transformer
模型,基于注意力机制,避免了递归和卷积,相比之前模型,训练速度快,模型效果好。
2 摘要
Transformer 是 Google 团队在 2017
年提出的自然语言处理(NLP)框架,也是截至目前,最主流的 NLP
框架。BERT、GPT-2 都是基于该模型的变形和扩展。
Transformer 的具体算法在论文《Attention Is All You
Need》中描述。论文中展示了该模型的训练准确性高于之前所有模型,训练时间明显低于之前的模型,在训练集内容较少时训练效果也很好。它使用8
个 P100 的 GPU 训练 12 小时即可生成基本翻译模 ...
Seq2Seq与Attention
Seq2Seq 与 Attention
自然语言处理是典型的序列问题,其底层算法在最近几年迅速发展,比如去年年底发布的
BERT 在 11 项自然语言处理任务中表现卓越,今年 GPT-2
生成文本(写作)的水平也有了显著提高。
目前这些最先进的技术都基于 Transformer 模型,该模型从
RNN,LSTM,Seq2Seq,Attention,ConvS2S,Transformer
一步步进化而来,还涉及自然语言处理的相关知识,包含的知识点太多,无法一次说清。笔者将其分成几篇,从其进化过程逐步引入。之前已经介绍过
RNN 及 LSTM,本篇将介绍 Seq2Seq 和 Attention 算法。
翻译功能
深度学习中的自然语言处理常用于自动翻译、语言识别、问答系统、提取概要、写作等等领域。
其中自动翻译是一项非常典型的应用,在翻译过程中,输入和输出的词汇个数可长可短,不能一一对应,不同语言词汇顺序又可能不同,并且还有一词多义,一义多词,词在不同位置含义不同的情况……是相对复杂的自然语言处理问题。
先来看看人怎么解决翻译问题,面对一种完全不认识的语言,人把句子分解成词,通过查字典的方式 ...
Pytorch_LSTM与GRU
Pytorch_LSTM 与 GRU
RNN 循环网络在序列问题处理中得到了广泛的应用。但使用标准版本的 RNN
模型时,常遇到梯度消失 gradient vanishing 和梯度爆炸 gradient explosion
问题。
RNN 的缺点
RNN
的梯度消失和梯度爆炸不同于其它网络,全连接网络和卷积网络每一层有不同参数,而
RNN 的每个处理单元 Cell(处理单个序列元素的操作称为处理单元
Cell)共用同一组权重矩阵 W。在上一篇介绍 RNN
网络算法时可以看到,处理单元之间是全连接关系,序列向前传播的过程中将不断乘以权重矩阵
W,从而构成了连乘 Wn,当 W<1 时,如果序列很长,则结果趋近
0;当 w>1
时,经过多次迭代,数值将迅速增长。反向传播也有同样问题。
梯度爆炸问题一般通过“梯度裁剪”方法改善,而梯度消失则使得序列前面的数据无法起到应有的作用,造成“长距离依赖”(Long-Term
Dependencies)问题,也就是说 RNN 只能处理短距离的依赖关系。
这类似于卷积神经网络在处理图像问题时加深网络层数,无法改进效果。尽管理论上可以通过调参改 ...
Pytorch_循环神经网络RNN
Pytorch_ 循环神经网络 RNN
RNN 是 Recurrent Neural Networks
的缩写,即循环神经网络,它常用于解决序列问题。RNN
有记忆功能,除了当前输入,还把上下文环境作为预测的依据。它常用于语音识别、翻译等场景之中。
RNN 是序列模型的基础,尽管能够直接调用现成的 RNN
算法,但后续的复杂网络很多构建在 RNN 网络的基础之上,如 Attention
方法需要使用 RNN 的隐藏层数据。RNN
的原理并不复杂,但由于其中包括循环,很难用语言或者画图来描述,最好的方法是自己手动编写一个
RNN 网络。本篇将介绍 RNN 网络的原理及具体实现。
序列
在学习循环神经网络之前,先看看什么是序列。序列 sequence 简称
seq,是有先后顺序的一组数据。自然语言处理是最为典型的序列问题,比如将一句话翻译成另一句话时,其中某个词汇的含义不仅取决于它本身,还与它前后的多个单词相关。类似的,如果想预测电影的情节发展,不仅与当前的画面有关,还与当前的一系列前情有关。在使用序列模型预测的过程中,输入是序列,而输出是一个或多个预测值。
在使用深度学习模型解决序列问题 ...
Pytorch全连接网络
Pytorch 全连接网络
#Pytorch
本篇开始学习搭建真正的神经网络,前一部分讨论深度学习中预处理数据的基本流程;后一部分构建了两种全连接网络,用三种不同方案拟合时序数据;并在例程中详细分析误差函数,优化器,网络调参,以及数据反向求导的过程。
数据预处理
本篇使用航空乘客数据 AirPassengers.csv,其中包括从 1949-1960
年每月旅客的数量,程序则用于预测未来几年中每月的旅客数量,数据可从以下
Git 项目中下载。
https://github.com/aarshayj/analytics_vidhya/blob/master/Articles/Time_Series_Analysis/AirPassengers.csv
1.读取数据
首先,引入必要的头文件,并从文件中读入数据:
123456789101112import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inlineimport torchimport torch.nn as nnfrom to ...
Pytorch_数据基础
Pytorch_ 数据基础
#Pytorch
机器学习需要掌握数据处理工具
Pandas、Numpy,同理,深度学习也需要掌握相应的数据处理工具,在 Pytorch
中数据存储在张量 Tensor 和变量 Variable
之中,本篇将介绍它们的基本用法以及与之相关的常用函数。
掌握必要的基础知识,让后期看代码更加流畅,避免陷入太多细节。
Tensor 张量
Tensor 用于表示矩阵(多维数据),类似 Numpy 的
ndarray,不同的是,可以使用 GPU 加速。
1.生成张量
1import torch
用 Tensor 方法将其它格式数据转换成张量:
12345678a = torch.Tensor([[1,2],[3,4],[5,6]])print(a)print(a.size())# 输出结果:# tensor([[1., 2.],# [3., 4.],# [5., 6.]])# torch.Size([3, 2])
另外,也可以使用 torch.zeros(),torch.randn() 生成张量。
2.修改张量
用赋值的方法即可修改张量 ...