使用Hugging Face管道輕鬆應用NLP預訓練模型

2021-12-17 磐創AI

作者 | Robin van Merle

編譯 | VK
來源 | Towards Data Science

最近,BERT模型在語言處理領域得到了廣泛的應用,因為它能夠將最先進的性能與計算能力結合起來。

在本文中,我將向你展示如何使用Hugging Face Transformers庫,僅用3行代碼就可以使用模型!但是首先,讓我們看看BERT模型是如何工作的。

BERT是什麼?

BERT代表Bidirectional Encoder Representations from Transformers。它是一種新的語言模型,能夠在廣泛的自然語言處理任務中獲得最前沿的結果。

BERT的一個主要優點是它是雙向的,這意味著該模型可以同時考慮整個單詞序列。與從左到右的方法不同,這允許BERT使用所有周圍的單詞(在左側和右側)來上下文化每個單詞。

此外,你可以在計算能力有限的機器上使用BERT模型,因為它利用了遷移學習:首先對模型進行一般任務的訓練(預訓練),然後將獲得的知識「轉移」到相關的NLP任務(微調)。讓我們更詳細地看一下這兩個步驟。

預訓練

首先,該模型是在維基百科這樣的大型純文本語料庫上預訓練的。預訓練應該是通用的,以便在以後的廣泛目標中使用該模型。

其次,預訓練是在自我監督下進行的,這樣輸入就不需要標記,這反過來意味著我們有一個幾乎無限的訓練數據供應。BERT模型的預訓練分為兩個任務:

掩碼語言建模(MLM):對語料庫中15%的詞進行掩碼,目的是預測掩碼的token。例如,一個掩碼的句子可能是Paris is the [MASK] of France,這個模型會試圖預測capital。

下一句預測(NSP):將語料庫中的兩個隨機句子組合起來。目的是預測這兩個句子在原始語料庫中是否相鄰出現。舉個例子,這兩句話可以是:the man went to the store和he bought a gallon of milk,這兩個句子可以順理成章地跟在一起。然而,這句話也可能是the man went to the store,penguins are flightless,這就不太可能連續出現。

這些任務的結合使BERT既能理解單詞之間的關係,又能理解句子之間的關係。預訓練只需要做一次(節省計算能力),並且預訓練的模型在網上廣泛可用,可以用於一種或多種語言,也可以用於大小寫和非大小寫文本。

微調

然而,預訓練的BERT模型仍然是非常通用的。為了能夠將其用於情感分析、命名實體識別、文本摘要、翻譯或其他方面,我們需要針對特定用例對模型進行微調。

這最大的優點是,這種微調相對便宜:大部分的權重已經在訓練前階段完成,只需要做一次。

