达观杯文本处理模型实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xianqianshi3004/article/details/88319110

tf-idf+lr

采用前文处理的tf-idf文件进行简单的模型预测,没有加入交叉验证。
代码如下:

在这里插入图片描述
这里用到了前几篇文章中处理的数据,用pickle读取即可,当时之所以分批保存到不同的pickle文件是因为内存不够直接存在一个文件中内存报错,所以选择了分别存取。
我们可以看到每一个文件被处理成200多万维度的向量,显然比较大,后期准备使用pca处理一下(这个想法直接pass掉吧,因为维度太大了,pca处理不了),先简单的用lr跑一下。
在这里插入图片描述
这个结果提交到达观杯官网上结果是0.77256,作为baseline,后期再改进。

tf-idf+svm

用了之前的处理的tf-idf数据,然后试了试svm模型,质量相比lr有提高但是复读不大附上代码吧在这里插入图片描述

word2vec+svm

整体思路是把每一个文章中的每一个词的词向量叠加起来然后取平均,然后处理成300维度的向量,放到svm中训练。
在这里插入图片描述

在这里插入图片描述

x_train=w_arr(df_train)
x_test=w_arr(df_test)
import pickle
###把处理的文件转化成pickle序列化存储起来,下次使用比较方便
fp = open('data_w_vec_train_x.pkl', 'rb')
x_train=pickle.load( fp)
fp = open('data_w_vec_text_x.pkl', 'rb')
x_test=pickle.load(fp)
fp.close()

SVM

from sklearn import svm
svclf = svm.LinearSVC() 
svclf.fit(x_train,y_train)
preds = svclf.predict(x_test)
submit['class']=list(preds)
submit.to_csv('./data/submit_svm_wv.csv',index=False)

最后提交的分数很低,0.71,应该文本太长了然后把词向量叠加起来应该损坏了词向量。
然后试了试lda分解直接把内存撑爆。

tf-idf+lgb

以为降维的话200维内存扛不住,太低效果很差,所以直接就把数据塞进lgb里面,然后因为数据量太大,所以只选取了其中的50%的数据训练。

import lightgbm as lgb
import pickle
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

f=open('./data_w_tfidf_train.pkl','rb')
x_train=pickle.load(f)
f=open('./data_w_tfidf_test.pkl','rb')
x_test=pickle.load(f)
f=open('./data_w_tfidf_train_y.pkl','rb')
y_train=pickle.load(f)
params = {
       'boosting': 'gbdt',
        'application': 'multiclass',
        'num_class': 20,
        'learning_rate': 0.1,
        'num_leaves':31,
        'max_depth':-1,
        'lambda_l1': 0,
        'lambda_l2': 0.5,
        'bagging_fraction' :1.0,
        'feature_fraction': 1.0,
        'bagging_freq': 5,  # k 意味着每 k 次迭代执行bagging
        'verbose': 1 ,# <0 显示致命的, =0 显示错误 (警告), >0 显示信息
        }


x_train, x_vali, y_train, y_vali = train_test_split(x_train, y_train, test_size=0.5, random_state=0)
d_train = lgb.Dataset(data=x_train, label=y_train)
d_vali = lgb.Dataset(data=x_vali, label=y_vali)

bst = lgb.train(params, d_train, num_boost_round=200, valid_sets=d_vali,early_stopping_rounds=100)
y_test = np.argmax(bst.predict(x_test), axis=1)

结果并不理想,等再研究研究怎么多次训练模型。先到这。

猜你喜欢

转载自blog.csdn.net/xianqianshi3004/article/details/88319110