长期更新中,如果其中提到的技巧对您有帮助,请点个赞。
本文是对于我之前参加过的NLP比赛总结出来的一些经验,希望这些tricks能对大家有所帮助。
输入
1、字向量
2、词向量
3、位置编码,tm的相对位置编码或者w2v思路的位置编码
4、对于字向量与词向量如果要采用相加的形式组合在一起,可以把词向量重复n词,n表示的是当前词有多少个字
序列标注问题
1、采用BI0做数据标注
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、预训练模型Bert、XLNet等
2、RNN+Attention
3、CNN+MAXPool
4、Dilate CNN + Gate CNN + Attention
模型融合
1、stacking,可能过拟合
2、融合多个模型的最优答案作为单个样本的最终预测结果。每个模型对某个样本的预测都可能存在错误,而有些错误是显而易见的,
而且存在固定的模式。因此在融合多个模型的多个主体的过程中,针对错误答案做了一定的过滤处理,过滤方式包括判断词性,判断是否是停止词。
3、对于每一条数据预测出来的实体,票数过半的作为输出候选项,随后从票数过半的实体中选出得分最高的前n个作为该句话的最终预测结果。这样既能保证偶然的错误预测不被选入,同时又能保证正确的多个答案能够尽可能多的输出。