如果你沒有一個標記的訓練集,已經微調的模型也可以在網上廣泛使用,例如在Hugging Face model hub(https://huggingface.co/models).。這是我將在本文中使用的方法。

關於BERT的更多信息,我推薦:https://github.com/google-research/bert

或者為更高級的讀者推薦原始的研究論文「BERT:Pre training of Deep directional Transformers For Language Understanding」:https://arxiv.org/abs/1810.04805

Hugging Face Transformers

使用BERT模型最簡單的方法之一是使用Hugging Face Transformers:一個基於PyTorch和TensorFlow的最先進的NLP庫。

他們的model hub,目前提供了7500多個預訓練的各種NLP任務和語言的模型。這樣,你幾乎總能找到與你的特定目標相對應的模型。

每個模型都可以在你自己的數據集上使用hug Face transformer庫提供的簡單方法進行微調。然而,更簡單的是,這些模型也可以開箱即用,只需極少的編程,就可以使用Hugging Face Transformers提供的管道之一,完成以下11項任務:

特徵提取

情緒分析

命名實體識別

問答

掩碼填充

摘要

翻譯

語言生成

文本到文本生成

Zero-shot分類

多回合對話

有關更多信息,請訪問:https://github.com/huggingface/transformers

使用管道(只有3行代碼!)

確保你首先安裝了Hugging Face Transformers庫,例如在終端中運行pip install Transformers。然後,你就可以開始使用Hugging Face,只需3行代碼!例如,查看以下情緒分析代碼:

# 加載transformers庫並初始化管道
from transformers import pipeline
classifier = pipeline('sentiment-analysis')

# 這是你使用管道所需要的全部內容!
classifier('Today is a beautiful day!')
# >> [{'label': 'POSITIVE', 'score': 0.9998838901519775}]

看,那很簡單!你所要做的就是導入庫,初始化管道,然後就可以開始使用模型了!

如前所述,這些函數使用來自Hugging Face model hub的預訓練的模型。默認情況下,情緒分析管道使用distilbert-base-uncased-finetened-sst-2-english模型,但是你可以使用模型中心的任何模型。

讓我們看看兩個擴展:從模型中心選擇不同的模型,以及解決不同的任務。

Model Hub的7500多個模型

通過在創建管道時設置模型參數,你可以輕鬆地使用不同的模型。

例如,假設我們正在做一個項目,想要預測財務情緒。在模型中心進行快速搜索,我們就會看到ProsusAI/finbert模型,它是專門針對金融的情感進行訓練的。這個模型的實現和前面的例子一樣簡單,只需包含模型參數:

# 我假設你已經像前面的例子一樣導入了transformer庫
classifier = pipeline('sentiment-analysis', model='ProsusAI/finbert')

classifier('Stocks hit record highs')
# >> [{'label': 'positive', 'score': 0.8461698889732361}]

Hugging Face Transformers將自動為你下載所選的模型!

其他NLP任務

管道目前能夠處理11個不同的任務,從命名實體識別到翻譯。

創建管道時,可以通過將「sentiment-analysis」更改為其他內容來選擇模型。例如,讓我們試著翻譯「『I love dogs」從英語到德語。轉到模型中心,過濾任務「Translation」和語言「de」,你將看到超過100個模型。我將使用t5-small模型:

classifier = pipeline('translation_en_to_de', model='t5-small')

classifier('I love dogs!')
# >> [{'translation_text': 'Ich liebe Hunde!'}]

就這樣!有關管道可以執行的所有任務的完整列表,請查看此wiki頁面:https://huggingface.co/transformers/main_classes/pipelines.html#the-pipeline-abstraction

結論

在本文中,你已經閱讀了BERT模型是如何工作的以及它是如何訓練的。此外,你已經看到了使用Hugging Face Transformers管道是多麼強大和簡單。每個人都可以使用NLP !


掃碼看好書,滿100減50超值優惠活動等你


✄---

看到這裡,說明你喜歡這篇文章,請點擊「在看」或順手「轉發」「點讚」。

歡迎微信搜索「panchuangxx」,添加小編磐小小仙微信,每日朋友圈更新一篇高質量推文(無廣告),為您提供更多精彩內容。

相關焦點

  • 支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP
    53 種語言預訓練模型的自然語言處理工具包 StanfordNLP,該工具包支持 Python 3.6 及之後版本,並基於 PyTorch,支持多種語言的完整文本分析管道,包括分詞、詞性標註、詞形歸併和依存關係解析,此外它還提供了與 CoreNLP 的 Python 接口。
  • NLP領域最優秀的8個預訓練模型(附開源地址)
    來源:AI前線 編輯/新智元元子【導讀】如今,自然語言處理應用已經變得無處不在。自然語言處理應用能夠快速增長,很大程度上要歸功於通過預訓練模型實現遷移學習的概念。在本文中,我將介紹一些頂級的預訓練模型,你可以用它們來開始你的自然語言處理之旅,並複製該領域的最新研究成果。
  • Huggingface BERT源碼詳解:應用模型與訓練優化
    BertIntermediate               2. BertOutput            3. BertEmbeddings            4.BertForMultiChoice    3. BertForTokenClassification    4. BertForQuestionAnswering    5. BERT訓練與優化6.
  • 開源古漢語BERT預訓練模型:SikuBERT與SikuRoBERTa
    ,大家發現傳統的靜態地訓練字詞向量的Word2Vec的方法無法進一步提升任務的精度,迫切需要一個高質量的面向古漢語的BERT預訓練模型以獲得更優秀的字詞向量。現有的幾個面向古漢語的BERT模型一方面存在質量問題,如僅使用簡體語料進行訓練,另一方面有的模型不開源供大家使用。而南京農業大學與南京師範大學聯合發布的這兩個BERT模型,不僅是完全使用了繁體的《四庫全書》語料進行訓練,更是採用了更適合中文的RoBERTa模型的架構進行訓練,並將模型開源給大家使用,在古文分詞、詞性標註、斷句與命名實體識別等任務上達到了較高的精度。
  • transformer預訓練模型
    用bert-base-cased模型在MRPC微調的結果(見細節:https://huggingface.co/transformers/examples.html)bert-base-german-dbmdz-cased12個層,768個隱藏節點,12個heads,110M參數量。
  • 復旦邱錫鵬教授:2020最新NLP預訓練模型綜述
    新智元報導編輯:SF【新智元導讀】本文該綜述系統地介紹了nlp中的預訓練模型,深入盤點了目前主流的預訓練模型,提出了一種預訓練模型的分類體系。nlp中的預訓練模型就是這樣一類能夠在大規模語料上進行無監督訓練,學習得到通用的語言表徵,有助於解決下遊任務的nlp模型。那麼什麼是好的語言表徵呢?
  • PTMs|2020最新NLP預訓練模型綜述
    但是相反,nlp領域的優勢在於,存在大量的無監督數據集,如果能夠充分利用這類數據進行訓練,那麼勢必能夠提升模型的能力以及在下遊任務中的表現。nlp中的預訓練模型就是這樣一類能夠在大規模語料上進行無監督訓練,學習得到通用的語言表徵,有助於解決下遊任務的nlp模型。「那麼什麼是好的語言表徵呢」?
  • 最強NLP預訓練模型庫PyTorch-Transformers正式開源!支持6個預訓練框架,27個預訓練模型
    該項目支持 BERT、GPT、GPT-2、Transformer-XL、XLNet、XLM 等,並包含了 27 個預訓練模型。更多優質內容請關注微信公眾號「AI 前線」(ID:ai-front) 照例先上開源地址:https://github.com/huggingface/pytorch-transformers#quick-tour官網:https://huggingface.co/pytorch-transformers
  • 中文ELECTRA預訓練模型再升級
    在今年3月,哈工大訊飛聯合實驗室推出了中文ELECTRA預訓練模型,並將相關資源進行開源,目前在GitHub上已獲得580個star。本次更新中,我們將預訓練語料從原有的約20G提升至180G,利用接近9倍大小的數據集。
  • [預訓練語言模型專題] BERT,開啟NLP新時代的王者
    feature-based策略的代表模型為ELMo,它把預訓練得到的「向量表示」作為訓練下遊任務的額外特徵。訓練下遊任務時使用新的任務相關模型,並基於得到的特徵來進行進一步的訓練。fine-tuning策略的代表模型為GPT,它則是在訓練語言模型後,只改變極少的任務相關的層與參數,直接對下遊任務訓練整個原來的語言模型。
  • NLP、KG相關軟體、工具、資源匯總
    UER-py (https://github.com/dbiir/UER-py):基於pytorch的一個預訓練模型框架(在你自己的語料上訓練語言模型或者finetune下遊任務),也包含了一些即開即用的中文預訓練模型
  • 哈工大訊飛聯合實驗室發布的中文ELECTRA系列預訓練模型再迎新成員
    ELECTRA系列預訓練模型再迎新成員。, Chinese: 12-layer, 256-hidden, 4-heads, 12M parameters 快速加載 哈工大訊飛聯合實驗室發布的所有中文預訓練語言模型均可通過huggingface transformers庫進行快速加載訪問,請登錄我們的共享頁面獲取更多信息。
  • Hugging Face官方NLP課程來了!Transformers庫維護者之一授課,完全免費
    課程主頁:https://huggingface.co/course/chapter0?fw=pt整個系列的課程分為入門(Introduction)、進階(Diving in)和高級(Advanced),其中具體如下:入門:Transformer 模型、使用 Transformers、微調預訓練模型以及分享模型和 tokenizers;進階:Datasets 庫、Tokenizers 庫、主要 NLP 任務以及如何尋求幫助;高級:專用架構、加速訓練、自定義訓練
  • NLP預訓練家族 | Transformer-XL及其進化XLNet
    RNN、LSTM等網絡結構訓練語言模型的最大缺點在於容易梯度消失,難以學習長期依賴,但是Transformer沒有合格缺點,因為它沒有沿時間線進行橫向傳播的過程,這樣來說,Transformer很適合訓練語言模型。怎麼訓練?
  • 拿到參考資料的預訓練模型,太可怕了!
    「Key insight:」 雖然以GPT-3為代表的預訓練語言模型可以看作是一個隱式的大規模知識庫,但這些模型在知識密集型任務上的表現依舊有不少限制和不足。本文作者在此基礎上提出了RAG模型,該模型引入了文檔檢索模塊和外部知識庫來增強生成式語言模型在知識密集型任務上的表現,並避免了大規模預訓練模型的一些缺點,具有很不錯的應用價值和前景。Arxiv訪問不方便的同學可以後臺回復『0006』便捷獲取論文喔
  • 谷歌開源NLP模型可視化工具LIT,模型訓練不再「黑箱」
    下面我們來看 LIT 的幾個主要模塊:探索數據集:用戶可以使用不同的標準跨模塊(如數據表和嵌入模塊)交互式地探索數據集,從而旋轉、縮放和平移 PCA 或 UMAP 投影,以探索集群和全局結構。比較模型:通過在全局設置控制項中加載多個模型,LIT 可以對它們進行比較。然後複製顯示每個模型信息的子模塊,以便於在兩個模型之間進行比較。
  • NLP簡報(Issue#8)
    最近的一項工作,Meta-Learning Initializations for Low-Resource Drug Discovery[5],應用了一種稱為模型不可知元學習(Model-Agnostic-Meta-Learning,MAML)和其他變體的元學習方法來預測低資源環境下的化學性質和活性。結果表明,元學習方法的性能與多任務預訓練基準相當。
  • 2019,不可錯過的NLP「高光時刻」
    https://arxiv.org/abs/1903.08855XLNet是基於預訓練的NLP模型,它在20個任務上相較於BERT都有提升。相關總結請戳連結。https://arxiv.org/abs/1902.04094https://colab.research.google.com/drive/1MxKZGtQ9SSBjTK5ArsZ5LKhkztzg52RVFacebook的研究人員發布了XLM的代碼,這是一個用於跨語言模型訓練的預訓練模型。
  • 【NLP】競賽必備的NLP庫
    spaCy與現有的深度學習框架接口可以一起使用,並預裝了常見的語言模型。在工業界和學術界都有廣泛的應用。CoreNLP官網:https://stanfordnlp.github.io/CoreNLP/AllenNLP 是由世界著名的艾倫人工智慧實驗室(Allen Institute for AI Lab)建立的 NLP 深度學習通用框架,不僅包含了最先進的參考模型,可以進行快速部署,而且支持多種任務和數據集。
  • ​關於深度學習、NLP和計算機視覺的30個頂級Python庫
    它具備著全面綜合的、靈活的工具、庫和社區資源生態系統,可以幫助研究人員去推動機器學習先進的技術的發展,並讓開發人員可以輕鬆地構建和部署基於機器學習的應用程式。2. Keras(https://github.com/keras-team/keras)