Awesome
2018年"达观杯"文本智能处理挑战赛-长文本分类-rank4
非常感谢达观杯给我们提供这次机会以及科赛平台提供了很棒的GPU,再次感谢。
赛题网址:
任务:
达观数据提供了一批长文本数据和分类信息,结合当下最先进的NLP和人工智能技术,深入分析文本内在结构和语义信息,构建文本分类模型,实现精准分类。
数据集
https://pan.baidu.com/s/13IMDPMz0rf8kM1JAea53uQ
password: y6m4
解决方案:
由于部分代码暂时有用,现在只公开一个单模型:B榜单模型分数可达到0.798.
对于这个文本分类任务,有个小的操作其实都可以达到很高的分数,即使模型不够优秀。通过对于词向量做一个增强,即利用word2vec与glove的差异性,构建一个鲁棒性更高的词语向量表征。大家也可以试试word2vec+glove+faxttext的组合,对于我来说,效果并不是很好,我觉得可能的原因是faxttext与word2vec的相似性很高,弱化了glove的向量表征,同时,对于glove单独的词向量我也没有尝试过,大家也可以尝试一下。
对于模型的话,我开源了一个双层的biGruModel模型,最近也开源了rnnCapsuleModel,希望大家可以取得更好的成绩!
运行环境
-
tensorflow-gpu>=1.10.0
-
keras==2.16.0
-
gensim==3.6.0
-
scikit-learn==0.20.2
模型运行:
1、将原始数据集input到data文件夹
2、运行 python read_data.py,从而将原始数据的csv格式转化为feather格式(因为feather格式读取数据较快)
3、由于应用到glove算法生成词向量和字向量,且没有python接口,我们使用斯坦福大学开源的C语言版本的glove库。
生成词向量
(1)python glove_word.py (生成glove所需要的格式的词向量)
(2) make & sh glove_word.sh (生成词向量)
(3)将生成的词向量(glove_vectors_word.txt)放入embedding 文件夹下
python glove_word.py
make & sh glove_word.sh
生成字向量
(1)python glove_char.py (生成glove所需要的格式的字向量)
(2) make & sh glove_char.sh (生成字向量)
(3)将生成的词向量(glove_vectors_char.txt)放入embedding 文件夹下
python glove_char.py
make & sh glove_char.sh
4、运行模型:
biGruModel:
CUDA_VISIBLE_DEVICES=0 python main_glove_word2vec.py --gpu="0" --column_name="word_seg" --word_seq_len=1800 --embedding_vector=200 --num_words=500000 --model_name="bi_gru_model" --batch_size=128 --KFold=10 --classification=19
rnnCapsuleModel:
CUDA_VISIBLE_DEVICES=0 python main.py --gpu="0" --column_name="word_seg" --word_seq_len=1800 --embedding_vector=200 --num_words=500000 --model_name="Gru_Capsule_Model" --batch_size=128 --KFold=10 --classification=19
备注:如果gpu 较小,batch_size 可以设置较小一点
所有的命令都封装在 sh run.sh (很简单一个命令)!
sh run.sh
大概的先介绍到这里,有时间在介绍啦!
下面打个小广告啦!最近开了个公众号,希望和大家一起学习,成长。
关于我们
AI算法之心是一个介绍python、pyspark、机器学习、自然语言处理、深度学习、算法竞赛的平台。不管你是刚入门的小白,还是资深的算法大佬,欢迎扫一扫下方的二维码与我们在AI的领域中一起学习成长!
<div align=center><img src="https://github.com/hecongqing/TextClassification/blob/master/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190122210742.jpg" width="40%" height="40%">