- 长文本的智能解析实战
如何从纷繁多变、信息量庞杂的冗长文本中获取关键信息,一直是文本领域难题。随着深度学习的热潮来临,有许多新方法来到了 NLP 领域,给相关任务带来了更多优秀成果,也给大家带来了更多应用和想象的空间。
- 用传统的监督学习模型对一段文文本进行分类的基本过程:
一段原始文本→(数据预处理)→处理后的文本→(特征工程)→Features→(输入)→→(输出)→类别
注:特征工程是整个机器学习过程中最要的部分。特征决定了机器学习的上限,而机器学习算法只是逼近这个上限。
train_set.csv:此数据集用于训练模型,每一行对应一篇文章。文章分别在“字”和“词”的级别上做了脱敏处理。共有四列: 第一列是文章的索引(id),第二列是文章正文在“字”级别上的表示,即字符相隔正文(article);第三列是在“词”级别上的表示,即词语相隔正文(word_seg);第四列是这篇文章的标注(class)。
注:每一个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的!
test_set.csv:此数据用于测试。数据格式同train_set.csv,但不包含class。
注:test_set与train_test中文章id的编号是独立的。
- CountVectorizer() #文本特征提取
- 达观杯智能文本处理竞赛代码
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sat Dec 1 17:14:12 2018 4 5 @author: Administrator 6 """ 7 8 9 print("开始......")10 import pandas as pd11 # pandas用于处理更大的数据集12 from sklearn.linear_model import LogisticRegression13 # 定义逻辑回归函数14 from sklearn.feature_extraction.text import CountVectorizer15 # 定义文本特征提取16 df_train = pd.read_csv('./train_set.csv')17 df_test = pd.read_csv('./test_set.csv')18 df_train.drop(columns=['article','id'], inplace=True)19 # 删除指定列 , inplace可选参数20 df_test.drop(columns=['article'],inplace=True)21 # 测试数据删除指定列article22 vectorizer = CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000)23 vectorizer.fit(df_train['word_seg'])24 x_train = vectorizer.transform(df_train['word_seg'])25 x_test = vectorizer.transform(df_test['word_seg'])26 y_train = df_train['class']-127 # 训练一分类器28 # 知识点定位:统监督学习算法之线性逻辑回归模型AAA29 lg = LogisticRegression(C=4,dual = True)30 #c:正则化系数λ的倒数,float类型,默认为1.0。31 #必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化;32 lg.fit(x_train,y_train)33 '''根据训练好的分类型对测试集的样本进行预测'''34 y_test = lg.predict(x_test)35 """保存预测结果至本地"""36 df_test['class'] = y_test.tolist()#tolist()将数组或者矩阵转换成列表37 df_test['class'] = df_test['class'] + 138 df_result = df_test.loc[:,['id','class']]39 df_result.to_csv('./result.csv',index = False)40 41 print("ok")