【语言模型系列】实践篇:ALBERT在房产领域的实践

随着预训练模型在各大榜单的不断屠榜,学术界和工业界对于预训练模型的研究也愈加狂热。预训练语言模型一般基于海量语料,消耗大量的硬件资源以及时间成本,利用无监督的方法学习一个语言模型,随之应用到各种任务中,带来效果上的提升。

贝壳找房作为中国互联网房产领域领先的服务平台,业务场景中包含了大量的自然语言处理任务,积累了大量的房产领域文本语料,如何更好的利用这些海量的语料,完成各种业务场景的提效,是贝壳找房语言智能与搜索团队面临的挑战之一。

一、模型选择

一般来讲,使用预训练模型分为三个阶段:选择模型、领域预训练、微调(fine-tuning),如下图所示。

预训练过程

模型的选择是最基础,也是很大程度上决定最终应用效果和性能的关键一步。

谷歌提出的预训练语言模型BERT算是NLP领域近年来取得的重大进展及里程碑事件之一。虽然BERT效果显著,但是由于其庞大的参数量,使得其在现实场景的工程落地中步履维艰,难以真正的部署到线上使用。幸运的是,如今已经有很多算法对其进行了改进,使得模型更”接地气“,能够应用到具体的任务场景中,比如2019年提出的ALBERT。

ALBERT在参数量上做了很多文章,将BERT中100多M的参数量缩小到12M(base),甚至是4M(tiny),极大的提升了训练和推理速度,且效果基本保持一致。为了更好的进行线上工程化,选用ALBERT基于中文语料训练的tiny版本模型。tiny版本只有4层transformer,在推理速度上会大大提升。

二、领域预训练阶段

为了在特定领域的任务中取得更好的效果,通常会用特定领域的语料在公开的预训练模型基础上进一步训练,学习更多的关于该领域的语义信息。房产领域中的文本语料特点突出,具有很多房产领域特有的语言习惯和专业词汇,因此利用房产领域的文本进行进一步的领域预训练十分必要。

2.1 数据准备

综合贝壳找房多个业务场景下的语料(小贝助手、智能客服、看点、房评等),共准备了约30G左右的房产领域语料。

利用房产领域语料进行预训练,需要将大量的房产领域语料转成tfrecord格式,以便于进行快速的预训练。tfrecord的生成主要消耗大量的CPU资源,对GPU资源没有依赖。一般来讲,我们会把预训练语料进行切分,以便在有限的内存资源中完成tfrecord的生成。这里我将原始语料切分为317份,每份50万行数据,依次生成tfrecord。

2.2 算力和训练时间

由于ALBERT_tiny的参数量相较于BERT来讲减少了很多,所以在正常的GPU中也可以跑起来,且预训练速度也还可以接受,主要参数如下所示。

数据量预训练参数所用资源所用时间
30Gtrain_batch_size=512
max_seq_length=128
num_train_steps=30000
4块v10042h

三、fine-tuning阶段

经历过算法模型工业实践洗礼的同学,一定能够深刻的体会到工业中高质量数据的难得和重要,通常我们都没法拿到数量足够多的训练集。所以如何在只拥有少量数据集的情况下,取得较好的训练效果,就成了工业实践中比较常见的一个问题,而fine-tuning就很好的解决了这个问题。

所谓的fine-tuning阶段就是”站在巨人的肩膀上看世界“,这里的“巨人”就是我们前面提到的领域预训练。预训练模型在领域预训练阶段进行的是无监督训练,会学习到大量的领域知识,因此在fine-tuning阶段将预训练模型的参数作为具体任务的初始化参数,能够在具体的任务中使用更少的数据,得到更好的训练效果。

当前我们在房产领域中进行了两个任务的实践--意图识别和句式识别,并已经将意图识别的模型成功应用到线上,且取得了不错的效果。

3.1 意图识别

3.1.1 定义

意图识别,简单来说就是读懂一个query表达的意图,比如识别出“我想要一个带阳台的大房子”表达的意图是“找房”,其实直白的说,意图识别就是一个多分类任务。房产领域的意图识别主要分为用户意图识别和经纪人意图识别,其中用户意图体系复杂,任务难度较大,我们这次的实践也是挑了这块难啃的骨头。

3.1.2 整体架构

我们在建立用户意图体系的过程中,定义了256个意图类别,由于意图种类过多,难以使用一个模型进行分类表示,所以我们又将256类意图进行向上归类,定义了13个技能类别(包含一个other类别),每个技能下对应着一部分意图。在预测过程中,query先经过技能模型,得到技能的标签,然后根据技能标签决定调取哪个意图模型。所以,我们一共有1个技能模型和12个意图模型,如下图所示。

