问题:如何通过一个POI(地图上的点)的名称得到POI的分类?
尝试一:基于TextCNN的POI分类
效果:训练速度快(在普通CPU上就可以跑)、效果不错,在500分类中的准确率为75%
尝试二:基于BiLSTM+ATTENTION的POI分类
效果:与TextCNN相比准确率差不多,但是训练速度较慢
尝试三:基于Bert的POI分类
使用的是keras_bert,与keras不同的点:1.tokenizer使用bert自带的vocab,bert输入的起始和结尾的符号在tokenizer中都会处理好,使用tokenizer.encode的方法,会返回两个embbeding,因为封装的bert模型有两个输入 2.keras_bert的load_trained_model_from_checkpoint导入bert模型,具体的可借鉴https://github.com/bojone/bert_in_keras/blob/master/sentiment.py
效果:待后续更新
具体步骤:
1.通过已有的POI名称和类型,构造训练样本
问题:1.样本倾斜,有很多类别的样本数量太少,有些太多
2.只有POI名称,导致很有有二意性的名称无法区分,如苹果店(水果店or手机店)
2.使用数据训练模型,调参得到较好的效果
3.反馈问题,优化模型和训练样本
4.使用到的Trick:
由于是多分类,而且很多是多个类别都合适,使用了Label Smooth,提升了2%的准确率