2021SC@SDUSC
本篇博客就是该系列的最后一篇博客了,我将把前面几篇博客所讲的内容进行整合,梳理一下senta的整体架构和之前分析的几个训练模型
Senta 代码结构
Senta 项目的代码结构以及简介如下, 本文重点介绍如何利用 Fluid Python API 完成模型的构建和训练,关于如何利用Fluid C-API 进行模型的在线部署,可以参考该项目的说明文档。
Senta
├── C-API/ # 模型预测C-API接口
├── data/ # 数据集
│ ├── test_data/
│ │ └── corpus.test
│ ├── train_data/
│ │ └── corpus.train
│ └── train.vocab
├── eval.sh # 模型评价脚本
├── infer.sh # 模型预测脚本
├── nets.py # 本例中涉及的各种网络结构均定义在此文件中,│ # 若进一步修改模型结构,请查看此文件
├── README.md # 说明文档
├── sentiment_classify.py # 情感倾向分析主函数,包括训练、预估、预测 │ # 部分
├── train.sh # 模型训练脚本
└── utils.py # 定义通用的函数,例如加载词典,读入数据等
模型概览
nets.py 中包含以下几个模型:
• bow_net:Bow(Bag Of Words) 模型,是一个非序列模型。使用基本的全连接结构。
• cnn_net:浅层 CNN 模型,是一个基础的序列模型,能够处理变长的序列输入,提取一个局部区域之内的特征。
• gru_net:单层 GRU 模型,序列模型,能够较好地解序列文本中长距离依赖的问题。
• lstm_net:单层 LSTM 模型,序列模型,能够较好地解决序列文本中长距离依赖的问题。
• bilstm_net:双向单层 LSTM 模型,序列模型,通过采用双向lstm结构,更好地捕获句子中的语义特征。百度 AI 平台上情感倾向分析模块采用此模型进行训练和预测。
其中我们简要分析了基于bi-LSTM的情感分类模型
图3展示了基于bi-LSTM的情感分类模型。它是在大规模语料上有显著效果的经典深度学习模型。它的特点是能够提取语句中词语顺序相关的信息,考虑词与词之间较长上下文的依赖。
我们还分析了senta中几个重要的数据预处理模型
Bert模型
BERT模型采用了目前流行的特征提取器Transformer,同时还实现了双向语言模型,采众家之长使得它具有更好的性能——在11项NLP任务中都刷新了性能表现记录。不过BERT也还有可以改进的地方,比如说BERT采用的是原始的Transformer,Transformer固然强大,不过现在已经也有了一些更强的改进版;另外就是BERT的Mask机制,虽然通过它可以实现双向语言模型的训练,但是这样会导致预训练和在下游任务上进行微调时的不一致
Robert模型
RoBERTa 模型是BERT 的改进版(A Robustly Optimized BERT,即简单粗暴称为强力优化的BERT方法
)。
在模型规模、算力和数据上,与BERT相比主要有以下几点改进:
- 更大的模型参数量(论文提供的训练时间来看,模型使用 1024 块 V100 GPU 训练了 1 天的时间)
- 更大bacth size。RoBERTa 在训练过程中使用了更大的bacth size。尝试过从 256 到 8000 不等的bacth size。
- 更多的训练数据(包括:CC-NEWS 等在内的 160GB 纯文本。而最初的BERT使用16GB BookCorpus数据集和英语维基百科进行训练)
ernie模型
总结:
- 首先从模型架构来看,相较于BERT,前一个模型有所改动,它在BERT的基础上加入了K-Encoder,实现了知识信息与token原始语义信息的融合,而后一个模型的架构基本没有什么变动。
- 从输入数据来看,相比较于BERT的纯文本数据,仍然是前一个模型的输入数据变化较大,它在纯文本数据的基础上,还需要提取出其中的实体、并通过知识嵌入算法将其变为向量,输入的数据既有token embeddings也有entity embeddings,而对于后一个ERNIE模型,输入数据仍然还是纯文本的生成的token,只不过需要先通过词法分析工具对文本数据进行不同粒度的切分。
- 从训练任务上来看,为了使得模型能够学到更多的知识信息,两个模型都额外加入了预测mask实体的任务,不过前者是根据token以及其它实体,从一些给定的实体序列中找出概率最大的那个,而后者则是直接根据上下文的token来预测实体对应的每个token
该系列文章还对senta源码中某些较为重要的代码进行了一定程度的分析
这几个月以来 我查阅了网上各种的资料 得来的代码的分析 可能有许多不足之处 但也进步了许多 收获了许多 成长了许多 了解了很多有关数据分析 情感分析 数据处理的知识 也大概的学会了整体的去看待一个项目总体的框架,先把握了整体框架 再于细节处深入研究。
该系列对senta进行分析的博客就此告一段落!