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