BERT 處理中文文字任務

2021-10-06 10:03:16 字數 2404 閱讀 8517

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建議...