预训练语言模型在网易严选的应用

文章作者:纪志伟@网易严选
内容来源:严选技术团队

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

01 前言

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

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

02 模型结构

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

语言模型 Bert GPT EMLO
模型结构
(见上图)
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 三种常见的特征抽取方式的比较汇总于下表。

模型结构 RNN CNN Transformer
时间复杂度 O(N)
句子长度为 N
O(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 的使用方式,在严选智能客服意图识别模块的业务流程分类模型上进行了测试。相同的测试集上效果评估如下表所示。

模型名称 数据量 测试集 f1
ABL 15W 0.9743
BERT 5K 0.9612
BERT 2W 0.9714
BERT 15W 0.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 的匹配效果:

使用方式 precison recall f1 单条响应时间
Siamese-LSTM 0.98 0.75 0.85 < 30ms
BERT 0.96 0.97 0.97 > 50ms

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

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

4. 序列标注

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

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



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

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

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

  • 特征集成:将基于 bert 获取的 embedding 接入到传统的 lstm 加 crf 模型上去
  • 微调模型:比较了高层特征和多层特征融合的效果
使用方式 precison recall f1 单条响应时间
特征集成
bi-lstm + crf
0,9686 0.8813 0.922 > 100ms
微调
多层特征融合
0.9361 0.8801 0.9072 < 10ms
微调
高层特征
0.9356 0.8368 0.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 针织工艺,精致细腻 经典版型,时尚百搭
gpt2 100% 长绒棉,严格品控一家人满意 学院风格,日系简约

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

6. 其他

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

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

05 后记

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

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

预训练的语言模型在严选 NLP 的场景下得到了广泛的运用,同时我们借助于知识蒸馏等技术对这类复杂模型进行压缩,提升线上预测的速度,减少消耗的计算资源。并借助于多任务学习的方式,让多个任务的模型共享底层的预训练语言模型的信息,互相增强,进一步提升模型的泛化能力。

今天的分享就到这里,谢谢大家。

06 参考资料

[1] Peters M E, Neumann M, Iyyer M, et al. Deep contextualized word representations[J]. arXiv preprint arXiv:1802.05365, 2018.

[2] Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. URL https://s3-us-west-2. amazonaws. com/openai-assets/research-covers/languageunsupervised/language understanding paper. pdf, 2018.

[3] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

[4] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.

[5] Peters M, Ruder S, Smith N A. To Tune or Not to Tune? Adapting Pretrained Representations to Diverse Tasks[J]. arXiv preprint arXiv:1903.05987, 2019.

[6] Qiao Y, Xiong C, Liu Z, et al. Understanding the Behaviors of BERT in Ranking[J]. arXiv preprint arXiv:1904.07531, 2019.

[7] Kaneko M, Komachi M. Multi-Head Multi-Layer Attention to Deep Language Representations for Grammatical Error Detection[J]. arXiv preprint arXiv:1904.07334, 2019.

[8] Song K, Tan X, Qin T, et al. Mass: Masked sequence to sequence pre-training for language generation[J]. arXiv preprint arXiv:1905.02450, 2019.

[9] Radford A, Wu J, Child R, et al. Language models are unsupervised multitask learners[J]. OpenAI Blog, 2019, 1(8).

[10] Yang Z, Dai Z, Yang Y, et al. XLNet: Generalized Autoregressive Pretraining for Language Understanding[J]. arXiv preprint arXiv:1906.08237, 2019.

[11] Lan Z, Chen M, Goodman S, et al. ALBERT: A lite BERT for self-supervised learning of language representations[J]. arXiv preprint arXiv:1909.11942, 2019.

作者介绍:

纪志伟,2018 年硕士毕业于浙江大学,后加入网易严选算法部。从零到有参与了网易严选智能客服的算法构建工作,并为考拉智能客服提供算法能力支持。致力于将自然语言处理领域的新技术与业务相结合,赋能于严选智能客服、人工客服工作台、客服质检等各个场景。


本文地址:https://www.6aiq.com/article/1596759801305
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出