gaiic2021-track3-小布助手对话短文本语义匹配复赛rank3、决赛rank4

Overview

0.前言

决赛答辩已经过去一段时间了,我们队伍ac milan最终获得了复赛第3,决赛第4的成绩。在此首先感谢一些队友的carry~

经过2个多月的比赛,学习收获了很多,也认识了很多大佬,在这里记录一下自己的参赛体验和学习收获。

1.赛题背景

小布助手是OPPO公司为欧加集团三品牌手机和IoT设备自研的语音助手,为用户提供了有趣、贴心、便捷的对话式服务。意图识别是对话系统中的一个核心任务,而对话短文本语义匹配是意图识别的主流算法方案之一。本赛题要求参赛队伍根据脱敏后的短文本query-pair,预测它们是否属于同一语义,提交的结果按照指定的评价指标使用在线评测数据进行评测和排名,得分最优者获胜。

2.赛题描述及数据说明

  • 训练数据

    训练数据包含输入query-pair,以及对应的真值。初赛训练样本10万,复赛训练样本30万,这份数据主要用于参赛队伍训练模型,为确保数据的高质量,每一个样本的真值都有进行人工标注校验。每行为一个训练样本,由query-pair和真值组成,每行格式如下:

    • query-pair格式:query以中文为主,中间可能带有少量英文单词(如英文缩写、品牌词、设备型号等),采用UTF-8编码,未分词,两个query之间使用\t分割。
    • 真值:真值可为0或1,其中1代表query-pair语义相匹配,0则代表不匹配,真值与query-pair之间也用\t分割。

    训练数据样本举例(空白间隔为\t):

    肖战的粉丝叫什么名字 肖战的粉丝叫什么 1
    
    王者荣耀里面打野谁最厉害 王者荣耀什么英雄最好玩 0
    
    我想换个手机 我要换手机 1
    
    我是张睿 我想张睿 0
    
    不想 不想说 0
    

    测试数据

    脱敏后的query-pair数据,初赛采用A/B榜的方式,A榜和B榜样本规模分别为2.5万,发布时间以赛制为准,初赛队伍根据初赛B榜排名择优进入复赛;复赛同样采用A/B榜的方式,样本规模5万(与初赛不重复),复赛队伍根据复赛B榜排名择优进入现场答辩。

    测试数据样本举例(空白间隔为\t)

    肖战的粉丝叫什么名字 肖战的粉丝叫什么
    
    王者荣耀里面打野谁最厉害 王者荣耀什么英雄最好玩
    
    我想换个手机 我要换手机
    
    我是张睿 我想张睿
    
    不想 不想说
    

3.评估标准

比赛的评估标准由性能标准和效果标准两部分组成,初赛采用效果标准,AUC 指标。

4.整体设计

image-20210619163346172

(1)预训练

a.模型选取

赛题所给数据经过了脱敏,相当于一种新的语言,无法直接利用开源的预训练模型进行迁移学习

但是预训练依然很有必要,在有限的数据上,我们需要尽可能充分地利用其中的信息,Bert语言模型的MLM预训练任务可以利用无监督文本信息,学习文本表征、语言学知识和世界性知识

我们选用的是Bert和其变种Nezha,二者主要区别在于绝对位置编码与相对位置编码

考虑到后续的模型融合以及线上环境提供四卡,我们预训练了四个模型,参数量皆为1亿左右

image-20210619163530653

b.MASK策略

模型输入为经典的拼接形式:[CLS] s1 [SEP] s2 [SEP]

对偶:s1、s2以50%的概率交换位置,是对语义无损的数据增强方式

长度自适应动态N-gram Mask策略

  • 动态Mask:预训练达到400 epoch,上百万次iter,可以每次迭代都随机生成新的mask文本,增强模型泛化能力
  • N-gram Mask:以15%的概率选中token,为增加训练难度,选中部分以70%、20%、10%的概率进行1-gram、2-gram、3-gram片段的mask(选中token使用[MASK]、随机词、自身替换的概率和原版Bert一致)
  • 长度自适应:考虑到对短文本进行过较长gram的mask对语义有较大破坏,长度小于7的文本不进行3-gram mask,小于4的文本不进行2-gram mask
  • 防止小概率的连续Mask:已经mask了的文本片段,强制跳过下一个token的mask,防止一长串连续的mask

