北航學長的NLP賽事教程!

賽事背景
在人工智能領域的學習中,研讀有關文獻是非常重要的學習途徑,而如何在汗牛充棟的論文庫中,高效快速的檢索到相關重要文獻,就成為知識學習首先要解決的難點。
完整代碼實踐:
https://xj15uxcopw.feishu.cn/docx/doxcnUDk1pzzvBWi5AIfBGBpyne
賽題任務
機器通過對論文摘要等信息的理解,劃分論文類別。具體輸入輸出示例如下:
輸入:論文信息,格式如下圖

輸出:電氣
實踐思路
本賽題是一個典型的文本分類任務。由于文本數(shù)據是典型的非結構化數(shù)據,此類實踐的處理通常涉及到 特征提取 和 分類模型 兩部分。常見的思路有兩種:基于機器學習的思路和基于深度學習的思路。
可以先嘗試基于機器學習的思路:TF-IDF + 機器學習分類器,其中分類器選擇SGD線性分類器。SGD是線性分類器的一種,可以理解為邏輯回歸+隨機梯度下降,適合處理文本TF-IDF編碼后的稀疏場景。

實踐代碼
具體代碼如下:
#安裝相關依賴庫 如果是windows系統(tǒng),cmd命令框中輸入pip安裝,參考上述環(huán)境配置
#!pip install sklearn
#!pip install pandas
#---------------------------------------------------
#導入庫
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score
#----------------數(shù)據探索----------------
#數(shù)據預處理
#加載訓練集
train_df = pd.read_csv('./基于論文摘要的文本分類與查詢性問答公開數(shù)據/train.csv', sep=',')
#加載測試集
test_df = pd.read_csv('./基于論文摘要的文本分類與查詢性問答公開數(shù)據/test.csv', sep=',')
#EDA數(shù)據探索性分析
train_df.head()
test_df.head()
#----------------特征工程----------------
#將Topic(Label)編碼
train_df['Topic(Label)'], lbl = pd.factorize(train_df['Topic(Label)'])
#將論文的標題與摘要組合為 text 特征
train_df['Title'] = train_df['Title'].apply(lambda x: x.strip())
train_df['Abstract'] = train_df['Abstract'].fillna('').apply(lambda x: x.strip())
train_df['text'] = train_df['Title'] + ' ' + train_df['Abstract']
train_df['text'] = train_df['text'].str.lower()
test_df['Title'] = test_df['Title'].apply(lambda x: x.strip())
test_df['Abstract'] = test_df['Abstract'].fillna('').apply(lambda x: x.strip())
test_df['text'] = test_df['Title'] + ' ' + test_df['Abstract']
test_df['text'] = test_df['text'].str.lower()
#使用tfidf算法做文本特征提取
tfidf = TfidfVectorizer(max_features=2500)
#----------------模型訓練----------------
train_tfidf = tfidf.fit_transform(train_df['text'])
clf = SGDClassifier()
cross_val_score(clf, train_tfidf, train_df['Topic(Label)'], cv=5)
test_tfidf = tfidf.transform(test_df['text'])
clf = SGDClassifier()
clf.fit(train_tfidf, train_df['Topic(Label)'])
test_df['Topic(Label)'] = clf.predict(test_tfidf)
#----------------結果輸出----------------
test_df['Topic(Label)'] = test_df['Topic(Label)'].apply(lambda x: lbl[x])
test_df[['Topic(Label)']].to_csv('submit.csv', index=None)
上分思路
上述代碼詳細講解了基于機器學習的思路,若想進階實踐,可考慮嘗試基于深度學習來進行實踐,提供以下幾種常見解題思路供大家參考:
思路1:FastText:FastText是入門款的詞向量,利用Facebook提供的FastText工具,可以快速構建出分類器。 思路2:WordVec + 深度學習分類器:WordVec是進階款的詞向量,并通過構建深度學習分類完成分類。深度學習分類的網絡結構可以選擇TextCNN、TextRNN或者BiLSTM。 思路3:Bert詞向量:Bert是高配款的詞向量,具有強大的建模學習能力。
新手村
本文為Datawhale項目實踐1.0的教程,如果你是在校生,或者剛入門階段,可以進內測群,我們在學習反饋中一起優(yōu)化教程。
整理不易,點贊三連↓
評論
圖片
表情
