如今,自然語言處理應用已經變得無處不在。自然語言處理應用能夠快速增長,很大程度上要歸功于通過預訓練模型實現遷移學習的概念。在本文中,我將介紹一些頂級的預訓練模型,你可以用它們來開始你的自然語言處理之旅,并復制該領域的最新研究成果。
如今,自然語言處理(Natural Language Processing,NLP)應用已經變得無處不在。我似乎總是不經意間發現一些網站和應用程序,以這樣的或那樣的形式利用了自然語言處理技術。簡而言之,現在就是涉足自然語言處理領域的絕佳時機。
自然語言處理應用能夠快速增長,很大程度上要歸功于通過預訓練模型實現遷移學習的概念。在自然語言處理的背景下,遷移學習本質上是在一個數據集上訓練模型,然后對該模型進行調整,以在不同的數據集上執行不同的自然語言處理功能。
這一突破,使得每個人都能夠輕松地完成任務,尤其是那些沒有時間、也沒有資源從頭開始構建自然語言處理模型的人們。對于想要學習或過渡到自然語言處理的初學者來講,它也堪稱完美。
為什么要使用預訓練模型?
作者已盡其所能設計了基準模型。我們可以在自己的自然語言處理數據集上使用預訓練模型,而不是從頭構建模型來解決類似的自然語言處理問題。
盡管仍然需要進行一些微調,但它已經為我們節省了大量的時間和計算資源。
在本文中,我將介紹一些頂級的預訓練模型,你可以用它們來開始你的自然語言處理之旅,并復制該領域的最新研究成果。
如果你是自然語言處理的初學者,我建議你參加我們的熱門課程:《NLP using Python》(《使用 Python 進行自然語言處理》):
https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
本文介紹的預訓練自然語言處理模型根據應用,將預處理模型分為三類:
多用途自然語言處理模型
ULMFiT
Transformer
Google BERT
Transformer-XL
OpenAI GPT-2
詞嵌入
ELMo
Flair
其他預訓練模型
StanfordNLP
多用途自然語言處理模型
多用途模型是自然語言處理領域的熱門話題。這些模型為機器翻譯、問答系統、聊天機器人、情緒分析等我們感興趣的自然語言處理應用提供了動力。這些多用途自然語言處理模型的核心組件是語言建模的概念。
簡單來說,語言模型的目的是預測序列中的下一個單詞或字符。我們在這里看到每種模型時,都會理解這一點。
如果你是自然語言處理的愛好者,那么你將會喜歡這一節。現在,讓我們深入研究這 5 個最先進的多用途自然語言處理模型框架吧。對于每個模型,我都提供了研究論文和預訓練模型的鏈接。讓我們繼續探索吧!
ULMFiT
GitHub 項目地址:
https://github.com/fastai/fastai/tree/master/courses/dl2/imdb_scripts
ULMFiT 由 fast.ai 的 Jeremy Howard 和 DeepMind 的 Sebastian Ruder 提出并設計。你可以說 ULMFiT 是去年啟動遷移學習派對的發行版。
正如我們在本文中所述,ULMFiT 使用新的自然語言生成技術實現了最先進的結果。該方法包括在 Wikitext 103 數據集上訓練的預處理語言模型進行微調,使其不會忘記以前所學的內容,從而將其微調為一個新的數據集。
在文本分類任務方面,ULMFiT 的性能優于許多最先進的技術。我喜歡 ULMFiT 的原因是,它只需要很少的例子就可以產生這些令人印象深刻的結果。讓像你我這樣的人更容易理解,并在我們的機器上實現它!
如果你好奇 ULMFiT 為什么叫這個名,我會告訴你,ULMFiT 其實就是 Universal Language Model Fine-Tuning(通用語言模型微調)的縮寫。“Universal”(通用)這詞用在這里非常貼切,因為這個框架幾乎可以應用于任何自然語言處理任務。
有關 ULMFiT 的更多信息,請參閱以下資源:
《Tutorial on Text Classification (NLP) using ULMFiT and fastai Library in Python》(《在 Python 中使用 ULMFiT 和 fastai 庫的文本分類(自然語言處理)教程》):https://www.analyticsvidhya.com/blog/2018/11/tutorial-text-classification-ulmfit-fastai-library/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
ULMFiT 的預訓練模型:https://www.paperswithcode.com/paper/universal-language-model-fine-tuning-for-text
研究論文:https://arxiv.org/abs/1801.06146
Transformer
GitHub 項目地址:
https://github.com/tensorflow/models/tree/master/official/transformer
Transformer 架構是自然語言處理領域最近幾乎所有主要發展的核心,2017 年由 Google 推出。當時,RNN 遞歸神經網絡被用于語言任務,如機器翻譯和問答系統。
這種 Transformer 架構的性能優于 RNN 和 CNN(卷積神經網絡)。而且訓練模型所需的計算資源也大為減少。對自然語言處理的每個人來講,這種結果是雙贏的局面。看看下面的對比:
根據 Google 的說法,Transformer“應用了一種自注意力(self-attention)機制,可以直接模擬句子中所有單詞之間的關系,無論這些單詞的位置如何”。它使用固定大小的上下文(也就是前面的單詞)來實現這一點。是不是覺得太復雜了?讓我們舉個例子來簡化這個。
“She found the shells on the bank of the river.”模型需要理解這里的“bank”是指河岸,而不是金融機構。Transformer 只需一步就能理解這一點。我建議你閱讀下面給出鏈接的完整論文,以了解 Transformer 的工作原理。它會讓你大吃一驚。
Google 去年發布了一款 Universal Transformer 的改進版。還有一個更新、更直觀的版本,叫做 Transformer-XL,我們將稍后予以介紹。
有關 Transformer 的更多信息,請參閱以下資源:
Google 的官方博客文章:https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
Transformer 的預訓練模型:https://www.paperswithcode.com/paper/attention-is-all-you-need
研究論文:https://arxiv.org/abs/1706.03762
Google BERT
GitHub 項目地址:
https://github.com/google-research/bert
自 Google 公布他們的結果以來,BERT 就一直在掀起波瀾,然后 Google 開源了它背后的代碼。我們可以討論這是否標志著“自然語言處理領域的新時代”,但毫無疑問的是,BERT 是一個非常有用的框架,可以很好地推廣到各種自然語言處理任務。
BERT,是 Bidirectional Encoder Representations(雙向編碼器表示)的縮寫,它從單詞的兩邊(左邊和右邊)來考慮上下文。以前所有的努力方向,都是一次只考慮單詞的一邊,要么是左邊,要么是右邊。這種雙向性有助于模型更好地理解使用單詞的上下文。此外,BERT 的設計目標是能夠進行多任務學習,也就是說,它可以同時執行不同的自然語言處理任務。
BERT 是第一個無監督、深度雙向的自然語言處理模型預訓練系統。它只使用純文本語料庫進行訓練。
在發布的時候,BERT 在 11 個自然語言處理任務上取得了最先進的結果。這真是相當了不起的成就!你可以在短短幾個小時內(在單個 GPU 上)使用 BERT 訓練自己的自然語言處理模型(例如問答系統)。
有關 BERT 的更多信息,請參閱以下資源:
Google 官方博客文章:https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html
BERT 預訓練模型:https://www.paperswithcode.com/paper/bert-pre-training-of-deep-bidirectional#code
研究論文:https://arxiv.org/pdf/1810.04805.pdf
Google Transformer-XL
GitHub 項目地址:
https://github.com/kimiyoung/transformer-xl
從長遠來看,Google 的這一發行版對自然語言處理領域來說可能是一個非常重要的版本。如果你是一名菜鳥,這個概念可能會變得有點棘手,所以我建議你多讀幾遍來掌握它。我還會在這一節中提供一些資源,幫助你開始入門 Transformer-XL。
想象一下,你正在讀一本書,讀到一半的時候,書中突然出現了某個單詞或句子,而這些在這本書的開頭都提到過。這時候,你我都能回憶起那些單詞或句子指的是什么意思。但機器很難建立模擬長期依賴(long-term dependency)的模型,這是可以理解的。
如上所述,實現這一點的一種方法是使用 Transformer。但它們是在固定長度的上下文實現的。換句話說,如果使用這種方法,就沒有多少靈活性而言。
而 Transformer-XL 很好地彌補了這一缺陷。它由 Google AI 團隊開發,是一種新型的自然語言處理架構,可以幫助機器理解超出固定長度限制的上下文。Transformer-XL 比普通的 Transformer 要快上 1800 倍。
你可以通過 Google 發布的兩個動圖來了解這一區別:
普通 Transformer
Transformer-XL
正如你現在所預測的,Transformer-XL 在各種語言建模基準 / 數據集上實現了最新的、最先進的結果。下面是他們網頁上的一張表,展示了這一點:
上面的鏈接和下面提到的 Transformer-XL GitHub 存儲庫包含 PyTorch 和 TensorFlow 中的代碼。
有關 Transformer-XL 的更多信息,請參閱以下資源:
Google 官方博客文章:https://ai.googleblog.com/2019/01/transformer-xl-unleashing-potential-of.html
Transformer-XL 的預訓練模型:https://www.paperswithcode.com/paper/transformer-xl-attentive-language-models
研究論文:https://arxiv.org/abs/1901.02860
OpenAI GPT-2
GitHub 項目地址:
https://github.com/openai/gpt-2
目前這是一個頗有爭議的條目。一些人可能會認為 GPT-2 的發布就是 OpenAI 的營銷噱頭。我當然理解他們的想法。然而,我還是認為,至少嘗試一下 OpenAI 發布的代碼還是很重要的。
首先,我得為那些不知道我在說什么的人們提供一些背景信息。OpenAI 在 2 月份的時候發表了一篇博文,聲稱他們已經設計了一個自然語言處理模型,表現非常出色,以至于他們擔心被惡意使用,而沒有選擇發布完整版本。這當然引起了社區的關注。
GPT-2 經過訓練后,可以預測 40GB 互聯網文本數據的下一個出現的單詞。這個框架也是基于 Transformer 的模型,該模型在 800 萬個 Web 頁面的數據集進行訓練。他們在網站公布的結果令人震撼。這個模型能夠根據我們輸入的寥寥可數的句子就編織出一個完全清晰的故事,請看看下面的這個例子:
難以置信,對吧?
為了供研究人員和工程師測試,開發人員發布了一個小得多的 GPT-2 版本。原始模型有 15 億個參數,而開源的示例模型僅有 1.17 億個。
有關 GPT-2 的更多信息,請參閱以下資源:
OpenAI 官方博客文章:https://openai.com/blog/better-language-models/
GPT-2 的預訓練模型:https://github.com/openai/gpt-2
研究論文:https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf
詞嵌入
我們使用的大多數機器學習和深度學習算法都無法直接處理字符串和純文本。這些技術要求我們必須先將文本數據轉換為數字,然后才能執行任何任務(如回歸和分類)。
因此,簡單來說,詞嵌入就是為了將文本塊轉換為用于執行自然語言處理任務的數字。詞嵌入格式通常嘗試使用字典將單詞映射到向量。
你可以在下面的文章中,更深入地理解詞嵌入、它的不同類型以及如何在數據集中使用它們。如果你不熟悉這個概念的話,我認為這份指南對你來說是必讀的:
《An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec》(《直觀理解詞嵌入:從計數向量到 Word2Vec》:https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
在這一節中,我們將介紹自然語言處理領域中兩個最先進的詞嵌入。我還提供了教程的鏈接,這樣你就可以對每個主題有實際的理解。
ELMo
GitHub 項目地址:
https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md
ELMo(是 Embedding from Language Models 的縮寫)在構建自然語言處理模的上下文非常有用。
ELMo 是一種用向量和嵌入表示單詞的新方法。這些 ELMo 詞嵌入有助于我們在多個自然語言處理任務上獲得最先進的結果,如下所示:
讓我們花點時間來理解 ELMo 的工作原理。回憶一下我們之前討論過的雙向語言模型。從本文中得到的提示:“ELMo 詞向量是在雙層雙向語言模型(bidirectional language model,biLM)智商計算的。這個 biLM 模型有兩層堆疊在一起。每層有兩個通道:前向通道和后向通道。
ELMo 詞向量表示(word representations)考慮用于計算詞嵌入的完整輸入語句。因此“read”這個詞在不同的上下文中有不同的 ELMo 向量。這點與舊詞嵌入截然不同,對舊詞嵌入而言,無論單詞在什么上下文中使用,這個單詞都會分配到相同的向量。
有關 ELMo 更多的信息,請參閱以下資源:
《Step-by-Step NLP Guide to Learn ELMo for Extracting Features from Text》(《自然語言處理入門指南:學習 ELMo 從文本中提取特征》https://www.analyticsvidhya.com/blog/2019/03/learn-to-use-elmo-to-extract-features-from-text/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
用于預訓練模型的 GitHub 存儲庫:https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md
研究論文:https://arxiv.org/pdf/1802.05365.pdf
Flair
GitHub 項目地址:https://github.com/zalandoresearch/flair
Flair 并不完全是詞嵌入,而是詞嵌入的組合。我們可以稱 Flair 更多的是一個自然語言處理程序庫,它結合了 GloVe、BERT、EMLo 等嵌入。Zalando Research 的優秀人員開發并開源了 Flair。
該團隊已經為以下自然語言處理任務發布了幾個預訓練模型:
Name-Entity Recognition (NER,名稱 - 實體識別)
Parts-of-Speech Tagging (PoS,詞性標注)
文本分類
訓練自定義模型
還不確定?那么,看下面這張比較表就會讓你明白:
“Flair Embedding”是封裝在 Flair 庫中的簽名嵌入。它由上下文字符串嵌入提供支持。你應該自詡閱讀這篇文章《Introduction to Flair for NLP: A Simple yet Powerful State-of-the-Art NLP Library》(《Flair 簡介:簡單而強大的,最先進的自然語言處理庫》)來了解支持 Flair 的核心組件:
https://www.analyticsvidhya.com/blog/2019/02/flair-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
我特別喜歡 Flair 的地方就是它能夠支持多種語言。如此多的自然語言處理版本都只做英語方面的任務。如果自然語言處理想在全球范圍內獲得吸引力的話,我們就必須超越這一點!
有關 Flair 更多的信息,請參閱以下資源:
《Introduction to Flair for NLP: A Simple yet Powerful State-of-the-Art NLP Library》(《Flair 簡介:簡單而強大的,最先進的自然語言處理庫》):https://www.analyticsvidhya.com/blog/2019/02/flair-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
Flair 的預訓練模型:https://github.com/zalandoresearch/flair
StanfordNLP
GitHub 項目地址:https://github.com/stanfordnlp/stanfordnlp
說到將自然語言處理擴展到英語之外,現在有一個已設置基準的庫了。據作者聲稱,StandfordNLP 支持超過 53 種語言,這當然引起了我們的關注。
我們的團隊是第一批使用該庫并在真實數據集上發布結果的團隊之一。我們研究了一下,發現 StandfordNLP 確實為非英語語言中應用自然語言處理技術提供了很多可能性,比如印地語、漢語和日語。
StandfordNLP 是一個經過預訓練的、最先進的自然語言處理模型的集合。 這些模型并不只是僅在實驗室內測試——在 2017 年、2018 年的 CoNLL 競賽作者就曾使用 StandfordNLP 參賽。在 StandfordNLP 中打包的所有預訓練自然語言處理模型都是基于 PyTorch 構建的,并且可以在你自己的注釋數據上進行訓練和評估。
我們認為,你應該考慮 StandfordNLP 的兩個主要原因是:
用于執行文本分析的完整神經網絡管道,包括:
標記化(Tokenization)
多詞標記擴展(Multi-word token (MWT) expansion)
詞性還原(Lemmatization)
詞性和詞形特征標記(Parts-of-speech (POS) and morphological feature tagging)
依存句法分析(Dependency Parsing)
一個穩定的官方維護的 CoreNLP Python 接口
有關 StandfordNLP 的更多信息,請參閱以下資源:
《Introduction to StanfordNLP: An Incredible State-of-the-Art NLP Library for 53 Languages (with Python code)》(《StandfordNLP 簡介:令人難以置信的、最先進的自然語言處理庫,支持 53 種語言(使用 Python 實現)》):https://www.analyticsvidhya.com/blog/2019/02/stanfordnlp-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
StandfordNLP 預訓練模型:https://github.com/stanfordnlp/stanfordnlp
尾 注
本文絕不是預訓練自然語言處理模型的詳盡清單。還有更多可用的模型,你可以在這個網站上查看其中的一些:
https://paperswithcode.com
下面是學習自然語言處理的一些有用資源:
《Natural Language Processing (NLP) Using Python》(《課程:使用 Python 進行自然語言處理(NLP)》):https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
Certified Program: NLP for Beginners(認證項目:NLP 初學者):https://courses.analyticsvidhya.com/bundles/nlp-combo?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
關于自然語言處理的文章集:https://www.analyticsvidhya.com/blog/category/nlp/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article
-
數據集
+關注
關注
4文章
1208瀏覽量
24689 -
自然語言處理
+關注
關注
1文章
618瀏覽量
13552 -
遷移學習
+關注
關注
0文章
74瀏覽量
5559
原文標題:NLP領域最優秀的8個預訓練模型(附開源地址)
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論