记录下NLP任务一些经验总结。

输入
1、字向量编码
2、词向量编码(如果可以根据语料自己训练)
3、位置编码,相对位置编码或者w2v思路的位置编码
4、对于字向量与词向量如果要采用相加的形式组合在一起,可以把词向量重复n词,n表示的是当前词有多少个字,可以直接保证维度一致

序列标注问题
1、采用BIO做数据标注
2、半指针-半标注,分别预测开始位置与结束位置
3、多实体的可将开始位置与结束位置的softmax替换为sigmoid,选择某个阈值x,大于x则选为开始位置或结束位置
4、采用star/end/none的标注方式,对每个token预测属于哪一类
5、对于1与4思路可采用特征提取器+crf的模式,对于2与3采用特征提取器+softmax/sigmoid的模式
6、对于有约束条件的序列问题,把约束与约束的位置信息编码,或者和约束有关系的trigger与trigger的位置信息编码,如果位置信息很重要,可以把trigger的位置信息和字的位置信息做cosine

文本分类
1、较为明显的fasttext
2、短文本textcnn
3、长文本HAN
4、通吃,精调的BiLSTM+Attention
5、终极方法Bert

关系抽取
1、先识别主实体,一次性识别客实体与关系
2、知识库中进行远程监督式的搜索,构成先验信息

常用特征提取器
1、预训练模型ALbert(快速实验)、Bert、XLNet等
2、RNN(Bilstm)+Attention
3、CNN+MAXPool
4、Dilate CNN + Gate CNN + Attention

类知识蒸馏
1、通过训练模型回溯去改善训练集的标注质量(当训练集标注质量不高,验证集标注较好的情况)
 

模型融合
1、stacking,可能过拟合
2、融合多个模型的最优答案作为单个样本的最终预测结果。每个模型对某个样本的预测都可能存在错误,而有些错误是显而易见的,而且存在固定的模式。因此在融合多个模型的多个主体的过程中,针对错误答案做了一定的过滤处理,过滤方式包括判断词性,判断是否是停止词。
3、对于每一条数据预测出来的实体,票数过半的作为输出候选项,随后从票数过半的实体中选出得分最高的前n个作为该句话的最终预测结果。这样既能保证偶然的错误预测不被选入,同时又能保证正确的多个答案能够尽可能多的输出。
 

虽然参考:,但跟我的想法基本一致