DateWhale--2021.1--Task4

本Task的主要任务,是进行文本分类。在原始数据中,有作者填写好的分类。而我们要通过机器学习的方法,根据文章的标题、摘要,来预测文章分类。

数据处理步骤

  • 对论文标题和摘要进行处理
  • 对论文类别进行处理
  • 构建文本分类模型

文本分类思路

  • 思路1:TF-IDF + 机器学习分类器
    直接使用TF-IDF对文本提取特征,使用分类器进行分类,分类器的选择上,可以使用SVM、LR、XGBoost等
  • 思路2:FastText
    FastText是入门款的词向量,利用FaceBook提供的FastText工具,可以快速构建分类器。
  • 思路3:WordVec+深度学习分类器
    WordVec是进阶款的词向量,并通过构建深度学习分类完成分类。深度学习分类的网络结构可以选择TextCNN、TextRnn、或者Bilstm
  • 思路4:Bert词向量
    Bert是高配款词向量,具有强大的建模学习能力。

处理文本Feature(标题&摘要)

data["text"] = data["title"]+data["abstract"]

data["text"] = data["text"].apply(lambda x:x.replace('\n',' '))
data["text"] = data["text"].apply(lambda x: x.lower())
data = data.drop(['abstract',"title"],axis=1)

str.replace('\n',' ')替换条换行符
str.lower()统一变成小写

处理类别Target(类别)

由于一篇论文是有多个分类的标签的,所以这是一个多目标分类问题。

# 多个类别,包含子分类
data["categories"]=data["categories"].apply(lambda x:x.split(' '))
# 单个类别,不包含子分类
data["categories_big"] = data["categories"].apply(lambda x: [xx.split(".")[0] for xx in x])

str.split(" ")使用空格进行切分,形成列表。
[xx.split(".")[0] for xx in x]对每一项,再使用点进行切分,保留点前面的

Target多类别的编码

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
data_label = mlb.fit_transform(data["categories_big"])
多类别编码.png

由于总共有34种论文的分类,所以目标列就被fit_transform为一个34列的系数矩阵,某一篇论文属于哪几种分类,就在对应的列写1,其余的就是0。


多分类编码的类别名称.png

多分类编码的类别名称,可以使用mlb.classes_获得。

思路1:使用TFIDF+机器学习

步骤1:将文本提取出TFIDF特征

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(max_features=4000)

初始化一个TfidfVectorizer模型,限制最多4000个单词

data_tfidf = vectorizer.fit_transform(data['text'])

使用文本特征进行fit_transform,


模型单词表.png

vectorizer.get_feature_names()可以获得单词表,总共有4000个单词。


tfidf对象.png

每一篇论文的标题和摘要,都通过TFIDF,转换成为了一个4000维的向量。但是稀疏矩阵的形式,没法直接print出来。这个4000维的向量,可以理解为这4000个单词在该条文本中的重要度吧。

步骤2:划分训练集和测试集

# 划分训练集和验证集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data_tfidf
                                                 ,data_label
                                                 ,test_size=0.2
                                                ,random_state=1)

以上,使用MultiLabelBinarizer把Target转换为34列,使用TfidfVectorizer把文本转换为4000列。在次基础上,再进行测试集的划分。

步骤3:构建多标签分类器

# 构建多标签分类模型
from sklearn.multioutput import MultiOutputClassifier
from sklearn.naive_bayes import MultinomialNB
clf = MultiOutputClassifier(MultinomialNB()).fit(x_train,y_train)

from sklearn.metrics import accuracy_score
accuracy_score(y_test,clf.predict(x_test))

这里使用了两层嵌套的模型,MultiOutputClassifier里面,包着MultinomialNB。
MultiOutputClassifier是用来扩展多目标分类的。
而里面的MultinomialNB就是一个分类器,多项式本朴素贝叶斯,可以换成SVM、LR、XGBoost等其他的分类器。
如使用XGBoost,代码如下,此时模型fit的时间会比较长。

import xgboost as xgb

model = MultiOutputClassifier(xgb.XGBClassifier(n_jobs = -1))
model.fit(x_train, y_train)
accuracy_score(y_test,model.predict(x_test))

步骤4:查看分类报告

from sklearn.metrics import classification_report
print(classification_report(y_test,clf.predict(x_test), target_names=classes))
分类报告.png

分类报告提供了每种类别的准确率、召回率以及F1值

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 4.1 任务说明 学习主题:论文分类(数据建模任务),利用已有数据建模,对新论文进行类别分类; 学习内容:使用论文...
    希娅_d503阅读 171评论 0 0
  • 任务4:论文种类分类 学习链接: 多标签分类(multi-label classification)综述:http...
    ShowMeCoding阅读 1,654评论 0 1
  • 系列文章综述 这个系列会包含两部分与金融数据处理有关的文章,第一部分分析数据,第二部分从已经分析的数据中进行信息提...
    吕不韦阅读 11,018评论 0 9
  • 1、特征工程 归一化 方法:(1)Min-Max: ;(2)Z-Score: 意义:归一化让不同特征映射到相同的数...
    amyhy阅读 760评论 0 0
  • 第一次完整地打完一次数据竞赛,虽然成绩一般,但还是学习到了一些东西,特此总结一下。文章主要内容如下: 赛题介绍我的...
    anye137阅读 620评论 0 0