BERT文本分类实践Keras

    项目中,BERT文本二分类或者多分类,总感觉效果难言理想的样子。使用了keras-bert包。

概述:

        问题一: tf版bert分类似乎太重,训练、预测很不方便,要定义类什么的,很难看。

        问题二: 使用bert分类,如果文本太长,速度超级慢,而且预训练好的简版模型微调最大长度只有512,两个句子时候也一样,

                     超级坑,所以如果你想用它来直接跑什么中国法研杯比赛,不行的。

        问题三: 感觉bert就是只能提取某些层的向量,分类,对比相似度什么的,没有想象中的那么神秘,也就是一个多层的多头注                         意力机制,好像不能作生成式,即便有,那也是阅读理解抽取,至句子生成、对话什么的我没有看到,现在我能找的                       似乎就是从候选集中对比相似度排序。

实验1:

        对比了一下,不微调bert,bert+bilstm一层,bert+bilstm三层,bert+bilstm一层+attention等三个模型的训练-验证-测试,用的数据集是微众银行文本相似度比赛数据,效果并不明显,大约都能达到78%-79%的测试准确率。

        代码在github:https://github.com/yongzhuo/nlp_xiaojiang/blob/master/ClassificationText/bert/keras_bert_classify_bi_lstm.py

        不微调bert,bert+textcnn,bert+rcnn,bert+avtcnn等三个模型的训练-验证-测试,用的数据集是微众银行文本相似度比赛数据,效果比rnn要好些,大约能达到80%的准确率,可能原因是在bert层就是主要用的attention,序列信息已经被破坏了。

        代码在github:https://github.com/yongzhuo/nlp_xiaojiang/blob/master/ClassificationText/bert/keras_bert_classify_text_cnn.py

风险:

        总感觉有些不靠谱,因为看论文或者其他博客,说的都是取最后一层bert的[CLS]这里作为输出,但是我实验发现并不是这样子,反而是取某一层的所有输出好点。不知道怎么回事,如果你们知道,欢迎给我留言,谢谢。

实验2:

      项目在github:https://github.com/yongzhuo/Keras-TextClassification

      分别有bert、char、word等embedding,实验中的数据是baidu_qa_2019corpus的17个类别的140多万语料。实验中传统的text-cnn、rnn、rcnn等能达到50%-70%的准确率,bert-fineture+全连接[CLS这里生效了]能达到80%多的准确率。当然bert-fineture+其他模型(text-cnn、text-rnn)啊什么的,可以发现效果明显提升,收敛速度加快。从实用感觉来说,bert还是比较有用的。

希望对你有所帮助!

        

发布了96 篇原创文章 · 获赞 72 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/rensihui/article/details/90648291
今日推荐