bert模型是google在2023年10月發布的語言表示模型,bert在nlp領域橫掃了11項任務的最優結果,可以說是現今最近nlp中最重要的突破。bert模型的全稱是bidirectional encoder representations from transformers,是通過訓練masked language model和**下一句任務得到的模型。關於bert具體訓練的細節和更多的原理,有興趣的讀者可以去看在arxiv上的原文。本篇文章從實踐入手,帶領大家進行bert的中文文字分類教程。
檔案準備工作
資料準備工作
編碼在bert資料夾下的run_classifier.py中的def main(_):函式中將processors的內容增加為
processors = 12
3456
7"cus": customprocessor 為新增的乙個處理類,cus為自己定義的任務名,在後續執行run_classifier.py時會指定。
實現如下customprocessor
class customprocessor(dataprocessor):
def get_train_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "train.tsv")), "train")
def get_dev_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "dev.tsv")), "dev")
def get_test_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "test.tsv")), "test")
def get_labels(self):
# 這裡返回的為具體的你的分類的類別
return ["1", "2", "3", "4", "5", "12", "14"]12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
27將customprocessor放置在和其他processor並列的位置。
編寫執行指令碼
export data_dir=上面自己建的語料路徑
export bert_base_dir=預訓練模型所在路徑
python run_classifier.py \
--task_name=mytask \
--do_train=true \
--do_eval=true \
--data_dir=$data_dir/ \
--vocab_file=$bert_base_dir/vocab.txt \
--bert_config_file=$bert_base_dir/bert_config.json \
--init_checkpoint=$bert_base_dir/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=/output12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
下面的幾個引數,do_train代表是否進行fine tune,do_eval代表是否進行evaluation,還有未出現的引數do_predict代表是否進行**。如果不需要進行fine tune,或者顯示卡配置太低的話,可以將do_trian去掉。max_seq_length代表了句子的最長長度,當視訊記憶體不足時,可以適當降低max_seq_length。
執行指令碼
./run.sh
執行的時間可能會有點久,視配置而定,會在output_dir下面生成乙個eval_results.txt檔案:
eval_accuracy = 0.8503984
eval_loss = 0.47183684
global_step = 6588
loss = 0.4718368412
34這樣說明我們就執行成功了。在output_dir也會有fine-tune(微調)之後的模型檔案。
NLP 中文文字預處理
jieba是乙個專門處理中文分詞的分詞庫,但其實功能比單純的分詞強大許多。中文不同於英文可以通過空格分開每個有意義的詞,對於中文需要乙個工具將完整的文字分割成更細緻的詞語,類似於英文分詞中使用的nltk工具,中文中需要使用jieba。pip install jieba 4.詞性標註 5.tokeni...
中文文字預處理 主題模型
去掉低頻詞 分詞 繁簡轉化 替換奇異詞等是中文文字資料處理中的重要步驟。如在主題模型中,資料預處理的要求很簡單,只需要去掉低頻詞,大多數文章設定的門限都是5或者6.中文文字相比於英文,需要首先進行分詞處理。類似地還有日文 韓文等。因而自然預言處理中乙個重要的研究問題就是文字分詞技術。兩者都有pyth...
使用BERT做中文文字相似度計算與文字分類
最近google推出了nlp大殺器bert,bert transformer雙向編碼器表示 是google ai語言研究人員最近發表的一篇 它通過在各種nlp任務中呈現最先進的結果,包括問答系統 自然語言推理等,引起了機器學習社群的轟動。本文不會去講解bert的原理,如果您還不清楚什麼是bert建議...