fastNLP工具包, 快速實現(xiàn)序列標注模型

向AI轉(zhuǎn)型的程序員都關(guān)注了這個號??????
人工智能大數(shù)據(jù)與深度學習 公眾號:datayx
fastNLP是一款輕量級的自然語言處理(NLP)工具包,目標是快速實現(xiàn)NLP任務(wù)以及構(gòu)建復雜模型。
fastNLP具有如下的特性:
統(tǒng)一的Tabular式數(shù)據(jù)容器,簡化數(shù)據(jù)預(yù)處理過程;
內(nèi)置多種數(shù)據(jù)集的Loader和Pipe,省去預(yù)處理代碼;
各種方便的NLP工具,例如Embedding加載(包括ELMo和BERT)、中間數(shù)據(jù)cache等;
部分數(shù)據(jù)集與預(yù)訓練模型的自動下載;
提供多種神經(jīng)網(wǎng)絡(luò)組件以及復現(xiàn)模型(涵蓋中文分詞、命名實體識別、句法分析、文本分類、文本匹配、指代消解、摘要等任務(wù));
Trainer提供多種內(nèi)置Callback函數(shù),方便實驗記錄、異常捕獲等。
安裝指南
fastNLP 依賴以下包:
numpy>=1.14.2
torch>=1.0.0
tqdm>=4.28.1
nltk>=3.4.1
requests
spacy
prettytable>=0.7.2
其中torch的安裝可能與操作系統(tǒng)及 CUDA 的版本相關(guān),請參見 PyTorch 官網(wǎng) 。在依賴包安裝完成后,您可以在命令行執(zhí)行如下指令完成安裝
pip install fastNLP
python -m spacy download en
fastNLP教程
中文文檔、教程
快速入門
0. 快速入門
詳細使用教程
1. 使用DataSet預(yù)處理文本
2. 使用Vocabulary轉(zhuǎn)換文本與index
3. 使用Embedding模塊將文本轉(zhuǎn)成向量
4. 使用Loader和Pipe加載并處理數(shù)據(jù)集
5. 動手實現(xiàn)一個文本分類器I-使用Trainer和Tester快速訓練和測試
6. 動手實現(xiàn)一個文本分類器II-使用DataSetIter實現(xiàn)自定義訓練過程
7. 使用Metric快速評測你的模型
8. 使用Modules和Models快速搭建自定義模型
9. 快速實現(xiàn)序列標注模型
10. 使用Callback自定義你的訓練過程
擴展教程
Extend-1. BertEmbedding的各種用法
Extend-2. 分布式訓練簡介
Extend-3. 使用fitlog 輔助 fastNLP 進行科研
內(nèi)置組件
大部分用于的 NLP 任務(wù)神經(jīng)網(wǎng)絡(luò)都可以看做由詞嵌入(embeddings)和兩種模塊:編碼器(encoder)、解碼器(decoder)組成。
以文本分類任務(wù)為例,下圖展示了一個BiLSTM+Attention實現(xiàn)文本分類器的模型流程圖:

fastNLP 在 embeddings 模塊中內(nèi)置了幾種不同的embedding:靜態(tài)embedding(GloVe、word2vec)、上下文相關(guān)embedding (ELMo、BERT)、字符embedding(基于CNN或者LSTM的CharEmbedding)
與此同時,fastNLP 在 modules 模塊中內(nèi)置了兩種模塊的諸多組件,可以幫助用戶快速搭建自己所需的網(wǎng)絡(luò)。兩種模塊的功能和常見組件如下:

fastNLP的大致工作流程如上圖所示,而項目結(jié)構(gòu)如下:

代碼 獲取方式:
分享本文到朋友圈
關(guān)注微信公眾號 datayx 然后回復 NLP 即可獲取。
AI項目體驗地址 https://loveai.tech
單肩包/雙肩包/斜挎包/手提包/胸包/旅行包/上課書包 /個性布袋等各式包飾挑選
https://shop585613237.taobao.com/
序列標注
這一部分的內(nèi)容主要展示如何使用fastNLP實現(xiàn)序列標注(Sequence labeling)任務(wù)。您可以使用fastNLP的各個組件快捷,方便地完成序列標注任務(wù),達到出色的效果。在閱讀這篇教程前,希望您已經(jīng)熟悉了fastNLP的基礎(chǔ)使用,尤其是數(shù)據(jù)的載入以及模型的構(gòu)建。通過這個小任務(wù),能讓您進一步熟悉fastNLP的使用。
命名實體識別(name entity recognition, NER)
命名實體識別任務(wù)是從文本中抽取出具有特殊意義或者指代性非常強的實體,通常包括人名、地名、機構(gòu)名和時間等。如下面的例子中
我來自復旦大學。
其中“復旦大學”就是一個機構(gòu)名,命名實體識別就是要從中識別出“復旦大學”這四個字是一個整體,且屬于機構(gòu)名這個類別。這個問題在實際做的時候會被 轉(zhuǎn)換為序列標注問題
針對"我來自復旦大學"這句話,我們的預(yù)測目標將是[O, O, O, B-ORG, I-ORG, I-ORG, I-ORG],其中O表示out,即不是一個實體,B-ORG是ORG( organization的縮寫)這個類別的開頭(Begin),I-ORG是ORG類別的中間(Inside)。
在本tutorial中我們將通過fastNLP嘗試寫出一個能夠執(zhí)行以上任務(wù)的模型。
載入數(shù)據(jù)
fastNLP的數(shù)據(jù)載入主要是由Loader與Pipe兩個基類銜接完成的,您可以通過 使用Loader和Pipe處理數(shù)據(jù) 了解如何使用fastNLP提供的數(shù)據(jù)加載函數(shù)。下面我們以微博命名實體任務(wù)來演示一下在fastNLP進行序列標注任務(wù)。

模型構(gòu)建
首先選擇需要使用的Embedding類型。關(guān)于Embedding的相關(guān)說明可以參見 使用Embedding模塊將文本轉(zhuǎn)成向量 。在這里我們使用通過word2vec預(yù)訓練的中文漢字embedding。

進行訓練
下面我們選擇用來評估模型的metric,以及優(yōu)化用到的優(yōu)化函數(shù)。

進行測試
訓練結(jié)束之后過,可以通過 Tester 測試其在測試集上的性能

使用更強的Bert做序列標注
在fastNLP使用Bert進行任務(wù),您只需要把 fastNLP.embeddings.StaticEmbedding 切換為 fastNLP.embeddings.BertEmbedding (可修改 device 選擇顯卡)。

輸出為:

可以看出通過使用Bert,效果有明顯的提升,從48.2提升到了64.1。
閱讀過本文的人還看了以下文章:
基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測
《深度學習入門:基于Python的理論與實現(xiàn)》高清中文PDF+源碼
python就業(yè)班學習視頻,從入門到實戰(zhàn)項目
2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
《21個項目玩轉(zhuǎn)深度學習:基于TensorFlow的實踐詳解》完整版PDF+附書代碼
PyTorch深度學習快速實戰(zhàn)入門《pytorch-handbook》
【下載】豆瓣評分8.1,《機器學習實戰(zhàn):基于Scikit-Learn和TensorFlow》
《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼
汽車行業(yè)完整知識圖譜項目實戰(zhàn)視頻(全23課)
李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019春)教材
筆記、代碼清晰易懂!李航《統(tǒng)計學習方法》最新資源全套!
《神經(jīng)網(wǎng)絡(luò)與深度學習》最新2018版中英PDF+源碼
重要開源!CNN-RNN-CTC 實現(xiàn)手寫漢字識別
【Keras】完整實現(xiàn)‘交通標志’分類、‘票據(jù)’分類兩個項目,讓你掌握深度學習圖像分類
VGG16遷移學習,實現(xiàn)醫(yī)學圖像識別分類工程項目
特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊
如何利用全新的決策樹集成級聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?
Machine Learning Yearning 中文翻譯稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在線識別手寫中文網(wǎng)站
中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特征工程
不斷更新資源
深度學習、機器學習、數(shù)據(jù)分析、python
搜索公眾號添加: datayx
機大數(shù)據(jù)技術(shù)與機器學習工程
搜索公眾號添加: datanlp
長按圖片,識別二維碼