c.其他Trick与参数设置

  • 学习率warmup与衰减

    • 预训练400 epoch ,前4.5个epoch,学习率从0线性增长到5e-5,之后线性衰减到1e-5
  • 分块shuffle

    • 预训练周期长,优化时间性能非常重要,分块shuffle将长度差不多的样本组成batch快,块间shuffle,减少padding部分运算量,耗时减少了约40%,实测不会降低模型效果
  • 权重衰减

    • 限制网络权值的大小,缓解过拟合现象
  • 四个模型通用参数设置

    image-20210619170554408

(2)微调

a.模型参数

  • 预训练利用文本中的无监督信息,微调则需利用有监督的句子对匹配信息,将赛题任务建模为匹配与不匹配的二分类问题

  • 我们在4个预训练模型的基础上,训练了6个微调模型,从词表、截断长度和模型结构等维度保证模型之间的差异性,以便后序模型融合,参数设置对比如下:

    image-20210619170702479

b.后接结构

  • Bert/Nezha后接的三种结构

    image-20210619170927378

考虑到Bert已经具备强大的特征提取能力,以及运行和推理时限严格,所以其只后接了一些简单的结构。

c.Trick

  • 学习率

    • warmup与衰减:可以使得训练初期学习率较小,模型可以慢慢趋于稳定,待相对稳定后再以预先设置的学习率进行训练,使得模型收敛速度变得更快。后采用学习率衰减的方式使模型收敛到更佳的极值点,提升最终效果
    • 不同模型采用不同的学习率(2e-5或4e-5)
  • 模型融合时先对logits加权平均,后softmax

    • 使得softmax不再是每个模型独立进行,而是综合利用所有模型信息
  • 对抗训练

    • 对抗训练是一种引入噪声的训练方式,可以对参数进行正则化,提升模型鲁棒性和泛化能力 Fast Gradient Method (FGM):对embedding层在梯度方向添加扰动 Projected Gradient Descent (PGD) :迭代扰动,每次扰动被投影到规定范围内 团队实验了FGM、PGD,前者速度快且效果更佳。

    d.通用参数

    最佳参数

    • batch_size=32,预训练充分的情况下,微调收敛非常快,小bs带来更大的随机性,更不容易过早陷入局部最优
    • epoch=3
    • dropout=0.2,训练时以一定概率丢弃某些神经元,缓解过拟合
    • FGM,epsilon=0.25时效果最佳

(3)模型融合与推理

image-20210619171224369

(4)性能优化

a.分块shuffle

  • 赛题限制线上总运行时间为80小时,限制推理5w测试集时间为15分钟(含网络开销),性能优化尤为关键

    • 分块shuffle将长度差不多的样本组成batch快,块间shuffle,减少padding部分运算量,预训练耗时减少了约40%

    • 最终预训练线上能控制在9分多钟一个epoch,400个epoch能控制在65小时以内完成

      image-20210619171438518

b.推理加速

  • ONNX Runtime:ONNX Runtime是机器学习模型的预测引擎,能使用内置的图优化(Graph Optimization)和各种硬件加速功能,来优化和加速推理。像BERT这样的Transformer模型,由许多运算符(Operator)的图构成,ONNX Runtime内置图优化功能,可以简化图并且减少节点,进而执行更复杂的节点融合和布局优化。通过使用ONNX Runtime,推理部分获得了非常可观的加速。

image-20210619171514789

c.对cuda版本的调优

  • 在大家使用较多的cuda11镜像中,我们发现线上V100速度较慢,根据以往项目经验,老一些的卡用较新的cuda版本未必能发挥出最好的性能,我们尝试更换镜像版本为cuda10.2,cudnn版本配套改为7,onnxruntime-gpu版本配套改为1.5.1,推理速度有了较大提升,使得在15分钟内我们能跑6个模型(以往为4个)

image-20210619171554475

d.其他细节

  • 减少内存到显存的通信开销:避免使用.to('cuda')的方式将tensor从内存移至显存,增加通信开销,而是一开始就用torch.tensor(xxx,device='cuda')的方式将tensor创建在显存

  • 编写更快的分词函数:所给数据已经用空格将token隔开,避免使用tokenize函数将数据整体当做字符串进行分词,而是按空格split后直接convert_tokens_to_ids

  • ……