模型架构
3.1.3 albert登场

在这个模型体系中,起初的技能模型和意图模型都是用的fasttext。fasttext虽然是一个很优秀的模型,但也有其缺陷。fasttext模型对query的语义信息识别不充分,对“词”的依赖程度过高,比如技能标签是房屋信息的query大多为疑问句,导致query中经常出现”吗“这种疑问词,使得可能将“吗?”这种query识别成房屋信息。而albert这种预训练模型能够获取query的语义信息,内部采用注意力机制,对query中的每个词分配不同权重,可以在一定程度上避免这种问题的出现。所以我们将技能模型替换为了albert,如下图所示。

模型架构替换
3.1.4 效果

我们在对意图识别整体架构体系进行变更之前,完成了两版评测--线下模型评测及线上评测。

在线下评测过程中,我们在同等训练集、测试集的情况下,对fasttext和albert在技能层的效果进行了对比,结果如下

模型评测任务效果(acc)
fasttext意图识别技能层0.75
albert_origin+fine-tuning意图识别技能层0.804
albert_pretrain+fine-tuning意图识别技能层0.832

其中,albert_origin是没有进行领域预训练的模型,直接使用了作者公开的预训练模型,albert_pretrain是利用了房产领域数据进行预训练之后的模型。这里albert的效果是在预训练模型的基础上进行微调(fine-tuning)的结果。可以看出来,在线下评测中,技能层的模型由fasttext更替到albert后,其准确率由0.51上升到0.632,提升了12.2个百分点,这个程度的提升还是很明显的。同时albert_origin和albert_pretrain也存在着2.8个点的差异,说明领域预训练是很有必要且效果显著的。

在上线之前,我们还进行了线上模拟评测,采用了GSB的评测方法,即对一批线上语料,分别使用两个意图识别架构进行预测,并人工标出预上线的架构相较于线上架构的影响。这里的影响包括正向(good)、相同(same)、负向(bad),其中good指的是新架构预测正确的case数量,bad是指线上架构预测正确的case数量,same指的是两个架构预测结果相同。由此来评测出新体系上线后对于线上的作用效果,以下是评测效果。

模型评测任务评测数据数量(条)goodsamebad
albert_pretrain+fine-tuning技能层80001058/0.13236466/0.8083476/0.0595

意图层80001115/0.13946455/0.8069430/0.0537

由以上评测可以看出来,在技能层,新的意图识别架构在8000条case中产生了1058条正向影响,476条负向影响;在意图层,新的意图识别架构在8000条case中产生了1115条正向影响,430条负向影响。整体结果说明新的意图识别架构体系对于线上的技能层以及意图层均产生了正向的效果。

3.2 句式识别

3.2.1 定义

根据业务需求,我们将房产领域的句式分为5类,如下所示

句式类别label定义
疑问句interrogative以疑问语气进行询问的语句
肯定句af‭‭‭‭‭firmative表达肯定语气的陈述句
反问句rhetorical反问句就是用疑问的句式,表达肯定的观点。反问句表面看来是疑问的形式,但实际上表达的是肯定的意思,答案就在问句之中。
否定句negative表达否定意思的陈述句
其他unlimited只包含标点等符号或无实际意义的句子
3.2.2 效果

我们对句式识别进行了一个线下模型的评测,效果如下所示。

模型数据集效果(acc)
fasttext句式0.946
albert_origin+fine-tuning句式0.962
albert_pretrain+fine-tuning句式0.967

可以看出,模型更替后的效果与意图识别的模型更替结论一致。albert模型在句式识别中的准确率比fasttext模型高2.1个点,且可以看出来albert_pretrain的效果优于albert_origin。

四、意图识别部署上线

4.1 数据预处理

我们已经将预训练模型albert在意图识别中的应用成功的部署到了线上,该过程有一个重要的步骤--数据预处理工程化。

在模型训练过程中,albert模型的作者在代码中对训练语料进行了很多的预处理工作,包括去除特殊字符、去除控制字符、去除多余空格、使用最大贪婪法完成word-id的转化等等步骤。为了使得模型的线上效果与线下保持一致,我们在工程中进行了一样的数据预处理。

4.2 线上响应

上线之前,为了保险起见,我们将albert的超时时间设置为了80ms。上线之后,我们发现,albert的响应时间大概在20ms到30ms之间,完全符合上线要求。

作者介绍

李东超,2019年6月毕业于北京理工大学信息与电子学院,毕业后加入贝壳找房语言智能与搜索部,主要从事自然语言理解等相关工作。


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值