日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于bert模型的文本分类研究:“Predict the Happiness”挑战

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于bert模型的文本分类研究:“Predict the Happiness”挑战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

在2018年10月,Google發布了新的語言表示模型BERT-“Bidirectional Encoder Representations from Transformers”。根據他們的論文所言,在文本分類、實體識別、問答系統等廣泛的自然語言處理任務上取得了最新的成果。

2017年12月,參加了Hackerreath的一個挑戰“Predict the Happiness”。在這個挑戰中,我為這個文本分類問題(Predict the Happiness)構建了一個多層全連接神經網絡通過提交的測試數據,我可以得到87.8%的準確率,排名是66。

在互聯網上圍繞BERT進行了大量的討論之后,我選擇將BERT應用到同一個Challenge中,以證明調整BERT模型是否能將我帶到這個挑戰的更好排名。

2. Bert安裝與預訓練模型

  • 將BERT Github項目Copy到自己的機器上:

git clone https://github.com/google-research/bert.git
  • 直接下載預訓練的Bert模型

Google提供了四個預訓練模型:

  • BERT-Base, Uncased: 12-layer, 768-hidden, 12-heads, 110M parameters
  • BERT-Large, Uncased: 24-layer, 1024-hidden, 16-heads, 340M parameters
  • BERT-Base, Cased: 12-layer, 768-hidden, 12-heads , 110M parameters
  • BERT-Large, Cased: 24-layer, 1024-hidden, 16-heads, 340M parameters

本文下載了BERT-Base, Cased第一個進行文本分類實驗。這里,我們需要以符合bert模型的格式準備文本數據。Google規定了數據的格式:

對于train.tsv or dev.tsv:

  • 每行需要一個ID
  • 每行需要一個整數值作為標簽?( 0,1,2,3 etc)
  • 一列完全相同的字母
  • 要分類的文本示例

對于test.tsv:

  • 每行需要一個ID
  • 想要測試的文本示例

下面的python代碼片段將讀取hackerreath訓練數據(train.csv),并根據bert模型機型數據準備:

import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from pandas import DataFramele = LabelEncoder()df = pd.read_csv("data/train.csv")# Creating train and dev dataframes according to BERT df_bert = pd.DataFrame({'user_id':df['User_ID'],'label':le.fit_transform(df['Is_Response']),'alpha':['a']*df.shape[0],'text':df['Description'].replace(r'\n',' ',regex=True)})df_bert_train, df_bert_dev = train_test_split(df_bert, test_size=0.01)# Creating test dataframe according to BERT df_test = pd.read_csv("data/test.csv") df_bert_test = pd.DataFrame({'User_ID':df_test['User_ID'],'text':df_test['Description'].replace(r'\n',' ',regex=True)})# Saving dataframes to .tsv format as required by BERT df_bert_train.to_csv('data/train.tsv', sep='\t', index=False, header=False) df_bert_dev.to_csv('data/dev.tsv', sep='\t', index=False, header=False) df_bert_test.to_csv('data/test.tsv', sep='\t', index=False, header=True)

原始訓練數據格式如下:

符合Bert的訓練數據格式如下:

3. 使用BERT預訓練模型進行模型訓練

進行訓練前的檢查(太重要了):

  • 所有的.tsv文件都在“data”的文件夾中
  • 創建文件夾“bert_output”,保存經過微調的模型,并以“test_results.tsv”的名稱生成測試結果
  • 檢查是否下載了“cased_l-12_h-768_a-12”中的預先訓練的bert模型到當前目錄

  • 確保命令中的路徑是相對路徑(以“/”開頭)

在終端上運行以下命令:

python run_classifier.py --task_name=cola --do_train=true --do_eval=true --do_predict=true --data_dir=./data/ --vocab_file=./cased_L-12_H-768_A-12/vocab.txt --bert_config_file=./cased_L-12_H-768_A-12/bert_config.json --init_checkpoint=./cased_L-12_H-768_A-12/bert_model.ckpt --max_seq_length=400 --train_batch_size=8 --learning_rate=2e-5 --num_train_epochs=3.0 --output_dir=./bert_output/ --do_lower_case=False

在輸出目錄中生成“test_results.tsv”,作為對測試數據集的預測的結果它包含所有類在列中的預測概率值。

4. 提交結果

下面的python代碼將結果從BERT模型轉換為.csv格式,以便提交給hackerreath Challenge:

df_results = pd.read_csv("bert_output/test_results.tsv",sep="\t",header=None) df_results_csv = pd.DataFrame({'User_ID':df_test['User_ID'],'Is_Response':df_results.idxmax(axis=1)})# Replacing index with string as required for submission df_results_csv['Is_Response'].replace(0, 'happy',inplace=True) df_results_csv['Is_Response'].replace(1, 'not_happy',inplace=True)# writing into .csv df_results_csv.to_csv('data/result.csv',sep=",",index=None)

下圖顯示了將概率值轉換為提交結果的過程:

BERT的威力就是可以將排名從66升到第4!!!

5. 總結

  • Bert的訓練環節:

該模型使用兩個新的無監督預測任務進行預訓練:

BERT使用了一種簡單的方法:MASK輸入中15%的單詞,通過一個深度Bidirectional Transformer encoder運行整個序列,然后只預測MASK的單詞例如:

Input: the man went to the [MASK1] . he bought a [MASK2] of milk. Labels: [MASK1] = store; [MASK2] = gallon

為了學習句子之間的關系,BERT還訓練了一個可以從任何單語語料庫生成的簡單任務:給定兩個句子a和b,預測b是a之后的實際下一個句子,還是只是語料庫中的一個隨機句子。

Sentence A: the man went to the store. Sentence B: he bought a gallon of milk. Label: IsNextSentenceSentence A: the man went to the store. Sentence B: penguins are flightless. Label: NotNextSentence
  • 根據模型體系結構的規模,有兩個預先訓練的模型,即BASE和LARGE。
BERT BASE:Number of Layers =12No. of hidden nodes = 768No. of Attention heads =12Total Parameters = 110MBERT LARGE:Number of Layers =24,No. of hidden nodes = 1024No. of Attention heads =16Total Parameters = 340M

?

總結

以上是生活随笔為你收集整理的基于bert模型的文本分类研究:“Predict the Happiness”挑战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。