5.创新和落地

a.创新

  • 融入对偶的长度自适应动态N-gram Mask策略

  • 不同词表、不同截断长度、不同结构的模型融合,保证模型差异性

  • 学习率warmup与衰减、模型权重衰减、对抗训练等Trick

  • 性能优化,包括分块shuffle、ONNX Runtime的使用、对cuda版本的调优和其他细节优化

b.落地

  • 我们的模型将语义匹配转换为分类问题,这是一种通用性非常强的解决方案,可以广泛落地于自然语言处理领域中涉及到句子关系的各项任务中,如开放域意图识别(本赛题)、QQ匹配、QA匹配、文本蕴含等

  • 推理速度较快,不计网络通信消耗,比赛使用的6模(4 Bert,2 Nezha)融合后可达77的QPS(AUC 0.9579),在牺牲不到一个百分点的AUC下,单模Bert可达595的QPS(AUC 0.948)

  • 实际生产环境复杂,短文本相对容易出现语义缺失,且受噪声影响相对更大(用户输错或语音识别错误几个字,占短文本整体的比例可能就较大),可能需考虑辅以指代消解、文本补全、文本纠错等技术

  • 深度学习并非万能,实际落地时,需要不断进行badcase分析,适当辅以规则的方法提升系统鲁棒性

6.方案总结

  • 总结性回答
    • 我们从预训练、微调、模型融合和推理四个方面入手,每个阶段进行针对性的策略改进及创新,辅以性能优化,最终形成了一个较好的端到端解决方案,可以广泛落地于自然语言处理领域中涉及到句子关系的各项任务中,具有较好的实用性和创新性。
  • 方法优劣势分析、展望
    • 优点:效果好,速度快,模型通用性强
    • 缺点:交互型模型因为每次计算都需要输入完整句子对,不适合于从海量文本中召回结果,而是适合在召回小部分候选集后,进行精细的排序
    • 展望:从科学研究角度,我们要利用好预训练模型这个核武器,设计更有针对性,更加合理的预训练任务,此外也可探索结合上下文、引入知识的多轮匹配任务。从应用角度,可以从badcase出发,不断优化算法,挖掘用户需求,让小布成为一个知识更加渊博,对话更加流畅,更加人性化的智能助理

7.前排大佬解决方案

一、AI小花

https://github.com/nilboy/gaic_track3_pair_sim

image-20210619194951696

二、[none]

image-20210619200120075

image-20210619200126641

image-20210619200137247

三、赛道3-白[MASK]

image-20210619204111156

image-20210619204017855

image-20210619204120283

image-20210619204128548

四、科讯嘉联灵珠团队

image-20210619205915821

image-20210619210050654

五、LOL王者

image-20210619210251396

image-20210619210301353

Owner
I will graduate with a master's degree in 2022 and I‘m loking for an NLP job.
Code for our paper "Transfer Learning for Sequence Generation: from Single-source to Multi-source" in ACL 2021.

TRICE: a task-agnostic transferring framework for multi-source sequence generation This is the source code of our work Transfer Learning for Sequence

THUNLP-MT 9 Jun 27, 2022
Kurumi ChatBot

KurumiChatBot Just another Telegram AI chat bot written in Python using Pyrogram. A public running instance can be found on telegram as @TokisakiChatB

Yoga Pranata 3 Jun 28, 2022
Facebook AI Research Sequence-to-Sequence Toolkit written in Python.

Fairseq(-py) is a sequence modeling toolkit that allows researchers and developers to train custom models for translation, summarization, language mod

20.5k Jan 08, 2023
An end to end ASR Transformer model training repo

END TO END ASR TRANSFORMER 本项目基于transformer 6*encoder+6*decoder的基本结构构造的端到端的语音识别系统 Model Instructions 1.数据准备: 自行下载数据,遵循文件结构如下: ├── data │ ├── train │

旷视天元 MegEngine 10 Jul 19, 2022
Various capabilities for static malware analysis.

Malchive The malchive serves as a compendium for a variety of capabilities mainly pertaining to malware analysis, such as scripts supporting day to da

MITRE Cybersecurity 64 Nov 22, 2022
Extract city and country mentions from Text like GeoText without regex, but FlashText, a Aho-Corasick implementation.

