網(wǎng)站做推廣需要多少錢seo博客優(yōu)化
完整源碼項目包獲取→點擊文章末尾名片!
使用HuggingFace開發(fā)的Transformers庫,使用BERT模型實現(xiàn)中文文本分類(二分類或多分類)
首先直接利用transformer.models.bert.BertForSequenceClassification()實現(xiàn)文本分類
然后手動實現(xiàn)BertModel + FC 實現(xiàn)上邊函數(shù)。其中可以方便的更改參數(shù)和結(jié)構(gòu)
然后實驗了論文中將bert最后四層進行concat再maxpooling的方法,
最后實現(xiàn)了bert + CNN實現(xiàn)文本分類
模型使用的是哈工大chinese-bert-wwm,可以完全兼容BERT
下載:
git clone https://huggingface.co/hfl/chinese-bert-wwm
結(jié)果
除了第一個實驗dropout_bert是0.1,其余是0.2. 剩下參數(shù)都一樣。
訓(xùn)練3個epoch
模型
train/val acc
val acc
test acc
鏈接
會用內(nèi)建BertForSequenceClassification
0.982
0.950
0.950
鏈接
自己實現(xiàn)Bert+fc 一層全連接層
0.982
0.948
0.954
鏈接
將Bert最后四層相concat然后maxpooling
0.977
0.946
0.951
鏈接
BERT+CNN
0.984
0.947
0.955
鏈接
- 官方的transformer.models.bert.BertForSequenceClassification()就是直接使用BertModel 再接一層全連接層實現(xiàn)的。第二個項目是為了方便自己修改網(wǎng)絡(luò)結(jié)構(gòu),進行手動實現(xiàn)。效果差不多,可以自己修改接幾層線形結(jié)構(gòu),但是實驗了一層就夠了。
- 根據(jù)參考2的論文,將BERT最后四層的CLS向量concat然后取max pooling可以讓bert在分類問題上有更好的效果。在THUNews上測試可以提高0.4%相比bert。已經(jīng)很大了相比其他方法而言。
- 我一直覺得bert后面接CNN和RNN等都不好,畢竟transformer就是改善這兩類模型的,再接一層也好不到哪去。如果我理解不到位可以告訴我。我還實驗了bert使用前四層的輸出進行concat,效果acc也能達(dá)到0.80+,層數(shù)越深效果感覺真的不明顯。bert+cnn/rnn等這個模型在參考3 中兩年前就有人做過實驗,寫出來過,他實驗的效果也是不如單純的BERT。調(diào)了調(diào)cnn的大小,其實都差不多。
標(biāo)簽定義:
- 0: Diagnosis(診斷)
- 1: Treatment(治療)
- 2: Common Knowledge(常識)
- 3: Healthy lifestyle(健康生活方式)
- 4: Epidemiology(流行病學(xué))
- 5: Other(其他)
模型的實現(xiàn)包括以下幾個部分:
- 數(shù)據(jù)處理與加載:如何加載文本數(shù)據(jù)并進行必要的預(yù)處理。
- 模型架構(gòu):
- bert_lr:一個基于BERT的線性分類器模型。
- bert_cnn:一個基于BERT與卷積神經(jīng)網(wǎng)絡(luò)(CNN)結(jié)合的模型。
- 訓(xùn)練過程:如何設(shè)置訓(xùn)練循環(huán)、優(yōu)化器和損失函數(shù)。
- 評估與預(yù)測:模型在驗證集和測試集上的評估,以及如何進行推理。