文章作者:纪志伟@网易严选

内容来源:严选技术团队

导读: 随着Bert的发布,预训练 ( pre-train ) 成为NLP领域最为热门的方向之一,大规模的无监督语料加上少量有标注的语料成为了NLP模型的标配。本文将介绍几种常见的语言模型的基本原理和使用方式,以及语言模型在网易严选NLP业务上的实践,包括分类、文本匹配、序列标注、文本生成等。

01 前言

文本的表征经历了漫长的发展历程,从最简单经典的bow词袋模型、以LDA为代表的主题模型、以word2vec为代表的稠密向量模型、到现在以Bert为代表的通用语言模型。词语是文本细粒度的表达,早期的预训练词向量虽简单易用,但无法解决一词多义的问题。近年来,基于大规模上下文语料,训练的通用语言模型,可以产出更细致的语义表征向量,相同的词在不同的语境中能抽取出不同的语义向量。

在通用常见的NLP任务中,数据标注是不能缺少的重要环节。数据的量级及质量会直接影响任务的效果。现实条件下,数据标注的成本往往很高,但好在我们拥有大量的无标注的语料。因此,基于无监督的海量语料训练一个通用的语言模型,然后针对不同的NLP任务,进行少量数据标注后,再对模型进行微调成为了发展的趋势。

02 模型结构

我们选取最具代表性的三个语言模型: ELMO[1]、GPT[2]、BERT[3] 进行对比,如下表所示。

语言模型BertGPTEMLO模型结构

(见上图)Transformer编码器Transformer解码器bi-lstm目标任务(1) Masked LM

随机遮蔽的部分输入,进行预测

(2) Next sentence prediction

判断两个输入是否是上下文关系标准语言模型

前k个输入预测第 k + 1个输入双向语言模型

(1) 前k个输入预测第 k + 1个输入

(2)后k个输入预测倒数第 k + 1个输入推荐使用方式微调微调特征集成优缺点双向语言模型

Transformer抽取能力强单向语言模型lstm特征抽取能力弱

训练速度慢

ELMO采用的lstm网络,而gpt和BERT采用的网络结构都是transformer。Transformer是谷歌17年的文章《attention is all you need》[4]中提出的一种自注意力机制,替代传统的RNN和CNN进行语义特征的抽取,在机器翻译上取得了优异的效果。

Transformer 采用的是标准的seq2seq的模式 ( 上左图所示 ),其中关键的特征抽取部分采用的是多抽头的自注意力机制 ( 上右上图所示 )。所谓的多抽头是指多个自注意力机制并行,最终拼接成输出的过程。注意力机制采用的是点乘注意力 ( 上右下图所示 )。

点乘注意力机制的主要有下面四个步骤:

  • query 到 ( key , value ) 的映射
  • 计算query与每个key之间的权重
  • softmax函数权重归一化
  • 权重和value进行加权求和

自注意力就是Q,K,V均相同,均为输入

将RNN CNN Transformer三种常见的特征抽取方式的比较汇总于下表。

模型结构RNNCNNTransformer时间复杂度O(N)

句子长度为NO(N/k)

k为卷积核宽度O(1)非线性次数不一恒定恒定参数数量较少较多较多优劣表示能力不足,损失严重dependency范围有限

1 + a(k-1)a为卷积次数一层实现输入序列上的 long-range dependencies

03 使用方式

1. 应用模式

将预训练的语言模型运用到新的NLP任务上去时,有下面两种应用模式。

应用模式

特征集成

(Feature Ensemble)要判断的输入句子,经过预训练的语言模型,获取对应单词的embedding,输入到下游任务的模型上去。微调

(Fine-tuning)仍然采用与预训练过程相同的网络结构,利用部分标注数据,直接在这个网络上进行模型训练,以针对性地修正预训练阶段获得的网络参数。

按理来说,各种语言模型均可以采用这两种使用方式,那么该如何选择,有研究[5][6][7]中给出了下面的结论:

  • ELMO来说,特征集成的应用方式,效果稳定地优于Fine-tuning;
  • 句子匹配类任务 ( 输入多句 ),Bert采用Fine-tuning效果明显好于特征集成;
  • 其它类型的任务,在应用Bert的时候,Fine-tuning模式要稍好于特征集成模式,或者两者效果差不多。

2. 特征表示

这类语言模型都是多层网络拼接,那么我们在使用时,也会有两种特征表示的方法。

  • 仅使用最高层的特征
  • 加权多层的特征

上面的研究给出了下面的结论:

  • ELMO在原文中给出了使用的建议,针对不同的任务,使用不同的权重向量加权每一层的特征,并乘上对应的缩放系数。

  • bert在句子匹配等多输入的NLP任务,直接使用最高层特征最简单,效果也最好。
  • 对于序列标注类任务,可能多层特征融合更适合应用场景。

04实践

1. 分类

