作者 | 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」,添加小編磐小小仙微信,每日朋友圈更新一篇高質量推文(無廣告),為您提供更多精彩內容。