前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >汽车行业用户观点主题及情感分类 一等奖方案

汽车行业用户观点主题及情感分类 一等奖方案

作者头像
大数据技术与机器学习
发布2021-04-22 11:25:05
9080
发布2021-04-22 11:25:05
举报

方案概述:

  • 我们采用pipeline的方式,将这个任务拆为两个子任务,先预测主题,根据主题预测情感极性(ABSA),这两个任务我们都使用深度学习的方式来解决
  • 主题分类是一个多标签分类问题,我们使用BCE来解决多标签问题,我们使用不同的模型不同的词向量(2*4)训练了8个模型,再加上微调的中文BERT,一种九个模型,我们使用stacking的方式在第二层利用LR极性模型融合,得到预测概率,并使用threshold得到最终预测的标签。
  • 基于角度的情感分类是一个有两个输入的多分类问题,我们使用了三种比较新的网络设计和四种词向量再加上微调的BERT一共13个模型,同样我们也用LR来做stacking。

本文全部代码 获取

关注微信公众号 datanlp ,然后回复关键词 文本分类 即可获取

pretrained models:

  • 我们将预训练好的模型放在了下面的链接中,可以直接拿来测试,免去长时间的训练。
  • 链接: https://pan.baidu.com/s/1UDzqKeRIzc01chaj3Ew7AA
  • 提取码: 47e7
  • 其中:
    • backup_polarity.zip:保存了用来预测情感极性的三个模型四种embedding五折共60个checkpoint。请将其backup_polarity里面的各个文件夹放在polarity_level_aspect/目录下。
    • backup_aspect.zip保存了用来预测主题的两个模型四种embedding五折共40个checkpoint。请将backup里面的各个文件夹放在attribute_level/目录下。
    • backup_bert.zip保存了分别用来预测主题和情感极性五折共是十个checkpoint。请将其里面的两个个文件夹放在berrt/glue_data/目录下。并且要将polarity_ensemble_online_submit重命名为polarity_ensemble_online
    • backup_chinese_bert.zip 保存了我们将谷歌开源的中文BERT转为pytorch版本的预训练模型,可以用来做fine tune。请将chinese_L-12_H-768_A-12文件夹放在bert/目录下。
    • backup_embedding.zip 保存了我们使用的embedding, 主要是一个由elmo得到的句子表示。请将backup_embedding下的词向量放在embedding/目录下。

代码框架:

  • dataset/: 存放原始的数据集,以及预处理脚本
  • data/: 存放预处理过的数据集,最终主题的预测以及情感的预测也会存储在这里。
    • train.txt:预处理之后的训练集
    • test.txt: 预处理之后的测试集
    • vocabulary.pkl:词表
    • test_predict_aspect_ensemble.txt:预测主题的结果文件
    • test_predict_polarity_ensemble.txt:预测情感极性的结果文件
    • submit2.py:生成最终的提交结果
    • submit2.csv:最终的提交结果。
  • embedding/: 存储我们处理过的词向量文件以及elmo
    • embedding_all_merge_300.txt, 来自于Chinese-Word-Vectors的mixed-large的Word feature.
    • embedding_all_fasttext2_300.txt, 来自于fasttext
    • embedding_all_tencent_200.txt, 来自于Tencent AI Lab Embedding Corpus
    • embeddings_elmo_ly-1.hdf5, 使用中文elmo得到的句子表示,elmo来自于ELMoForManyLangs 。因为太大,所以我们没有放在代码这里,你可以在百度云链接中的backup_embedding.zip中找到它
  • attribute_level/:运行主题分类的模块, 里面有:
    • w2vName中,0代表merge 词向量, 2 代表使用了elmo(没有用词向量),ft2 代表fasttext词向量, tc代表腾讯词向量。
    • --mode: 运行模式,
    • --model: 训练使用的模型:
    • --w2v: 指定使用的词向量:
    • --use_elmo:是否使用elmo
    • --EPOCHS: 训练轮数
    • --saved: stacking测试时是从头测试,还是直接读取存储好的预测结果
    • --check_dir:训练时指定checkpoint的存储位置
    • --test_dir: 指定测试时读取checkpoint或者预测结果的文件夹位置, 因为做stacking同时读取多个模型,所以可以用指定多个文件夹,用‘#’做分隔
    • 0:代表leave out 训练,
    • 1:代表五折交叉训练, 用于后面的stacking
    • 2: stacking, 利用五折交叉训练好的模型进行预测并stacking。
    • CNN
    • AttA3: 一种使用label attention的RNN模型
    • merge: embedding_all_merge_300.txt
    • fasttext2: fasttext词向量
    • tencent: 腾讯词向量
    • 0 :不使用elmo
    • 2 :只使用elmo,读取embedding/中的elmo的hdf5文件,最终表示和词向量无关。
    • 0 : 读取checkpoint对dev集和测试集进行预测
    • 1 :直接读取存储好的dev集和测试集预测结果
    • attribute_level.py: 主要运行文件,主要接受以下命令行参数:
    • networks2.py:我们实现的模型网络代码文件
    • 保存各个模型的checkpoint的文件夹:命名格式为cp_ModelName_w2vName,
  • polarity_level_aspect: 给定主题的情感分类模块:
    • ab_polarity.py :主要运行文件, 命令行参数类似于attribute_level.py
    • networks.py :模型实现文件
  • utils: 一些代码工具,比如封装数据集类,训练骨架,评测函数等。