分类是NLP中最常见的任务之一,常见的包括情感分析和文本分类,我们都有所涉及。

  • 情感分析:如分析用户评论或者用户客服会话中的情绪,对于负面情绪严重的用户需要进行安抚。
  • 意图识别:如在智能客服中,用户的问题进来之后,首先需要进行意图识别,判断用户的问题是在问"售后相关问题"“售前商品知识问题"还是单纯的"闲聊"或者其它的类型,然后分发到不同的模块进行解答和回复。

文本分类的算法模型常见的是融入attention机制的rnn或者cnn等各种网络结构。我们搭建严选智能客服意图识别分类体系的时候,采用ABL ( attention bi-lstm ) 的模型结构。学习《attention is all you need》[4:1]中的编码方式,除了语义编码之外,加入position-embedding ( 位置编码 ),更好的进行句子表征。

基于bert fine-tuning的使用方式,在严选智能客服意图识别模块的业务流程分类模型上进行了测试。相同的测试集上效果评估如下表所示。

模型名称数据量测试集f1ABL15W0.9743BERT5K0.9612BERT2W0.9714BERT15W0.9745

可以看出:

  • 在文本分类任务上,bert带来的提升比较有限。原因可能在于分类任务不需要深层次的语义特征,传统方法捕捉到的语意特征已经能够较好地解决分类的问题,发挥不出预训练语言模型的强大之处。
  • 优势在于bert可以采用较少的样本就可以获得较好的泛化能力,减少人工标注的成本,但同时需要付出更多的计算资源。

2. 文本表征

很多情况下,我们需要将句子转换到向量空间上去,获得一种表征方式。

在无监督计算两个文本的相似度或者是对文本进行聚类分析时,需要提取文本特征,除了传统特征之外,语意特征也是一个重要的组成部分。

在解答用户的FAQ问题时,一般都需要检索和排序两个过程。检索除了字面检索 ( 例如BM25 ) 之外,可以利用预先存好的标准FAQ的向量进行语意层面 ( 例如ANN ) 的检索。

在谷歌官方给出的示例中,bert获取到的是每一个token ( 字 ) 在倒数四层每一层输出的embedding。如果需要获得一个句向量,则需要对每一个token以及每一层的向量进行加权组合。

实际使用中,我们发现仅使用倒数第二层输出的token向量进行加权获得的句向量的匹配效果最好。原因可能在于,bert输出的最高层的语意向量是面向两个预训练的目标任务的,而倒数第二层的向量反而更加贴近句子本身的含义。在文本表征的任务中,不会对原有模型进行微调,只需要句子本身的含义表征即可。

3. 文本匹配

文本匹配是非常经典的一类NLP任务,全称为Natural Language Inference,任务定义为:给定一个premise前提,推断hypothesis假设与前提的关系。其中关系分为三类:蕴涵关系 ( entailment )、矛盾关系 ( contradiction )、中立关系 ( neutral )。在自动问答领域,NLI技术常被应用在句子相似度判别、问答语句相关性判别任务中。

从最简单的Siamese-LSTM,到InferNet、Decomposable Attention、ESIM,到BERT,文本匹配的算法也经历了一系列的网络结构变迁。BERT的出现,很好帮助我们在少量标注样本的情况下,达到一个好的匹配效果。

在严选的智能客服项目中,我们采取了多样化的问句匹配方案:

  • 问题Q与答案A进行关联匹配
  • 问题Q1与问题Q2进行相似匹配
  • 问题Q与标准问题QS的关联匹配

三类方式分别可以确保问句的相似召回效果、问答关联匹配效果,在match及rank阶段可以用策略灵活的加权判别。

在严选6W规模的标注数据量下,我们对比了Siamese-LSTM和BERT的匹配效果:

使用方式precisonrecallf1单条响应时间Siamese-LSTM0.980.750.85< 30msBERT0.960.970.97> 50ms

从上面的结果可以看出,bert效果显著优于孪生网络。原因可能在于:

  • bert在预训练阶段的目标任务之一就是预测两个句子之间是否是上下文的关系,可以学习到句间关系的知识。
  • 自注意力机制更加擅长捕捉深层的语意,可以获得句子A中单词和句子B中任意单词的细粒度的匹配结果,这在文本匹配任务中是至关重要的。

4. 序列标注

序列标注是NLP领域中的四大任务之一,包括分词、词性标注、命名实体识别等nlp任务。我们主要关注命名实体识别 ( NER ) 任务,它的目的是识别出语料中的人名,地名等常见的命名实体。

在我们智能客服的场景下,主要关注的是用户问题中的商品实体,属性名实体以及属性值实体。以下图为例:

这个句子中用户关注的商品实体是"裤子”,关注的属性名是"颜色",属性值是"红色"。NER的目的就是从用户的问题中解析出这三类实体,才能进行进一步的分析和解答。

NER算法常用的模型是双向的LSTM 加上条件随机场CRF,前者可以抓取对话文本的上下文特征,理解语境,充分提取上下文信息,后者则注重于当前对话文本的局部信息,有效挖掘当前对话文本的语义信息。

