情感分类是指根据文本所表达的含义和情感信息将文本划分成褒扬或者贬义的两种或者几种类型,是对文本作者情感倾向、观点或者态度的划分,有时也称为倾向性分析(opinion analysis)。【1】在电商领域,情感分类能够帮助识别用户的情感倾向,帮助我们优化服务和用户体验,应用场景包括评价情感分类,客服对话中的情感分析,评价排序等。
情感分类方法按照机器学习方法的划分,可以分为监督学习,半监督学习,以及非监督学习【1】。我们主要聚焦在监督学习方法,即基于标注文本的机器学习方法。监督方法,包括传统机器学习方法,比如SVM或者决策树方法,优点是方法简单,不足是需要做特征工程,抽取离散文本特征比如n元语义(n-gram);最近比较火的是基于神经网络或者深度学习方法,比如text-cnn,text-rnn,或者更复杂的网络结构。
中文文本分类一个挑战就是中文语料的匮乏,为了克服这一问题,我们可以采用半监督学习方法比如协同学习(co-training,利用标注的英文数据和未标注的中文数据进行训练),也可以利用迁移学习方法(transfer-learning)。迁移学习是深度学习领域解决的数据匮乏问题的主要方法,通过借助其他训练任务的数据,来预训练(pre-training)网络或者进行多任务学习(multi-task learning)来改善当前任务的模型效果。迁移学习充分利用不同学习任务的共享信息,同时考虑了当前任务的特殊性。
BERT是google最近推出的自然语言处理中深度特征表示(character representation)的通用模型。借助BERT,我们在多个自然语言处理任务中都取得了突破性的进展。BERT是一个庞大的网络,训练过程是一个技术活,而且耗费资源,但是借助google预训练好的模型,我们进行迁移学习,来改善我们学习任务,包括情感分类,命名体识别(NER)等。
接下来详细介绍我们团队最近在利用bert进行情感分类的实践。步骤如下
1)下载bert源码:
git clone https://github.com/google-research/bert
2)下载google预训练好的中文模型
3)准备分类情感数据,BERT要求输入数据的格式为(制表符\t分割):
文本id A分句 B分句 情感标签
具体实例为:
91777 开关机的按键很不合适 按不下去 1
4)配置分类任务的Processor, 可以参考已有的Processor类ColaProcessor
5)修改执行shell run.sh:
python run_classifier.py \
--task_name=s6 \ # 任务名
--do_train=true \ # 是否训练,训练选true,预测选false
--do_eval=true \ # 是否进行验证
--do_predict=true \ # 是否进行预测
--data_dir=${MY_DATASET} \ # 指定输入数据集,train.csv. val.csv, test.csv 分别用于训练,验证和测试
--vocab_file=${BERT_BASE_DIR}/vocab.txt \ # 词典文件
--bert_config_file=${BERT_BASE_DIR}/bert_config.json \ # 模型配置文件
--init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \ # bert模型文件
--max_seq_length=128 \ # 文本序列最大长度
--train_batch_size=32 \ # batch_size
--learning_rate=5e-5 \ # 学习率,因为是进行fine-tuning,所以设定的学习率较小
--num_train_epochs=2.0 \ # epoch个数,2-3个epoch足够
--output_dir=./logs/ # 结果数据路径
6) 进行训练
sh run.sh
最终我们训练出来的结果如下(以fasttext模型的训练结果作为baseline):
method | Test F1
---------------------
BERT | 90.7%
Fasttext | 89.6%
-----------------------
我们发现利用bert预训练+fine-tuning的方法在我们的情感分类任务上f1值比baseline模型提升1.1%,确实提升了模型泛化能力。以上只是demo,更细致的结果待续。
综上所述,情感分类是一种重要的文本分类任务,它在电商领域能够帮助我们改善用户体验和服务。基于bert的迁移学习方法,能够帮助我们显著优化情感分类任务的泛化能力,是未来我们线上服务的候选模型之一(大型模型部署环节还没有打通,主要是效率跟不上)。
参考:
【1】宗成庆, 统计自然语言处理,第二版,2017
【2】Devlin et.al.,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, arxiv.org:1810.04805, 2018.
【3】https://webhose.io/blog/api/how-to-use-rated-reviews-for-sentiment-classification/
【4】https://zhuanlan.zhihu.com/p/40276005