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

2021SC@SDUSC

这篇文章分析一下senta的模型训练和预测以及其进行

数据准备

数据格式

训练数据格式是制表符分隔值 (tsv) 的格式,每一行代表一条训练数据,以制表符作为分割符分为两个字段。第一个字段是情感倾向,取值为 0 或 1,分别代表消极和积极情感倾向;第二个字段是文本的内容。文本已经经过分词处理,词与词之间用空格分隔。示例训练样本如下:

 测试数据以同样的方式进行分隔,但在情感类别标签方面和训练数据有一些差别。测试数据中情感倾向共有三类,取值为 0, 1, 2, 分别代表消极,中性,积极。在模型的预测阶段,我们利用模型输出样例为积极和消极的概率,如果用于二分类,只要积极的概率比消极的概率高,就归入积极;而如果用于三分类,则在中间加入了中性,分类的依据是,样例为积极的概率小于 45% 则为消极,大于 55% 则为积极,介于二者之间则为中性,用户也可以根据需要调整中型情感的概率阈值。示例测试样本如下所示:

训练数据词典构建

因为深度学习模型的需要,需要把每一个词对应地转化为一个整数,为此要根据训练数据构建一个词典。而且还可以根据词典对词典的大小进行限制。这里使用的词典文件格式非常简单,每行代表词典中的一个词。以下是词典的示例:

喜欢

脏兮兮
...

注:我们在data目录下,提供了示例词典数据,详见 data/train.vocab.

关于词典构建的功能,参见 utils.py 中的 prepare_data(data_path, word_dict_path, batch_size, mode) 函数,词典加载的功能,参见 utils.py 中的 load_vocab(file_path) 函数。

使用自定义数据

因为实际使用的数据比较大,github 项目中仅自带了一份小的示例数据,如果需要使用自定义的数据, 将训练和测试需要用的语料处理成符合上述要求的格式,存放为 data/train_data/corpus.train 和 data/test_data/corpus.test 即可。

模型训练与预测

模型的训练,评价和预测都集成在sentiment_classify.py 文件里,默认使用的模型是 bilstm_net 双向 LSTM 模型。默认使用CPU进行模型训练,但还可以支持使用 GPU, 通过 --use_gpu True 打开。另外,训练还支持并行,通过 --is_parallel参数设置。

具体支持的参数可以通过python sentisentiment_classify.py --help 查看。

模型训练

python sentiment_classify.py \
    --train_data_path ./data/train_data/corpus.train \  # 训练数据路径
    --word_dict_path ./data/train.vocab \ # 词典路径
    --mode train \  # train模式
    --model_path ./models    # 模型保存路径

使用 GPU 的训练脚本

export CUDA_VISIBLE_DEVICES=0,1    # 指定可用的 GPU 序号
python sentiment_classify.py \
    --train_data_path ./data/train_data/corpus.train \ # 训练数据路径
    --word_dict_path ./data/train.vocab \  # 词典路径
    --mode train \  # train模式
    --model_path ./models  # 模型保存路径
    --use_gpu True  # 使用 GPU 训练模型
    --is_parallel True   # 使用并行

执行后可以看到如下的输出:一共对训练语料进行了 10 次迭代,并且输出了在测试数据集上的准确率和平均 cost.

[train info]: pass_id: 0, avg_acc: 0.821615, avg_cost: 0.388542
[train info]: pass_id: 1, avg_acc: 0.960837, avg_cost: 0.122814
[train info]: pass_id: 2, avg_acc: 0.987280, avg_cost: 0.052349
[train info]: pass_id: 3, avg_acc: 0.994591, avg_cost: 0.024470
[train info]: pass_id: 4, avg_acc: 0.997796, avg_cost: 0.012553
[train info]: pass_id: 5, avg_acc: 0.998197, avg_cost: 0.008723
[train info]: pass_id: 6, avg_acc: 0.999599, avg_cost: 0.003929
[train info]: pass_id: 7, avg_acc: 0.999700, avg_cost: 0.002423
[train info]: pass_id: 8, avg_acc: 0.999900, avg_cost: 0.001672
[train info]: pass_id: 9, avg_acc: 0.999900, avg_cost: 0.001001

也可以直接使用目录下的 train.sh 根据需要进行修改。

模型评价

python sentiment_classify.py \
    --test_data_path ./data/test_data/corpus.test \   # 测试数据路径
    --word_dict_path ./data/train.vocab \    # 词典路径
    --mode eval \   # eval模式
    --model_path ./models/epoch9/    # 预测模型路径

可以看到类似如下的输出

[test info] model_path: ./models/epoch9/, class2_acc: 0.828402, class3_acc: 0.710000

说明模型能够完成情感分类任务,只是因为示例数据集太小,过拟合比较明显,在训练数据集上准确率可以达到 99.9%, 而测试数据集上的二分类准确率只有 82.8%. 用户可以通过使用自定义的更大的数据集,以及调整模型超参数以获得更好的效果。

模型预测

python sentiment_classify.py \
    --test_data_path ./data/test_data/corpus.test \   # 测试数据路径
    --word_dict_path ./data/train.vocab \    # 词典路径
    --mode infer \     # infer模式
    --model_path ./models/epoch9/    # 预测模型路径

即可执行预测,可以得到类似如下的输出

predict label: 0, pos_prob: 0.004343, neg_prob: 0.995657
predict label: 2, pos_prob: 0.798888, neg_prob: 0.201112
predict label: 0, pos_prob: 0.000564, neg_prob: 0.999436
predict label: 0, pos_prob: 0.024923, neg_prob: 0.975077
predict label: 2, pos_prob: 0.999526, neg_prob: 0.000474
predict label: 2, pos_prob: 0.994914, neg_prob: 0.005086
predict label: 0, pos_prob: 0.065424, neg_prob: 0.934576
predict label: 0, pos_prob: 0.000119, neg_prob: 0.999881
predict label: 0, pos_prob: 0.000709, neg_prob: 0.999291
predict label: 2, pos_prob: 0.986198, neg_prob: 0.013802
.......

可以观察模型对于每一个样例的预测结果和详细情况。

 

 

 

 

这篇博客主要介绍了一下senta模型的数据预测以及分析 下一篇博客继续进行分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值