山东大学软件工程应用与实践----SENTA代码分析(十二)

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模型

 总结:

  1. 首先从模型架构来看,相较于BERT,前一个模型有所改动,它在BERT的基础上加入了K-Encoder,实现了知识信息与token原始语义信息的融合,而后一个模型的架构基本没有什么变动。
  2. 从输入数据来看,相比较于BERT的纯文本数据,仍然是前一个模型的输入数据变化较大,它在纯文本数据的基础上,还需要提取出其中的实体、并通过知识嵌入算法将其变为向量,输入的数据既有token embeddings也有entity embeddings,而对于后一个ERNIE模型,输入数据仍然还是纯文本的生成的token,只不过需要先通过词法分析工具对文本数据进行不同粒度的切分。
  3. 从训练任务上来看,为了使得模型能够学到更多的知识信息,两个模型都额外加入了预测mask实体的任务,不过前者是根据token以及其它实体,从一些给定的实体序列中找出概率最大的那个,而后者则是直接根据上下文的token来预测实体对应的每个token

    该系列文章还对senta源码中某些较为重要的代码进行了一定程度的分析

    这几个月以来 我查阅了网上各种的资料 得来的代码的分析 可能有许多不足之处 但也进步了许多 收获了许多 成长了许多 了解了很多有关数据分析 情感分析 数据处理的知识 也大概的学会了整体的去看待一个项目总体的框架,先把握了整体框架 再于细节处深入研究。

      该系列对senta进行分析的博客就此告一段落!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Senta是一款百度开源的情感分析系统。 情感分析旨在自动识别和提取文本中的倾向、立场、评价、观点等主观信息。它包含各式各样的任务,比如句子级情感分类、评价对象级情感分类、观点抽取、情绪分类等。情感分析是人工智能的重要研究方向,具有很高的学术价值。同时,情感分析在消费决策、舆情分析、个性化推荐等领域均有重要的应用,具有很高的商业价值。 近日,百度正式发布情感预训练模型SKEP(Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis)。SKEP利用情感知识增强预训练模型, 在14项中英情感分析典型任务上全面超越SOTA,此工作已经被ACL 2020录用。 为了方便研发人员和商业合作伙伴共享效果领先的情感分析技术,本次百度在Senta中开源了基于SKEP的情感预训练代码和中英情感预训练模型。而且,为了进一步降低用户的使用门槛,百度在SKEP开源项目中集成了面向产业化的一键式情感分析预测工具。用户只需要几行代码即可实现基于SKEP的情感预训练以及模型预测功能。 SKEP SKEP是百度研究团队提出的基于情感知识增强的情感预训练算法,此算法采用无监督方法自动挖掘情感知识,然后利用情感知识构建预训练目标,从而让机器学会理解情感语义。SKEP为各类情感分析任务提供统一且强大的情感语义表示。 百度研究团队在三个典型情感分析任务,句子级情感分类(Sentence-level Sentiment Classification),评价对象级情感分类(Aspect-level Sentiment Classification)、观点抽取(Opinion Role Labeling),共计14个中英文数据上进一步验证了情感预训练模型SKEP的效果。实验表明,以通用预训练模型ERNIE(内部版本)作为初始化,SKEP相比ERNIE平均提升约1.2%,并且较原SOTA平均提升约2%。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值