“达观杯”文本智能处理挑战赛

Contents

一、背景

“达观杯”文本智能处理挑战赛,建立模型通过长文本数据正文(article),预测文本对应的类别(class)

二、数据介绍

数据内容
数据包含2个csv文件:

  1. train_set.csv:此数据集用于训练模型,每一行对应一篇文章。文章分别在“字”和“词”的级别上做了脱敏处理。共有四列:
    第一列是文章的索引(id),第二列是文章正文在“字”级别上的表示,即字符相隔正文(article);第三列是在“词”级别上的表示,即词语相隔正文(word_seg) 第四列是这篇文章的标注(class)。
    注:每一个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的!
  2. test_set.csv:此数据用于测试。数据格式同train_set.csv,但不包含class。 注:test_set与train_test中文章id的编号是独立的。

数据下载链接: https://pan.baidu.com/s/1Fes5v8gJQcg4LSKXnlklew 提取码: zq7e
(此数据来源于“达观杯”文本智能处理挑战赛)

数据大小
原始数据
训练集:(102277, 4)
测试集:(102277, 3

三、实例展示

简单的代码测试

导包

import os
import pandas as pd

from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer

文本预处理

#: 加载原始数据
def load_raw_data(data_dir = '.'):
    train_data_path = os.path.join(data_dir,'train_set.csv')
    test_data_path = os.path.join(data_dir,'test_set.csv')
    
    df_train = pd.read_csv(train_data_path) # 读取训练集数据
    df_test = pd.read_csv(test_data_path) # 读取测试集数据
    
    df_train.drop(columns = ['article'], inplace = True) # 删除训练集中的article列
    df_test.drop(columns = ['article'], inplace = True) # 删除测试集中的article列
    
    return df_train, df_test

特征提取

#: 特征提取
def extract_features(raw_train, raw_test):
    vectorizer = TfidfVectorizer(
        ngram_range = (1,2), 
        min_df = 3, 
        max_df = 0.9, 
        sublinear_tf=True) # 初始化一个CountVectorizer对象
    vectorizer.fit(raw_train['word_seg']) # 构建词汇表
    
    x_train = vectorizer.transform(raw_train['word_seg']) # 将一篇文章转为与其对应的一个特征向量
    x_test = vectorizer.transform(raw_test['word_seg']) # 将一篇文章转为与其对应的一个特征向量
    y_train = raw_train['class']-1 # 因为从0开始计算,所以要将原值-1
    y_test = None # to predict
    
    return x_train, y_train, x_test, y_test

开始训练

print ('开始训练...')
print ('-[stage I] Loading Data ...')
%time raw_train, raw_test = load_raw_data('.')

print ('-[stage Ⅱ] Extracting Features ...')
%time x_train, y_train, x_test, y_test = extract_features(raw_train, raw_test)
print ('-[stage Ⅲ] Traing and Predicting ...')
%time
lg = LogisticRegression(penalty='l2',C = 4, dual = True) # 初始化一个分类器
lg.fit(x_train, y_train) # 训练这个分类器

# 根据上面训练好的分类器对测试集的每个样本进行预测
y_test = lg.predict(x_test)

保存训练结果

raw_test['class'] = y_test.tolist() # 转换为Python的List形式
raw_test['class'] = raw_test['class'] + 1 # 将class + 1,保证和官方的预测值一致
raw_result = raw_test.loc[:, ['id', 'class']]
raw_result.to_csv('./result.csv', index = False) # 将结果保存至本地文件

四、小结
以上代码只是进行初步训练,得到的结果,后续需要进行进一步的尝试和模型的训练。

Further Reading

[1] scikit-learn.org


转载请注明:yezuolin的博客 » 点击阅读原文