flashgeotext ⚡ 🌍 Extract and count countries and cities (+their synonyms) from text, like GeoText on steroids using FlashText, a Aho-Corasick impleme

Ben 57 Dec 16, 2022
Transformation spoken text to written text

Transformation spoken text to written text This model is used for formatting raw asr text output from spoken text to written text (Eg. date, number, i

Nguyen Binh 16 Dec 28, 2022
PyTorch implementation and pretrained models for XCiT models. See XCiT: Cross-Covariance Image Transformer

Cross-Covariance Image Transformer (XCiT) PyTorch implementation and pretrained models for XCiT models. See XCiT: Cross-Covariance Image Transformer L

Facebook Research 605 Jan 02, 2023
A website which allows you to play with the GPT-2 transformer

transformers A website which allows you to play with the GPT-2 model Built with ❤️ by raphtlw Table of contents Model Setup About Contributors Model T

raphtlw 2 Jan 27, 2022
Chinese version of GPT2 training code, using BERT tokenizer.

GPT2-Chinese Description Chinese version of GPT2 training code, using BERT tokenizer or BPE tokenizer. It is based on the extremely awesome repository

Zeyao Du 5.6k Jan 04, 2023
NLP Text Classification

多标签文本分类任务 近年来随着深度学习的发展,模型参数的数量飞速增长。为了训练这些参数,需要更大的数据集来避免过拟合。然而,对于大部分NLP任务来说,构建大规模的标注数据集非常困难(成本过高),特别是对于句法和语义相关的任务。相比之下,大规模的未标注语料库的构建则相对容易。为了利用这些数据,我们可以

Jason 1 Nov 11, 2021
GraphNLI: A Graph-based Natural Language Inference Model for Polarity Prediction in Online Debates

GraphNLI: A Graph-based Natural Language Inference Model for Polarity Prediction in Online Debates Vibhor Agarwal, Sagar Joglekar, Anthony P. Young an

Vibhor Agarwal 2 Jun 30, 2022
自然言語で書かれた時間情報表現を抽出/規格化するルールベースの解析器

ja-timex 自然言語で書かれた時間情報表現を抽出/規格化するルールベースの解析器 概要 ja-timex は、現代日本語で書かれた自然文に含まれる時間情報表現を抽出しTIMEX3と呼ばれるアノテーション仕様に変換することで、プログラムが利用できるような形に規格化するルールベースの解析器です。

Yuki Okuda 116 Nov 09, 2022
Using Bert as the backbone model for lime, designed for NLP task explanation (sentence pair text classification task)

Lime Comparing deep contextualized model for sentences highlighting task. In addition, take the classic explanation model "LIME" with bert-base model

JHJu 2 Jan 18, 2022
Machine Psychology: Python Generated Art

Machine Psychology: Python Generated Art A limited collection of 64 algorithmically generated artwork. Each unique piece is then given a title by the

Pixegami Team 67 Dec 13, 2022
Grover is a model for Neural Fake News -- both generation and detectio

Grover is a model for Neural Fake News -- both generation and detection. However, it probably can also be used for other generation tasks.

Rowan Zellers 856 Dec 24, 2022
DeepSpeech - Easy-to-use Speech Toolkit including SOTA ASR pipeline, influential TTS with text frontend and End-to-End Speech Simultaneous Translation.

(简体中文|English) Quick Start | Documents | Models List PaddleSpeech is an open-source toolkit on PaddlePaddle platform for a variety of critical tasks i

5.6k Jan 03, 2023
Sequence modeling benchmarks and temporal convolutional networks

Sequence Modeling Benchmarks and Temporal Convolutional Networks (TCN) This repository contains the experiments done in the work An Empirical Evaluati

CMU Locus Lab 3.5k Jan 03, 2023
ConvBERT: Improving BERT with Span-based Dynamic Convolution

ConvBERT Introduction In this repo, we introduce a new architecture ConvBERT for pre-training based language model. The code is tested on a V100 GPU.

YITUTech 237 Dec 10, 2022
NVDA, the free and open source Screen Reader for Microsoft Windows

NVDA NVDA (NonVisual Desktop Access) is a free, open source screen reader for Microsoft Windows. It is developed by NV Access in collaboration with a

NV Access 1.6k Jan 07, 2023