1. 方法总结:
1. A[SEP]B 2分类
2.pretrain+finetuning
3.数据扩充
A[SEP]B + B[SEP]A
基于传播
外部数据增强:伪标签,注意领域一致性
闭包数据增强
4 添加底层特征finetune
添加前面层和cls层
5 苏神baseline
6 更改分类器
7 长短文本分开处理
8 对抗训练+扰动
对抗训练浅谈:意义、方法和思考(附Keras实现) - 科学空间|Scientific Spaces
FGM, PGD, freelb, lookahead, SimCSE
9 sigmoid加权融合
具体原理引用zzy99的解释:
“”用反函数取出sigmoid/softmax归一化之前的状态做平均,信息量更大,提升明显“”
10 预训练模型初始化:
embedding初始化
训练w2v初始化
11 ESIM(Enhanced Sequential Inference Model)
fgm:
batch_size = 16,lr = 1e-5。
尝试epsilon=0.1,0.2,0.5,1.0等,
0.1和0.2时优化路径差不多,0.5时优化路径稍微变化.最终大概AUC=0.9717
PGD:
batch_size = 16,lr = 1e-5。
k=2
pgd_epsilon=0.1,干扰的系数
pgd_alpha=0.3,干扰的最大值
尝试epsilon=0.1,0.2,0.5,1.0等,
AUC=0.9732
freelb
lookahead
batch_size = 16,lr = 1e-5。
alpha=更新的系数,
其他:
1).训练分为两步:预训练(MLM)+分类
2).数据增强:传递性增强,可达矩阵增强等
3).预训练选择:nezha模型较其他表现要好
4).mask优化:ngram等
5).学习率:1e-5~
6).集成学习:交叉验证,折数越高越好比如5折,10折;N个模型集成 bagging/boosting + 投票/平均/stacking
7).算法选择:树模型lgm等,效果后期提升效果一般;预训练+句子对分类任务;ESIM;对抗训练:fgm等
8).脱敏词和词典对齐效果 < 不对齐效果
文本匹配实践 文本匹配实践 · 语雀
谈谈文本匹配和多轮检索 谈谈文本匹配和多轮检索
CLUE 小模型排行榜 https://www.cluebenchmarks.com/small_model_classification.html
MT-BERT MT-BERT在文本检索任务中的实践 - 美团技术团队
2019高校大数据挑战赛RANK1思路分享 工作台 - Heywhale.com
ESIM 短文本匹配的利器-ESIM - 知乎
腾讯广告算法大赛 冠军10w美金 ! ! ! 备战2021腾讯广告算法大赛
NLP重铸篇之BERT如何微调文本分类 NLP重铸篇之BERT如何微调文本分类
3月15日赛道三周周星分享:
第1名:AI小花https://github.com/nilboy/reports/blob/master/gaic_track_3.md
第2名:ch12hu https://github.com/chizhu/tianchi-gaic-track3-share
参考GitHub - luoda888/2021-GAIIC-phase3-idea
数据层面
q1-q2 = 1, q2-q3 = 1 ---> q1-q3 = 1
q1-q2 = 1, q2-q3 = 0 ---> q1-q3 = 0
构造强连通分量后大概增广了9000条数据,提升大概是2k左右
随机负采样效果不佳(猜测是目前给的pair已经是区分难度较大的,导致随机负采样的样本过于简单,反而让较难样本的分类出现bias)
使用数据对偶(q1q2 + q2q1),取决于模型的效果,我的经验是Bert + 对偶没啥变化,Match / GBDT + 对偶是有显著提升的
MAXLEN = 32, 这个长度已经几乎覆盖了所有的文本,主要是模型能训练的快很多...
思路1 : BERT (框架: PyTorch - Transformers)
在nn这边可以分解为mask + pretrain + fine-tuning的组合(梯度累积=2 / FP16 / 训练数据是q1q2 + q2q1) (again = 从0训练, transfer = 加载预训练权重)
1. Transfer NeZha-Large (normal MLM) (50EPOCH / LR5e-5 / LabelSmoothing0.01 / SEED 2021) (MLM Loss ≈ 0.15)
2. Transfer NeZha-Large (ngram MLM) (100EPOCH / LR5e-5 / LabelSmoothing0 / SEED 2021) (MLM Loss ≈ 0.3)
3. Transfer NeZha-Base (normal MLM) (50EPOCH / LR6e-5 / LabelSmoothing0 / SEED 2021) (MLM Loss ≈ 0.3)
4. Again Bert-Base (normal MLM) (300EPOCH / LR5e-5 / LabelSmoothing0 / SEED 2021) (MLM Loss ≈ 0.1)
5. Again Electra-Base (ngram MLM) (200EPOCH / LR1e-4 / LabelSmoothing0.01 / SEED 2021) (MLM Loss ≈ 0.1)
Fine Tune (数据是q1q2, 不知道为啥对称会过拟合)
线下结果发现复杂的模型结构接在Bert后边效果还不如CLS的... 目前尝试能够有用的
1. 第一层
2. 最后一层
3. MeanPool
4. 第一层 + 最后一层 + MeanPool
大致效果 NeZha-Large(ngram) > NeZha-Large(normal) > NeZha-Base(normal) > Electra-Base(ngram MLM) > Bert-Base (normal MLM)
最好的单模 NeZha-Large(ngram)(0.909) + FGM(3k) + Lookahead(1k) = 0.913 (5fold-offline = 0.977) (代码参考tutule大佬开源的nezha-torch预训练)
分析一下为啥ngram会有用如:我喜欢你,拆分成字是,“我,喜,欢,你”。但是ngram能捕获一定的如 “喜欢” 这种词级别的信息,类似于全词遮罩的做法
思路2 : Match (框架: Tensorflow - Transformers)
训练的数据 q1q2 + q2q1 (对偶)
Match可以用到传统的文本匹配模型,文本分类模型,分享几个有用的trick。
1. Embedding后接Dropout
2. 对LSTM加TimeSeries(Dense)
3. window=1的FastText有一定能力的纠错功能(参考夕小瑶的卖萌屋的回答)(具体使用可以拼接、加权,线下看是拼接更好)
4. Glove + FastText(window=1) + Word2Vec 效果好于单独使用词向量
分享几个有用的模型-匹配 (赛后会将keras的实现版本开源) (下面的分数是 传统Embedding / BERT静态向量, *表示没跑)
1. ESIM 0.883 / 0.895(注意,很多开源库实现里,在soft_attention后,没有将left, right做交互,只对left和right分别做拼接,将这个修正后分数可以从84-88)
2. DIIN 0.885 / 0.901
3. DRCN 0.87 / *
4. CAFE 0.85 / *
5. BiMPM 0.84 / *
6. RE2 0.82 / * (复现的有问题)
7. ERCNN 0.85 / * (还是感觉复现的有问题)
分类模型的话,普遍效果不太好,感觉是没有捕捉到q1/q2的语义差异, *表示线上未提交
1. RCNN offline 0.93 / *
2. CRNN offline 0.92 / *
3. DeepMOJI offline 0.93 / *
思路3 : GBDT (框架: Xgboost & LightGBM & Catboost)
训练的数据 q1q2 + q2q1
类似的比赛里GBDT类特征效果还是挺不错的,这次使用的特征是缝合怪...把paipaidai Top1/Top14, Quora Pair的开源代码copy过来了..
分5个filed:
1. 图特征: pagerank类(paipaidai Top1),hash_subgraph_qdiff(paipaidai Top1)(word 粒度)
2. 统计类特征: 词转化率,各种距离的统计(Quora Pair)
3. 主题类特征: TFIDF + NMF, TFIDF + LSI
4. 交互类特征: 将q1 q2的各种不同类型(meanpool / maxpool / first / last)的向量(bert / w2v / tfidf-svd)进行统计,计算dot, cosine等
5. 学习类特征: 将q1 q2拼接成一个句子,使用tfidf + countvec拼接当特征,过各种弱学习器后拼接概率
对GBDT类模型,校验对称性的方法就是,预测q1 q2和q2 q1的概率,看这两组概率的相关性,如果较低说明有必要对偶一下(提升会比较明显)
MASK、数据构造方面
0. 没有对词频做筛选,使用了全部的词
1. ngram mask 在这起到的感觉是类似 脱敏前的 wwm mask的效果
2. random mask的策略也比较重要,可以试试针对oov的mask
3*. follow ngram mask的思路,实际上是构造了新词,那我们可以手动的生成各种ngram的词汇,从而进行数据增强
4. 一定要使用q1 + " " + q2这种方式来预训练,比 np.hstack((q1, q2))要好很多
调参炼丹方面
1. FGM (eps=0.5) > PGD(eps=0.5, alpha=0.6, K=3) (3-5k, 感觉是参数设置问题不太好收敛)
2. Lookahead (1k, 很慢)
3. LabelSmoothing (0.2k, 收敛变慢...)
4. 字向量(直接训练出来的Embedding) + 动态词向量(字向量+LSTM) > Ori Embedding (3k, 0.878--->0.881)
5. KFold 交叉验证的折数在0.91后收益减小 (3-5k, 单模单折我理解指全数据训练固定Epoch)
6. Stacking使用的是lgb,大概放了10个模型进去(orz跑的太慢了),对复赛是不友好的..还是得努力提升单模
打算实践的探索思路
1. 对比学习A,Follow triplet-loss (q1, q2, q3, label), 可以使用大量的闭包关系来构造(author, left, right)数据,但是难点在测试集如何构造,以及图上的孤立点如何构造
2. 对比学习B,Follow SCL (facebook & Standford)的方法,在pretrain的时候把同类(query group)的当正样本,不同类的当负样本,MLM+分类任务
3. 对比学习C,Follow SimCLR,做二次的pretrain,具体定义数据表征方法为EDA(EMNLP 2019), x'与x''为正样本,x'与y'为负样本,吃机器,跑不动
4. 半监督,可以从test里构造大量的pair来构造自标注样本,计算量有点大,笛卡尔积(100000 * 25000),目前没想到优化方法,机器吃不消
5. Link-Prediction,难点在图节点怎么定义
1 sentence-bert
论文地址:https://arxiv.org/pdf/1908.10084.pdf
git 地址:https://github.com/UKPLab/sentence-transformers
论文笔记:Sentence-BERT 论文阅读_甘如荠-CSDN博客
模型:
2 Match zoo
论文地址:https://arxiv.org/pdf/1905.10289v1.pdf
论文笔记:
一个文本匹配库
基于表示的模型包括ARC-I[4]、DSSM[5]、CDSSM[8]、MV-LSTM[9]等;•基于交互的模型包括DRMM[3]、ARC-II[4]、KNRM[10]等
MatchZoo简单使用_天涯的博客-CSDN博客_matchzoo
3 Semantics-aware BERT for Language Understanding
论文地址:https://arxiv.org/abs/1909.02209
git 地址:
论文笔记:
Semantics-aware BERT for Language Understanding - 知乎
数据:
The Stanford Natural Language Inference (SNLI) Corpus :The Stanford Natural Language Processing Group
标签分别为矛盾,蕴含(eintailment),中立三种
3 Interactive Attention Networks for Semantic Text Matching
1、什么是文本匹配?
文本匹配是自然语言处理中一个重要的基础问题,可以应用于大量的NLP任务中,如信息检索、问答系统、复述问题、对话系统、机器翻译等,这些NLP任务在很大程度上可以抽象为文本匹配问题。例如网页搜索可抽象为网页同用户搜索Query的一个相关性匹配问题,自动问答可抽象为候选答案与问题的满足度匹配问题,文本去重可以抽象为文本与文本的相似度匹配问题。
2、文本匹配方法概述
2-1 传统文本匹配方法
传统的文本匹配技术有BoW、VSM、TF-IDF、 BM25、Jaccord、SimHash等算法,
如BM25算法通过网络字段对查询字段的覆盖程度来计算两者间的匹配得分,得分越高的网页与查询的匹配度更好。
主要解决词汇层面的匹配问题,或者说词汇层面的相似度问题。
而实际上,基于词汇重合度的匹配算法有很大的局限性,原因包括:
词义局限:“的士”和“出租车”虽然字面上不相似,但实际为同一种交通工具;“苹果”在不同的语境下表示不同的东西,或为水果或为公司
结构局限:“机器学习”和“学习机器”虽然词汇完全重合,但表达的意思不同。
知识局限:“秦始皇打Dota”,这句话虽从词法和句法上看均没问题,但结合知识看这句话是不对的。
这表明,对于文本匹配任务,不能只停留在字面匹配层面,更需要语义层面的匹配。而语义层面的匹配,首先面临语义如何表示,如何计算的问题。
2-2 主题模型
属于无监督技术
上世纪90年代逐渐流行起来语义分析技术(Latent Sementic Analysis, LSA),开辟了一个新思路。将语句映射到等长的低维连续空间,可在此隐式的潜在语义空间上进行相似度计算。
此后,又有PLSA(Probabilistic Latent Semantic Analysis)、LDA(Latent Dirichlet Allocation)等更高级的概率模型被设计出来,逐渐形成非常火热的 主题模型 技术方向。
这些技术对文本的语义表示形式简洁、运算方便,较好地弥补了传统词汇匹配方法的不足。不过从效果上来看,这些技术都无法替代字面匹配技术,只能作为字面匹配的有效补充。
2-3 深度语义匹配模型
随着深度学习在计算机视觉、语音识别和推荐系统领域中的成功运用,近年来有很多研究致力于将深度神经网络模型应用于自然语言处理任务,以降低特征工程的成本。
基于神经网络训练出的Word Embedding来进行文本匹配计算,训练方式简洁,所得的词语向量表示的语义可计算性进一步加强。但是只利用无标注数据训练得到的Word Embedding在匹配度计算的实用效果上和主题模型技术相差不大。他们本质都是基于共现信息的训练。另外,Word Embedding本身没有解决短语、句子的语义表示问题,也没有解决匹配的非对称性问题。
一般来说,深度文本匹配模型分为两种类型: 表示型和交互型。
表示型
表示型模型更侧重对表示层的构建,会在表示层将文本转换成唯一的一个整体表示向量。
representation-based类模型,思路是基于 Siamese 网络,提取文本整体语义再进行匹配
典型的Siamese结构,双塔共享参数,将两文本映射到统一空间,才具有匹配意义
表整层进行编码,使用MLP, CNN, RNN, Self-attention, Transformer encoder, BERT均可
匹配层进行交互计算,采用点积、余弦、高斯距离、MLP、相似度矩阵均可
经典模型有:DSSM, CDSSM, MV-LSTM, ARC-I, CNTN, CA-RNN, MultiGranCNN等
优点:可以对文本预处理,构建索引,大幅度降低在线计算耗时
缺点:失去语义焦点,易语义漂移,难以衡量词的上下文重要性。
相关算法
DSSM: 2013年由微软Redmond研究院发表,全称DSSM(Deep Structured Semantic Models)
CDSSM:2014年由微软提出,弥补了DSSM会丢失上下文的问题,全称Convolutional latent semantic model(又称CLSM)
主要将DNN替换成了CNN
MV-DSSM:2016年由微软发表,MV为Multi-View,一般可以理解为多视角的DSSM
ARC-I:2014年由华为若亚方舟实验室提出
交互型
交互性模型摒弃后匹配的思路,假设全局的匹配度依赖于局部的匹配度,在输入层就进行词语间的先匹配,并将匹配的结果作为灰度图进行后续的建模。
interaction-based类模型,思路是捕捉直接的匹配信号(模式),将词间的匹配信号作为灰度图,再进行后续建模抽象
交互层,由两文本词与词构成交互矩阵,交互运算类似于 attention,加性乘性都可以
表征层,负责对交互矩阵进行抽象表征,CNN、S-RNN均可
经典模型有:ARC-II、MatchPyramid、Match-SRNN、K-NRM、DRMM、DeepRank、DUET、IR-Transformer、DeepMatch、ESIM、ABCNN、BIMPM等
优点:更好地把握了语义焦点,能对上下文重要性进行更好的建模
缺点:忽视了句法、句间对照等全局性信息,无法由局部匹配信息刻画全局匹配信息
相关算法
ARC-II:2014年由华为诺亚方舟实验室提出
MatchPyramid:2016年由中科院提出
ABCNN:2016年由IBM提出
ESIM:2017年由朱晓丹提出
(ColBERT) Khattab, O., & Zaharia, M. (2020). ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT. ArXiv, abs/2004.12832. [PDF](Poly-encoders) Humeau, S., Shuster, K., Lachaux, M., & Weston, J. (2020). Poly-encoders: Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring. ICLR.[PDF]Chang, W., Yu, F.X., Chang, Y., Yang, Y., & Kumar, S. (2020). Pre-training Tasks for Embedding-based Large-scale Retrieval. ArXiv, abs/2002.03932.[PDF]