百度PaddlePaddle + NLP 學習心得+作業分享貼(一)

 

這次是一次作業貼分享, 提交在百度社區: https://ai.baidu.com/forum/topic/show/957882

 

通過這次的作業,我的心得和體會總結:

 

1. PaddleNLP的分詞速度優勢非常明顯, 開啓GPU模式可以達到 1GB文本/小時, 是我目前使用過的最快和準確性最高的中文分詞技術!

2. PaddleHub的LAC使用方便簡單

3. jieba 可以 調用Paddle模式.

4. NLP 技術很有趣.

今後都會多使用Paddle做NLP,很有優勢!

 

具體作業和心得感悟如下: 

 

作業1-1
(1)下載飛槳本地並安裝成功,將截圖發給班主任:

推薦 conda 創建環境 進行安裝,因爲paddle 更新較快,不同版本下有些細微的差異.包括生成的model 也可能會有使用上的一些小問題.

建議用ubuntu 環境,對paddle-gpu功能支持的比較完整.

paddle建議安裝1.6及以上,對NLP支持完整

需要安裝paddlehub​

 

(2)學習使用PaddleNLP下面的LAC模型或Jieba分詞

LAC模型地址:https://github.com/PaddlePaddle/models/tree/release/1.6/PaddleNLP/lexical_analysis

 

模型評估
我們基於自建的數據集訓練了一個詞法分析的模型,可以直接用這個模型對測試集 ./data/test.tsv 進行驗證,

# baseline model
bash run.sh eval
得到結果:

# ERNIE finetuned model
bash run_ernie.sh eval
得到結果:  


模型訓練
基於示例的數據集,可通過下面的命令,在訓練集 ./data/train.tsv 上進行訓練,示例包含程序在單機單卡/多卡,以及CPU多線程的運行設置

Warning: 若需進行ERNIE Finetune訓練,需自行下載 ERNIE 開放的模型,下載鏈接爲: https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz,下載後解壓至 ./pretrained/ 目錄下。
# baseline model, using single GPU
sh run.sh train_single_gpu

模型預測
加載已有的模型,對未知的數據進行預測

# baseline model
sh run.sh infer
得到結果:
​  
 

 

(3)對人民日報語料完成切詞,並通過統計每個詞出現的概率,計算信息熵

語料地址:https://github.com/fangj/rmrb/tree/master/example/1946%E5%B9%B405%E6%9C%88

下載到本地後,先用paddleNLP的預處理進行分詞預處理 :

原來CPU 10小時 1GB文本 ,GPU只需要50分鐘.完成. paddle在分詞速度上優勢明顯.

分別按月\年\所有 三個時間維度 統計詞頻:

​​可以發現每一年的新聞都有一些不同的高頻詞彙,反映當時的政治面貌

 

接着計算信息熵: 

 

 

作業1-2

(1)思考一下,假設輸入一個詞表裏面含有N個詞,輸入一個長度爲M的句子,那麼最大前向匹配的計算複雜度是多少?

對於長度爲N的詞典,長度爲M的句子,最壞情況下每個詞都需要切分,一般用字典樹存儲詞典,查找一個詞的時間複雜度爲O(該詞的長度),複雜度是O(N*M), 由於詞最大的長度是整個句子的長度,所以計算複雜度是O(M^2)

 

(2)給定一個句子,如何計算裏面有多少種分詞候選,你能給出代碼實現嗎?

paddle的分詞只支持精確模式,這裏用jieba做初步處理.
匹配算法直接引用網友"糾纏state "的實現


(3)除了最大前向匹配和N-gram算法,你還知道其他分詞算法嗎,請給出一段小描述。

比如:

1.逆向最大匹配算法RMM:該算法是正向最大匹配的逆向思維,匹配不成功,將匹配字段的最前一個字去掉,實驗表明,逆向最大匹配算法要優於正向最大匹配算法。

2. 雙向最大匹配法:是將正向最大匹配法得到的分詞結果和逆向最大匹配法的到的結果進行比較,從而決定正確的分詞方法。

 

 

本次完成的作業清單:

2月25日第一次作業

作業獎勵: 3月2日中午12點之前完成,會從中挑選10位回答優秀的同學獲得飛槳定製數據線+本

作業1-1

(1)下載飛槳本地並安裝成功,將截圖發給班主任
(2)學習使用PaddleNLP下面的LAC模型或Jieba分詞
LAC模型地址:https://github.com/PaddlePaddle/models/tree/release/1.6/PaddleNLP/lexical_analysis
Jieba模型:https://github.com/fxsjy/jieba
(3)對人民日報語料完成切詞,並通過統計每個詞出現的概率,計算信息熵
語料地址:https://github.com/fangj/rmrb/tree/master/example/1946%E5%B9%B405%E6%9C%88

作業1-2

(1)思考一下,假設輸入一個詞表裏面含有N個詞,輸入一個長度爲M的句子,那麼最大前向匹配的計算複雜度是多少?
(2)給定一個句子,如何計算裏面有多少種分詞候選,你能給出代碼實現嗎?
(3)除了最大前向匹配和N-gram算法,你還知道其他分詞算法嗎,請給出一段小描述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章