Part0 简介·
本文是笔者为了准备暑期实验室实习而写的NLP入门学习纲要,学习的内容和分类主要来自老师的建议和这篇原北航学姐的文章:https://mp.weixin.qq.com/s/49k1NLxfTSXK185RCoASxA
学习过程中参考了李沐老师的课程,本文仅作为一个纲要梳理学习的大致内容,以及记录一些实践练习收获。
用以下两个博客记录具体学习内容:
完成了一系列的代码实践,放在一个仓库里,作为NLP武器库:nlpkiller,基本实现了本文提到的算法,大多参考或直接复制自沐神的代码。
时间节点-简要记录·
4.13-4.27·
-
学习了动手学习深度学习前8章除了现代CNN之外的内容,大致有pytorch基本应用,mlp,cnn,rnn等。
-
编写了nn框架 nnplayer
-
学习d2l代码实现了基本的rnn语言模型,包含预处理与模型训练预测。
4.28-5.11·
- 学习了动手学习深度学习第9章内容,熟悉GRU,LSTM
5.12-5.25·
- 学习动手学习深度学习第10章内容,熟悉了注意力机制
- 结合软件杯的摘要生成任务,学习了相关的一些seq2seq语言模型,了解了一种先抽取后生成的摘要生成模型
- 熟悉了ACT实验室的GPU集群的用法,并在上面完整训练了2个端到端模型并做了测试,在华为云服务器上部署了摘要生成模型,提供了接口
5.26-6.8·
- 进一步学习注意力机制和transformer
- 结合摘要生成题目进行相关实践
6.8-7.1·
复习准备考试,没有学习
7.1-8.17·
-
完成了中国软件杯智能创作平台的比赛
-
学习了常见的摘要抽取算法:
-
TextRank
-
基于Bert的句子编码+聚类/DGCNN
-
-
学习了常见的NLP数据预处理方法,一般来说就是
-
数据获取(爬虫/广泛搜索)
-
数据清洗(去除一些句子/字词,替换一些句子/字词)
-
数据增强(同/反义词替换,随机替换词/句,随机去除词语)
-
分词(jieba,Bert分词器),去除停用词
-
-
学习了目前比较流行的标题/摘要生成方式,发现很少那种长文本-长文本的数据集。最终采用基于T5-Pegasus的预训练模型对我们的数据集进行调整的方式。学习了利用FastT5对模型进行了onnx转换和量化压缩。
-
完整的完成了一个NLP项目,从模型设计训练,模型压缩部署,后端构建都有所收获
8.18-8.27·
- 复习了CNN,RNN。补充了RNN、注意力机制的代码实现和阅读理解
- 学习了编码器-解码器架构
- 学习预训练相关知识:Word2Vec,GloVe,BERT,并简单学习和运行了代码
Part1 基础原理·
todo·
- 词向量
- Word2Vec
- GloVe
- 子词嵌入:fastText,字节对编码
- CNN
- RNN
- LSTM
- GRU
- BERT(简要了解GPT、ELMo)
神经网络·
词向量·
Word2Vec·
有跳元模型和连续词袋模型两种,都得到了词语作为中心词和上下文词时的向量
Glove·
对跳元模型的损失函数进行修改,得到了融合全局特征的词向量
CNN·
总的来说CNN的知识包含:
- 卷积操作(实际用起来是互相关运算),其中会有填充,步幅等内容,多输入通道会汇合成一个输出通道(求和)
- 汇聚(池化),其中也有填充,步幅等内容,每个输入通道单独有一个输出通道
- 各种成熟的CNN网络结构
RNN·
基本的RNN就是对MLP加入了隐变量输出H,同时对时间步进行循环,对隐变量进行预测和更新。
LSTM·
包含输入门,遗忘门,输出门,候选记忆元,隐状态等。
BERT·
通过使⽤预训练的Transformer编码器,BERT能够基于其双向上下⽂表⽰任何词元。
Part2 经典模型与技巧·
todo·
文本分类·
- MLP
- CNN
- RNN
- LSTM
- Attention
- Transformer
文本分类·
MLP·
此部分要求手写,不用现成模型。为了学习多层感知机,以及复习神经网络相关内容,笔者在参考一些博客和源码后,实现了一个微型深度学习框架,地址如下:https://github.com/BUAADreamer/nnplayer,使用方式基本和pytorch类似,之后有时间会不断完善,作为学习各种深度学习模型的一个实践方式,主要使用了numpy库进行矩阵计算和操作,采用面向对象的方式进行编写。目前使用这个框架实现基本的多层感知机demo代码如下:
1 | import nnplayer as npl |
Attention·
注意力汇聚,注意力评分函数,Bahdanau注意力,多头注意力,自注意力和位置编码,Transformer