《【语言模型系列】实践篇:ALBERT在房产领域的实践》
作者:互联网
【语言模型系列】实践篇: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中也可以跑起来,且预训练速度也还可以接受,主要参数如下所示。
数据量 | 预训练参数 | 所用资源 | 所用时间 |
---|---|---|---|
30G | train_batch_size=512 max_seq_length=128 num_train_steps=30000 |
4块v100 | 42h |
三、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指的是两个架构预测结果相同。由此来评测出新体系上线后对于线上的作用效果,以下是评测效果。
模型 | 评测任务 | 评测数据数量(条) | good | same | bad |
---|---|---|---|---|---|
albert_pretrain+fine-tuning | 技能层 | 8000 | 1058/0.1323 | 6466/0.8083 | 476/0.0595 |
意图层 | 8000 | 1115/0.1394 | 6455/0.8069 | 430/0.0537 |
由以上评测可以看出来,在技能层,新的意图识别架构在8000条case中产生了1058条正向影响,476条负向影响;在意图层,新的意图识别架构在8000条case中产生了1115条正向影响,430条负向影响。整体结果说明新的意图识别架构体系对于线上的技能层以及意图层均产生了正向的效果。
3.2 句式识别
3.2.1 定义
根据业务需求,我们将房产领域的句式分为5类,如下所示
句式类别 | label | 定义 |
---|---|---|
疑问句 | interrogative | 以疑问语气进行询问的语句 |
肯定句 | affirmative | 表达肯定语气的陈述句 |
反问句 | 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月毕业于北京理工大学信息与电子学院,毕业后加入贝壳找房语言智能与搜索部,主要从事自然语言理解等相关工作。
智搜小贝壳 阅读 126 <style></style>
标签:训练,ALBERT,模型,albert,实践,意图,房产,识别,语料 来源: https://www.cnblogs.com/cx2016/p/12860301.html