bilstm-crf_序列标注问题


详情见:
分类问题中,对于训练数据中,如何找出真正有效的数据和让模型自动标注:https://www.cnblogs.com/YouXiangLiThon/p/7519263.html
解决样本类别分布不均衡的问题:https://blog.csdn.net/smhdezhanghao/article/details/81811124
深度学习之解决模型不收敛的问题:https://blog.csdn.net/qq_32571391/article/details/86647001
机器学习深度学习常见问题汇总:https://blog.csdn.net/weixin_35479108/article/details/96981548
NLP任务样本数据不均衡问题解决方案的总结和数据增强回译的实战展示:https://blog.csdn.net/HUSTHY/article/details/103887957

一、增加方位词
(原因:样本中方位词量不够,这样会导致模型识别效果不好),无效词标样本不平衡(数量较少):向、往、东、
路+东南西北里外左右上下;
添加标准:如果样本中含有/o的词,则有多少就多增加多少数据,并将/o位置的词依次由
二、增加四级的多样性+四级词汇标准:提高四级词汇的识别功能:
1.通过地址树获取所有四级词汇的尾缀词:suffix_list
2.通过地址树获取所有四级词汇的长度,并转换为列表,len_town=[]
3.获取结巴字典,jieba_dict
4.若样本中含有四级词汇,则开始生产四级词:(1.)len_town随机选取一个数字作为四级词汇长度,num。
                                      (2.)随机从suffix_list选择一个suffix
                                      (3)随机从jieba_dict中选取num-len(suffix)个字符,拼接为preffix
                                      (4.)preffix+suffix即为新生成的四级词
 

2.加入方位词,模型样本类别不均衡,增加样本多样性,实现模型对多类别方位词的识别
3.加入特殊符号,因为在原始数据中如果将特殊符号去掉后,可能会造成模型语义理解模糊或者因为模型本身某些
  词语过拟合导致划分出错,地址中含有特殊符号,如"山东济南市天桥区城区济泺路工人新村南村(东区)66楼2单元502室";将()都转换为*后,则可以将数据中的”东区“,加入特殊符号后,这些特殊符号可以作为自动分割标志


4.模型监控:(1.)监控模型训练过程中标签在测试集上的预测效果(准确率、精准率、召回率,f1score)
    (2.)监控在训练集上的效果,选取1W数据,且每7轮进行可视化,原因:降低因为cpu中断训练导致模型训练速度减慢
    (3.)优化原始模型embedding训练集:原来是每epoch都会将数据进行embedding,加长了模型的训练时间,
    因此直接将模型的训练trainData进行embedding放入内存,每个epoch时间压缩一半,由2个半小时压缩至1小时(800W数据)
    (4.)loss值如果一直在减小,则将减小的模型作为目标模型,如果loss值连续50轮未下降,默认当前模型为最优模型


5.loss值达到0.03,但是在训练集和测试集上的效果并不明显,都为0.89,相差只有0.001,因此不存在模型
过拟合或者欠拟合;
**样本调整:数据分类的标注不准确,样本的信息量太大导致模型不足以fit整个样本空间

主要原因:训练集数据标注不够好,因为同一类词语却被标注不同,导致模型对序列理解含有歧义性,
如:在训练集中:"小区"的标注为:明日嘉园小区/s,但是也有:明日家园/s小区/s;XX街道/s,XX街道/v;这种同数据多样化的标注会降低模型对语义的理解,由此导致模型loss值降低,但是在训练集上的表现不好;
选取解决对象:("小区"类、"街道",商业圈(公司银行))
根据实际业务需求进行合并与重新打标、(医院、公司)>>使用高德POI中爬取的数据进行取代

3.batch_size增大(512-->> 1024:每轮数据量增加,防止每轮训练时模型过拟合,如:若只有一条数据,则模型会万全拟合这条数据,由此训练出来的模型不能理解除了这条数据之外的模型
  learningrate减小:防止模型找不到模型迭代过程中的最优loss,模型可以更好的学习到边界数据
  
  shuffle:避免数据进入的顺序对网络的训练造成影响,增加随机性,提高网络的泛化性能,
避免因为有规律的数据出现,导致权重更新时的梯度过于极端,
   避免最终模型过拟合或者欠拟合;如:训练32个省的数据,依次放入每个城市的数据,则最后进入的城市的被识别的效果最好,第一个进入模型的城市识别性能最差
   
4.后处理:含有多个POI时,根据poi得分进行决定选取最终目标词,其余的作为别名进行存储;

常见测试集与训练集指标变化规律总结:
train loss 不断下降,test loss不断下降:说明网络仍在学习;
train loss 不断下降,test loss趋于不变:说明网络过拟合;
train loss 趋于不变,test loss不断下降:说明数据集100%有问题;
train loss 趋于不变,test loss趋于不变:说明学习遇到瓶颈,需要减小学习率或批量数目;或者是数据集有问题(数据集标注错误数据比较多)
train loss 不断上升,test loss不断上升:说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题

3.模型每个batch下提前将数据读取到内存,且将train数据指标不再监控(减少打印log),test数据进行指标监控时随机选取1W条数据进行计算指标(减小运算,后续需要)
2.增加模型监控指标(调整batchsize、学习率)

1.训练集调整

你可能感兴趣的:(日记-study,tensorflow)