我们第一版的电商NER就是基于bi-lstm加crf构建的词粒度的模型,服务于线上的智能客服系统。之后我们比较了基于bert的特征集成和微调的模型:

  • 特征集成:将基于bert获取的embedding接入到传统的lstm加crf模型上去
  • 微调模型:比较了高层特征和多层特征融合的效果

使用方式precisonrecallf1单条响应时间特征集成

bi-lstm + crf0,96860.88130.922> 100ms微调

多层特征融合0.93610.88010.9072< 10ms微调

高层特征0.93560.83680.8824< 10ms

在我们的数据集上,可以得到如下结果:

  • 特征集成的方式效果优于fine-tuning。原因可能在于在特征集成的时候,我们加入了额外的参数 ( bi-lstm和crf层 ) 。在[5:1]的研究中也进行了这种对比,对比的结果表明附加额外参数的效果会优于不附加的模型,如果fine-tuning的模型也融入crf层,两种使用方式的效果差不多。附加额外参数带来的效果增益特征集成的方式要明显大于fine-tuning的。
  • 多层特征融合的效果优于仅使用高层特征。原因对于序列标注的任务,我们不仅需要考虑句意的表征,还需要融合句子其它粒度的表征。
  • 在响应时间上, 特征集成 ( 附加额外参数 ) 的方式满足不了线上的需求,适用于离线服务,而微调的模型可以用于线上服务。

5. 生成式任务

原生的Bert本身是无法用于生成式任务,这是由它的目标任务和模型结构决定的。后来发展出了一些可以用于生成式任务的预训练模型,比如MASS[8]。当然,仅仅使用训练好的语言模型,也可以生成文本,如上文介绍的gpt的升级版gpt[9],基于大规模语料和庞大的模型,仅仅使用单向语言模型在生成文章方面取得不错的效果,吸引了业界的关注。在严选的场景下,除了闲聊机器人之外,还尝试用于文案生成。

闲聊机器人

智能客服中的闲聊模块,除了机器人的性格问答和检索模块之外,需要一个生成式的模型来承接用户的其他未配置的闲聊打趣问题。我们收集了外部的对话语料,构建了智能客服生成式的闲聊模块,效果如下图所示。

由于外部预料的层次不齐,偶尔会出现部分脏话等不可展示给用户的回答。

对联机器人

这个是我们在春节之间的一些尝试,收集了网上70万的对联数据,构建了给上联对下联,以及对藏头联两种形式的对联机器人。直接对下联直接利用transformer即可构建,而藏头对联还需要一个语言模型基于首字生成上联的过程。

给出两个示例:

  • 对下联:

    上联:上海自来水来自海上

    下联:中山落叶松叶落山中

  • 藏头对联:

    藏头:网易

    上联:网花读似客初归

    下联:易水听惊人未还

夸夸机器人

这个是前段时间流行的一种玩法,自身夸人的语言功底匮乏可以让机器人来进行代劳。我们收集了豆瓣上的一些语料,基于检索和生成两种方式构建了一个夸夸机器人。

效果如下所示:

Q1 :吃了好多零食 求夸

A1 :哇哦哇哦这个是真的棒!快去吃点零食安慰一下自己!

Q1 : 代码出问题了 求夸

A1 : 知道了自己的不足,好棒呀!你会越来越强的~

文案生成

在严选的广告和搜索场景下,需要自动生成商品在指定卖点下的文案。除了传统的抽取式方法之外,我们也尝试利用预训练的语言模型进行文案生成。以一个"儿童衬衫"为例,展示一下利用预训练的语言模型生成的卖点文案。

儿童格纹长袖衬衫卖点-工艺卖点-风格target先染后纺,色牢度高经典格纹,帅气立领bert-generator针织工艺,精致细腻经典版型,时尚百搭gpt2100%长绒棉,严格品控一家人满意学院风格,日系简约

其中,bert用于生成式任务时是将其作为seq2seq的encoder模型。

6. 其他

除了上面提到的各种应用,语言模型还在NLP的其他领域有着应用场景,我们也在进行尝试。

  • 阅读理解:不同于商品属性的知识是结构化且稳定的,活动规则的知识大都是非结构化的,且活动更新频繁。用户对于活动规则问题更加适合利用阅读理解的技术来进行回答。
  • 文本摘要:用户跟客服的交互会有多轮,有价值的信息蕴含在其中部分句子中。我们可以借助摘要抽取的技术对每一个会话的session进行总结,进行规整和分析。

05 后记

Bert问世半年以来发表了很多相关的工作,包括Bert在各个NLP领域的应用或者是各种升级的语言模型 ( gpt2[9:1],MASS[8:1],Xl-Net[10]等等 )。大规模的无监督语料加上少量有标注的语料成为了NLP模型的标配。利用开源的语言模型可以解决普通的用户计算资源不够,语料不足的困境。

但是服务于线上任务,还需要考虑模型的QPS以及所需要耗费计算资源。也发展出了类似albert[11]的轻量级的预训练语言模型,提升模型推断的速度和减少依赖的计算资源。

预训练的语言模型在严选NLP的场景下得到了广泛的运用,同时