背景
京东零售是全球最大零售商之一,涵盖线上、线下的实体、虚拟等多元化交易场景。目前每日有效商品数量约30亿,产生相关日志和内容已经达到PB级。在这些海量数据中,有诸多涉及自然语言处理和计算机视觉的应用场合,通过算法和数据的驱动,给多场景的用户体验和交易提升带来巨大改善,由于BERT在文本处理任务上的优异表现,我们也将BERT模型在电商文本分类、商品标题的序列标注等任务进行探索,并将相关实践经验进行总结。
BERT模型简介
BERT[1] (Bidirectional Encoder Representation from Transformers) 是Google在2018年10月底公布的基于变换器(Transformer)[2]的深度双向编码文本表示模型,通过模型预训练+任务微调整的方式,在11项NLP基础任务中展现出了卓越的性能,故成为NLP领域大火、整个ML界略有耳闻的模型。BERT的出现,彻底改变了预训练词向量模型框架和下游具体NLP任务的关系,将下游NLP任务重心转移到上游的文本动态表示,通过进一步增加词向量模型泛化能力和动态表达能力,以达到充分描述字符级、词级、句子级甚至句间关系特征的目的。
BERT的整体框架如图1所示:模型架构基于多层双向变换器编码而非Bi-LSTM ,这样可使得模型拥有更深的层数、具有更好并行性。在预训练方法上,选择了Masked LM和Next Sentence Prediction两种损失函数分别捕捉词语和句子级别的语义和句法等特征。
BERT的输入部分是一个线性序列(如图2所示),两个句子之间通过分隔符(SEP)分割,最前面和最后增加两个标识符(CLS)。每个词语有三个Embedding:
① 词语Embedding:词语本身的Embedding;
② 句子Embedding: 由于训练数据都是由句子构成的,那么每个句子对应的句子Embedding给到该句中每个词;
③ 位置Embedding:每个词在该篇语料中对应的位置信息。
将语料中对应的上述三种Embedding叠加,即形成了BERT的输入。
图 2 BERT的输入序列
BERT相较于之前相关模型,其创新之处在于采取了新的预训练的目标函数和增加句子级别的任务。前者中,利用随机遮蔽输入中的一些tokens,然后在预训练中通过对它们进行预测,可以让模型融合前后两个方向上的上下文来输出特征,在ELMO[3]的基础上,解决了由于模型层数的加深带来的“目标泄露”,或者叫 “自己预测自己”(“see itself”)的问题;后者中,由于句子与句子之间本不是孤立存在的,以及现存QA和NLI任务都需要对两个句子之间关系进行理解,这种理解方式超越了传统的语言模型。为了理解句子关系,通过预训练了一个“下一句预测”(“Next Sentence Prediction”)任务,也即随机替换一些句子,然后利用上一句进行IsNext/NotNext的预测以达到提取该类句子关系特征。