最近google推出了nlp大殺器bert,bert(transformer雙向編碼器表示)是google ai語言研究人員最近發表的一篇**。它通過在各種nlp任務中呈現最先進的結果,包括問答系統、自然語言推理等,引起了機器學習社群的轟動。
本文不會去講解bert的原理,如果您還不清楚什麼是bert建議先參閱google的**或者其他博文,本文主要目的在於教會大家怎麼使用bert的預訓練模型。
模型準備好後就可以編寫**了,我們先把bert的github**clone下來,之後我們的**編寫會基於run_classifier.py
檔案,我們看下**的結構
***processor
的類,這些類都有同乙個父類dataprocessor
,其中dataprocessor
提供了4個抽象方法,如圖
processor
就是用來獲取對應的訓練集、驗證集、測試集的資料與label的資料,並把這些資料餵給bert的,而我們要做的就是自定義新的processor並重寫這4個方法,也就是說我們只需要提供我們自己場景對應的資料。這裡我自定義了乙個名叫simprocessor的類,我們簡單看一下
inputexample
的物件並新增到list中,注意這裡有乙個guid的引數,這個引數是必填的,是用來區分每一條資料的。是否進行訓練集、驗證集、測試集的計算,在執行**時會有引數控制,我們下文會講,所以這裡的抽象方法也並不是需要全部都重寫,但是為了體驗乙個完整的流程, 建議大家還是簡單寫一下。
get_labels
方法返回的是乙個陣列,因為相似度問題可以理解為分類問題,所以返回的標籤只有0和1,注意,這裡我返回的是引數是字串,所以在重寫獲取資料的方法時inputexample
中的label也要傳字串的資料,可以看到上圖中我對label
做了乙個str()
的處理。
接下來還需要給processor
加乙個名字,讓我們的在執行時告訴**我們要執行哪乙個processor
,如圖我自定義的叫做sim
processor
編寫好了,接下來就是執行**了,我們來看下run_classifier.py
的執行過程。
run_classifier.py
時需要先輸入這5個必填引數,這裡我們對引數做乙個簡單的說明
引數說明
data_dir
訓練資料的位址
task_name
processor的名字
vocab_file
字典位址,用預設提供的就可以了,當然也可以自定義
bert_config_file
配置檔案
output_dir
模型的輸出位址
當然還有一些其他的引數,這裡給出官方提供的執行引數
export bert_base_dir=/users/joe/desktop/chinese_l-12_h-768_a-12
export my_dataset=/users/joe/desktop/bert_data
python run_classifier.py \
--data_dir=$my_dataset \
--task_name=sim \
--vocab_file=$bert_base_dir/vocab.txt \
--bert_config_file=$bert_base_dir/bert_config.json \
--output_dir=/tmp/sim_model/ \
--do_train=true \
--do_eval=true \
--init_checkpoint=$bert_base_dir/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=5e-5\
--num_train_epochs=2.0
這裡再補充下以下三個可選引數說明
引數說明
do_train
是否做fine-tuning,預設為false,如果為true必須重寫獲取訓練集的方法
do_eval
是否執行驗證集,預設為false,如果為true必須重寫獲取驗證集的方法
dopredict
是否做**,預設為false,如果為true必須重寫獲取測試集的方法
執行以上的**即可訓練我們自己的模型了,如果需要使用模型來進行**,可執行以下命令
python run_classifier.py \
--task_name=sim \
--do_predict=true \
--data_dir=$my_dataset \
--vocab_file=$bert_base_dir/vocab.txt \
--bert_config_file=$bert_base_dir/bert_config.json \
--init_checkpoint=/tmp/sim_model \
--max_seq_length=128 \
--output_dir=/tmp/output/
當然,我們需要在data_dir
下有測試資料,測試完成後會在output_dir
路徑下生成乙個test_results.tsv
檔案,該檔案包含了測試用例和相似度probabilitie NLP 中文文字相似度實戰
原文 1 基於詞向量 余弦相似度,曼哈頓距離,歐幾里得距離,明式距離 是前兩種距離測度的推廣 2 基於字元 編輯距離,simhash 適用於海量資料 共有字元數 有點類似 onehot 編碼,直接統計兩個文字的共有字元數,最 3 基於概率統計 傑卡德相似係數 4 基於詞嵌入模型 word2vec d...
計算文字相似度 最準的中文文字相似度計算工具
向ai轉型的程式設計師都關注了這個號?text2vec,chinese text to vetor.文字向量化表示工具,包括詞向量化 句子向量化 本文相關 獲取 ai專案體驗位址 文字相似度計算 query和docs的相似度比較 result 文字相似度計算 儘管文字相似度計算的基準方法很簡潔,但用...
自然語言處理的中文文字相似度
前言 人與計算機的互動過程中,如果能提供人類的自然語言形式來進行交流,那麼人與計算機就能更加親密友好。而要實現這一機制就需要自然語言處理來處理,一般來說自然語言處理會涉及幾個學科 電腦科學 語言學 統計學和數學等。不同語言的自然語言處理也存在差別,對於中文來說,很多時候都無法直接套用英語自然語言處理...