One Step:

  • 因为训练模型比较久而且模型比较大,所以我们提供了所有checkpoint对OOF和测试集的预测结果,只需要简单的做一下stacking就可以得到我们提交的最好结果:

最后生成的submit2.csv即可用于提交。

  • 当然如果想要从头复现,可以看下面的说明:

预处理模块:

  • 主要就是分词,分别运行clean_data.py, 和clean_test.py文件在data文件夹中生成预处理好的train.txt和test.txt
  • 不过我们已经提供了预处理好的文件,所以不需要运行。
  • 需要注意的是,如果你重新运行了分词程序,那么你生成的数据集的词表可能和我们提供的词向量的词表不一致,所以你必须重新运行prepare_w2v.py里面的prepare_w2v函数构建新的词表和词向量。

运行主题分类模块:

训练阶段:(由于训练时间比较长,你可以直接跳到第三步加载我们预训练好的模型)

cd attribute_level
  1. 至此我们在各对应文件夹中共得到了40个checkpoint。
  2. 微调Bert阶段:
    • 我们修改了一个开源的pytorch版本的BERT, 并在本数据集上fine tune了谷歌放出来的中文BERT
    • 首先我们我们将数据集按五折处理成tsv格式,放在bert/glue_data下,(我们已经帮你处理过了)
    • 下载预训练的BERT模型,运行以下命令行完成转换:
  • fine-tune之后会在各自的fold的文件夹下得到对应的预测结果oof_test.npy
  1. 使用预训练好的模型:
  • 以上两步的所有checkpoint我们都放在了百度云链接里,下载解压之后,放入对应的文件目录下即可,这样可以免去长时间的训练。
  • 注意文件夹的对应关系
  • 很遗憾我们没有保存Aspect的BERT checkpoint, 我们只保存了它的预测结果,因为在训练过程中,我们已经预测过了。
  • load 模型时, 我们都是在GPU上读取和保存的,我们没有在CPU上进行过测试,所以如果load有问题可以自行修改load处语法,或者联系我们。
  1. 预测和stacking阶段:
  • 不管是从头训练还是直接下载,我们现在已经有了训练好的模型,我们可以进行预测。
  • 我们首先用BERT模型进行预测,事实上我们在每个fold训练时已经将预测结果保存为npy,我们现在只需要将五折结合起来。

最终预测的主题结果, 存放在data/test_predict_aspect_ensemble.txt中。

运行情感分类模块:

  1. 训练阶段:(由于训练时间比较长,你可以直接跳到第三步加载我们预训练好的模型)
  • 和主题分类类似:
  • 最终我们得到3种网络4种embedding 在5折下的60个checkpoint保存在对应的文件夹中。
  1. 微调Bert阶段:

和主题分类类似,但是需要一个aspect预测的结果作为输入。运行data文件夹下的build_test_for_predict.py脚本后, 将生成的test.tsv放在bert/glue_data/polarity_ensemble_online/下即可。

设置环境变量:

在bert/文件夹下运行下面的命令进行fine-tune (5cv): (需要一块8GB显存的GPU)

这样我们最终在data文件夹下生成了test_predict_polarity_ensemble.txt文件,里面即为预测结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习入门与实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方案概述:
  • pretrained models:
  • 代码框架:
  • One Step:
  • 预处理模块:
  • 运行主题分类模块:
  • 运行情感分类模块:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档