学习主题:论文分类(数据建模任务),利用已有数据建模,对新论文进行类别分类;
学习内容:使用论文标题完成类别分类;
学习成果:学会文本分类的基本方法、TF-IDF等;
文本分类:
思路一 :TF-IDF + ml 分类器
直接使用TF-IDF对文本提取特征,使用分类器完成分类,分类器可以使用SVM、LR 、xgboost等
思路二 :FastText
FastText是入门款的词向量,利用Facebook 提供的FastText工具,可以快速构建分类器
思路三 :word2vec + 深度学习分类器
word2vec是词向量,并通过构建深度学习分类完成分类。深度学习分类的网络结构可以选择textCNN,textRNN,BiLSTM等
思路四 :Bert词向量
Bert 是高配款的词向量,具有强大的建模学习能力。
import json
import pandas as pd
data = []
with open('/content/arxiv-metadata-oai-snapshot.json' , 'r') as f:
for idx, line in enumerate(f):
d = json.loads(line)
d = {'title': d['title'], 'categories': d['categories'], 'abstract': d['abstract']}
data.append(d)
data = pd.DataFrame(data)
data.head()
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(["title","abstract"], axis = 1)
data.head(20)
# 处理分类
# 多个类别,包含子类别
data['categories'] = data['categories'].apply(lambda x : x.split(' '))
data.head(20)
# 单个类别,不包含子类别
data['categories_big'] = data['categories'].apply(lambda x :[xx.split(".")[0] for xx in x])
data.head(20)