2018-Dc-DataGrand-TextClassification

所属分类:自然语言处理
开发工具:Python
文件大小:11088KB
下载次数:0
上传日期:2018-09-27 06:00:08
上 传 者sh-1993
说明:  2018-Dc-DataGrand-TextClassification,2018Dc达观杯文本智能处理挑战赛:40 3206,比赛链接:[http: www.pkbigdata.com common cmpt “达观杯”文本智能处理挑战赛_竞赛信息.html](http: www.pkbigdata.com common cmpt %E2%80%9C%E8%BE%BE%E8%A7%82%E6%9D%AF%E2%80%9D%E6%96%87%E6%9C%AC%E6%99%BA%E8%83%BD%E5%A4%84%E7%90%86%E6%8C%91%E6%88%98%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html)
(2018-Dc DataGrand TextClassification, 2018-Dc Daguan Cup Text Intelligent Processing Challenge: 40 3206, Competition link: [http: www.pkbigdata.com common cmpt "Da Guan Cup" text intelligent processing challenge competition information. html] (http: www.pkbigdata.com common cmpt% E2% 80% 9C% E8% BE% BE% E8% A7% 82% E6% 9D% AF% E2% 80% 9D% E6% 96% 87% E6% 9C% AC% E6% 99% BA% E8% 83% BD% E5% A4% 84% E7% 90% 86% E6% 8C% 91% E6% 88% 98% E8% B5% 9B_% E7% AB% 9E% E8% B5% 9B% E4% BF% A1% E6% 81% AF. html))

文件列表:
code (0, 2018-09-27)
code\ft.py (1988, 2018-09-27)
code\ft_stacking.py (2661, 2018-09-27)
code\stacking_layer1.py (5791, 2018-09-27)
code\stacking_layer2.py (3972, 2018-09-27)
code\text_cnn.py (3186, 2018-09-27)
code\text_lstm.py (2118, 2018-09-27)
code\tfidf_baseline.py (4220, 2018-09-27)
code\wordvec_baseline.py (2633, 2018-09-27)
达观杯十强分享汇总ppt.pdf (12477368, 2018-09-27)

## 比赛信息 ### 赛题任务 自然语言处理一直是人工智能领域的重要话题,而人类语言的复杂性也给 NLP 布下了重重困难等待解决。长文本的智能解析就是颇具挑战性的任务,如何从纷繁多变、信息量庞杂的冗长文本中获取关键信息,一直是文本领域难题。随着深度学习的热潮来临,有许多新方法来到了 NLP 领域,给相关任务带来了更多优秀成果,也给大家带来了更多应用和想象的空间。 此次比赛提供了一批长文本数据和分类信息,我们需要构建文本分类模型,实现精准分类。 ### 赛题数据 这是一个文本分类的任务,并且针对的是长文本,数据给定了长文本经过分词后的结果,并且数据进行了脱敏处理,无法知道原文本是什么内容,数据特征列如下: - word_seg:str,文本分词后的每一个词,用空格间隔,一个词用一个数字代表 - article:str,文本中的每一个字,同样用空格间隔,一个数字代表一个字。从这里可以看出文本应该是中文,存在字和词的信息。 - class:int,文本所属的类别(共19个类) ## 解决方案 ### 特征提取 文本信息不能作为分类模型的输入,我们必须要将文本的词信息转成数字信息,常用的方法有onehot,tf-idf,LDA,word2vec,在本次比赛中,我采用了tf-idf和word2vec这两种特征提取方法 sklearn中有TfidfVectorizer的工具可以直接将文本信息转成t-fidf矩阵,比较重要的参数如下 - ngram-range:tuple,ngram是指将多个词看成一个词的一种做法,这样做可以将词序考虑进去,而不是将每个词都看成是独立的。 - min_df, max_df:int/double,这两个参数都是限定哪些词需要考虑的,出现太多次或者太少次都需要被过滤。 - use_idf:默认为true - smooth_idf:默认为true防止分母为0。 ```python vec = TfidfVectorizer(ngram_range=(1,3),min_df=3, max_df=0.9,use_idf=1,smooth_idf=1, sublinear_tf=1) x = vec.fit_transform(x) ``` ### 单模型 #### 线性模型 长文本提取出来的tf-idf矩阵维度达到了百万级,远远大于训练集的样本数,这时候选取线性模型的分类效果和训练时间都会比较好,因此我选择了逻辑回归分类器和线性svm作为基本的分类器,并且通过交叉验证和网格搜索找到较好的参数设置。 #### 深度学习模型 - fasttext是Facebook提出的一个快速文本分类的模型,本质上是一个线性模型,因为它的网络没有用到激活函数,而fasttext重要的一点是用到了character-ngram的trick,但是在这个任务中, 由于数据脱敏了,所以这个trick就没有太大的作用 ```python clf = fasttext.supervised(input_file = 'fasttext_trainset.txt', output='fasttext_model', label_prefix = '__label__', bucket = 2000000, word_ngrams = 1, ws = 20, epoch=40, silent = 0) ``` - CNN模型用于文本分类,主要是将文本拼成一个矩阵,然后进行卷积操作,网络结构如下 ```python input_layer = Input(shape = (MAX_WORD_NUM,), dtype = 'int32', name = 'input') embedding_layer = Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length= MAX_WORD_NUM, trainable = True)(input_layer) conv_output = [] for filter_ in [1,2,3,4,5,6]: conv = Conv1D(256, filter_, padding='same')(embedding_layer) conv = Activation('relu')(conv) conv = GlobalMaxPool1D()(conv) conv_output.append(conv) conv_output = concatenate(conv_output) full_connected_layer = Dense(256)(conv_output) full_connected_layer = Dropout(0.3)(full_connected_layer) full_connected_layer = Activation('relu')(full_connected_layer) full_connected_layer = Dense(72)(full_connected_layer) full_connected_layer = Activation('relu')(full_connected_layer) full_connected_layer = Dense(19)(full_connected_layer) ``` - bi-lstm用于文本分类也很常见,lstm能够解决RNN梯度消失的问题,并且能够捕获文本长时间的依赖关系,网络结构如下 ```python input_layer = Input(shape = (MAX_WORD_NUM, ), dtype='int32') embedding_layer = Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=MAX_WORD_NUM, trainable = True)(input_layer) x = Dropout(0.3)(embedding_layer) x = LSTM(units=128, return_sequences= True)(embedding_layer) x = Dropout(0.3)(x) x = Flatten()(x) x = Dense(units=19)(x) ``` ### 模型融合 单模型效果最好的是几个线性模型,深度模型的效果都一般般,但通过最后的stacking,使得整体模型的效果有了一定的提升,stacking过程分5折 - 第一层 - 逻辑回归,搭配不同的solver - linear svc - fasttext - lstm - cnn - 第二层:lgb

近期下载者

相关文件


收藏者