史上最详尽的NLP预处理模型汇总
?
文章發布于公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇干貨。
?
?
?
轉自 | 磐創AI(公眾號ID:xunixs)
作者 | AI小昕
?
編者按:近年來,自然語言處理(NLP)的應用程序已經無處不在。NLP使用率的快速增長主要歸功于通過預訓練模型實現的遷移學習概念,遷移學習本質上是在一個數據集上訓練模型,然后使該模型能夠適應在不同的數據集上執行不同的NLP操作。這一突破使得每個人都能輕松地開啟NLP任務,尤其是那些沒有時間和資源從頭開始構建NLP模型的人。所以,使用預訓練模型處理NLP任務是目前非常熱門的研究方向,本文將重點介紹八個預訓練的NLP模型以及每個模型的相關資源。
?
01為什么要使用預訓練模型?
?
先前的研究者已經為我們設計了一個基準模型,我們可以很方便地在自己的NLP數據集上使用該預訓練模型,而不是從頭開始構建模型來解決類似的NLP問題。此外,使用這些最先進的預訓練模型,可以幫助我們節省大量的時間和計算資源。
?
02預訓練模型的分類
?
根據預訓練模型的應用,我們可以將其分為三類:
?
Multi-Purpose NLP Models
ULMFiT
Transformer
Google’s BERT
Transformer-XL
OpenAI’s GPT-2
?
Word Embeddings
ELMo
Flair
?
Other Pretrained Models
StanfordNLP
?
下面我們來一一看下這三個分類:
?
03
多用途NLP模型(Multi-Purpose NLP Models)
?
多用途模型是NLP領域的熱門話題。這些模型為我們所關注的NLP應用提供了動力——機器翻譯、問答系統、聊天機器人、情感分析等。這些多用途NLP模型的核心是語言建模的概念。簡單來說,語言模型的目的是預測序列中的下一個單詞或字符。我們接下來會通過以下五個預處理模型來理解這一概念,我們已經為每個模型提供了研究論文和項目鏈接。
?
01ULMFiT
【項目地址:https://github.com/fastai/fastai/tree/master/courses/dl2/imdb_scripts】
?
ULMFiT是由JeremyHoward和DeepMind的Sebastian Ruder三位科學家提出并設計的。在文本分類任務方面,ULMFiT要優于許多最先進的技術,這個方法涉及到將一個在wikitex103數據集上訓練的預處理語言模型微調為一個新的數據集,使其不會忘記它以前學到的東西。另一方面,ULMFiT需要很少的例子就能產生這些令人印象深刻的結果,這使得它更容易讓人理解和實現。
?
?
此外,如果我們想了解更多的關于ULMFiT的信息,請參閱:
?
Tutorial on Text Classification (NLP)using ULMFiT and fastai Library in Python
【https://www.analyticsvidhya.com/blog/2018/11/tutorial-text-classification-ulmfit-fastai-library/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】
?
Pretrained models for ULMFiT
【https://www.paperswithcode.com/paper/universal-language-model-fine-tuning-for-text】
?
Research Paper
【https://arxiv.org/abs/1801.06146[1]】
?
02Transformer
【項目地址:https://github.com/tensorflow/models/tree/master/official/transformer】
?
Transformer結構是近幾年來NLP主要發展的核心。它在2017年由谷歌推出。當時,循環神經網絡(RNN)被用于語言任務,如機器翻譯和問答系統等。而這種Transformer結構要優于RNN和CNN,且訓練模型所需的計算資源也減少了。我們可以參考以下的比較:
?
?
谷歌官方解釋說:“transformer應用了一種自我關注機制,它可以直接模擬句子中所有單詞之間的關系,而不用考慮它們的位置如何。”它使用了固定大小的上下文(也就是前面的單詞)來實現這一點。例如:She found the shells on the bank of the river。transformer模型可以一步理解“bank”在這里指的是海岸,而不是金融機構。
?
通過以下資料可以學習更多有關Transformer的資源:
?
1. Google’sofficial blog post
【https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html】
?
2.?Pretrained models for Transformer
【https://www.paperswithcode.com/paper/attention-is-all-you-need】
?
3. Research Paper
【https://arxiv.org/abs/1706.03762】
?
03Google’s BERT
【項目地址:https://github.com/google-research/bert】
?
自谷歌發布結果以來,Bert框架就掀起了一股波瀾,并且還開放了源代碼背后的代碼。Bert也許不能標志著一個新的NLP時代,但毫無疑問,Bert是一個非常有用的框架,可以很好的適用于各種NLP任務。
?
?
BERT是雙向編碼器的縮寫,它考慮單詞兩側的上下文。以前的方法都是一次性考慮一個詞的一側,左側或是右側。這種雙向性的方法可以有助于模型更好地理解使用單詞的上下文。此外,BERT還可以進行多任務學習,即可以同時執行不同的NLP任務。
?
BERT是第一個用于預訓練NLP模型的無監督方法、深度雙向系統,但它只能使用純文本語料庫進行訓練。在發布時,BERT正在為11項自然語言處理任務生成最新的結果,可以支持用戶在短短幾個小時內(在單個GPU上)使用BERT訓練自己的NLP模型(如:問答系統)。
?
更多關于Google’s BERT的學習資料:
?
1. Google’sofficial blog post
【https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html】
?
2. Pretrained models for BERT
【https://www.paperswithcode.com/paper/bert-pre-training-of-deep-bidirectional#code】
?
3. Research Paper
【https://arxiv.org/pdf/1810.04805.pdf】
?
04Google’s Transformer-XL
【項目地址:https://github.com/kimiyoung/transformer-xl】
從長遠來看谷歌發布的這一版本的Transformer模型可能是NLP中一個非常重要的版本。想象一下,當你正在讀書時,突然出現一個單詞或句子,而這個單詞和句子在書的開頭已經提到過來。也許我們有時可以回想起來它是什么,但計算機很難建立這種長期的依賴關系模型。正如我們上邊降到的Transformers可以很容易的做到這一點,但它是用固定長度的上下文實現的,也就導致了這種方式最大的缺點是沒有太多的靈活性。
?
Transformer-XL很好的彌補了這個差距,它由谷歌人工智能團隊研發的一種新型的NLP架構,可以幫助計算機理解超出固定長度限制的上下文。此外,Transformer-XL比一般的Transformers速度要快1800倍。
?
Transformer-XL在和各種語言建模的對比上,取得了不錯的結果。下圖是和其中一種模型在各類數據上的對比結果:
?
?
有關Transformer-XL的更多學習資源:
?
1. Google’s official blog post
【https://ai.googleblog.com/2019/01/transformer-xl-unleashing-potential-of.html】
?
2. Pretrained models forTransformer-XL
【https://www.paperswithcode.com/paper/transformer-xl-attentive-language-models】
?
3. Research Paper
【https://arxiv.org/abs/1901.02860】
?
05OpenAI’s GPT-2
【項目地址:https://github.com/openai/gpt-2】
?
這算是一個比較有爭議的項目,因為一些人覺得GPT-2的發布是OpenAI的一個營銷噱頭。不過,我們至少要嘗試一下OpenAI發布的代碼,這是很重要的。
?
先交代一個背景:OpenAI在2月份的時候寫了一篇博文
【鏈接為:https://openai.com/blog/better-language-models/】,聲稱他們設計了一個名為GPT-2的NLP模型,這個模型非常好,以至于他們擔心惡意使用而沒有發布完整版本的費用。這件事一下子引起了社會各界的關注。
?
GPT-2經過訓練,可以預測40GB互聯網文本數據中的下一個詞。這個模型其實也是一個基于transformer訓練的模型,它訓練了一個800萬網頁的數據集。他們在自己的網站上發布的結果令人震驚:這個模型能夠根據我們輸入的幾個句子編織出一個完全清晰的故事。查看此示例:
?
?
這個結果讓人很難以置信。后來,開發人員已經發布了一個小得多的GPT-2版本供研究人員和工程師測試。 原始模型有15億個參數,開源樣本模型有1.17億個。
?
有關GPT-2的更多學習資源:
?
1. OpenAI’sofficial blog post
【https://openai.com/blog/better-language-models/】
?
2. Pretrained models for GPT-2
【https://github.com/openai/gpt-2】
?
3. Research paper
【https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf】
?
04詞嵌入向量模型(Word Embeddings)
?
我們使用的大多數機器學習和深度學習算法都無法直接處理字符串和純文本。這些技術要求我們在文本數據執行任何任務(如回歸或分類)之前將其轉換為數字。簡單來說,Word Embeddings是將文本塊轉換為用于執行NLP任務的數字。Word Embeddings格式通常嘗試使用字典將單詞映射到向量。
?
在本節中,我們將介紹兩個最先進的NLP單詞嵌入。我還提供了項目鏈接,這樣您就可以實際了解每個主題。
?
01ELMO
【項目地址:https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md】
?
ELMo是語言模型嵌入(Embeddings from Language Models)的縮寫,在構建NLP模型的環境中非常有用。具體來看,ELMo是一種在向量和Embeddings中表示單詞的新方法,這些ELMo Embeddings有助于我們在多個NLP任務上獲得最棒的結果,如下所示:
?
?
讓我們來了解一下ELMo的工作原理: 回想一下我們之前討論過的雙向語言模型,從中我們可以得到啟示,ELMo單詞向量是在雙層雙向語言模型(biLM)之上計算的, 這個biLM模型有兩層堆疊在一起,每層都有2次傳遞(前傳和后傳)。而ELMo單詞表示考慮用于計算單詞Emebeddings的完整輸入句子。
?
有關ELMo的更多學習資源:
?
?1.?Step-by-Step NLP Guide to Learn ELMo for ExtractingFeatures from Text
【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】
?
2. GitHub repository for pretrained models
【https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md】
?
3. Research Paper
【https://arxiv.org/pdf/1802.05365.pdf】
?
02FLair
【項目地址:https://www.datalearner.com/blog/1051553314593568】
?
Flair不完全是一個Word Embeddings,而是一個Word Embeddings的組合。我們可以將Flair稱為NLP庫,它結合了諸如GloVe,BERT,ELMo等WordEmbeddings的內容。由Zalando Research的優秀人員開發并開源了代碼Flair。
?
?
此外,該團隊已經為以下NLP任務發布了幾個預訓練模型:
1. Name-Entity Recognition (NER)
2. Parts-of-Speech Tagging (PoS)
3. Text Classification
4. Training Custom Models
?
下表格展示了其效果:
?
?
有關Flair更多的學習資源:
?
1. Introductionto Flair for NLP: A Simple yet Powerful State-of-the-Art NLP Library
【https://www.analyticsvidhya.com/blog/2019/02/flair-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】
?
2. Pretrainedmodels for Flair
【https://github.com/zalandoresearch/flair】
?
05其它預訓練模型(Other Pretrained Models)
?
01Stanford NLP
【項目地址:https://github.com/stanfordnlp/stanfordnlp】
該作者聲明 作者聲稱StanfordNLP支持超過53種語言,真正開辟了很多在非英語語言中應用NLP技術的可能性。如:印度語、中文和日語。這對于NLP往非英語領域的拓展有極大的幫助。
?
?
StanfordNLP是由一系列經過預先訓練的NLP模型組成的集合。這些模型不僅經過實驗室的測試,還被作者用于2017年和2018年康奈爾大學的競賽。在StanfordNLP中打包的所有預訓練的NLP模型都是基于PyTorch構建的,我們可以在自己的注釋數據上進行訓練和評估。
?
此外,我們還應該關注StanfordNLP的兩個主要原因是:
?
1. 用于執行文本分析的完整神經網絡pipeline,包括:
符號化(Tokenization)
Multi-word token (MWT)擴展
詞形還原
詞性標注(POS)和形態特征標記
依賴性解析(Dependency Parsing)
?
2. 一個穩定的官方維護的CoreNLP Python接口
?
下面為大家提供更多的關于STanfordNLP的學習資源:
?
1. Introduction to StanfordNLP: An IncredibleState-of-the-Art NLP Library for 53 Languages (with Python code)
【https://www.analyticsvidhya.com/blog/2019/02/stanfordnlp-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】
?
2. Pretrained models for StanfordNLP
【https://github.com/stanfordnlp/stanfordnlp】
?
【總結】:本文為大家詳細總結、概述了八個NLP的預處理模型。但現有的預處理模型不僅有這些,我們可以訪問:https://paperswithcode.com/,學習更多的NLP預處理模型。
?
此外,以下是學習NLP的一些有用資源:
?
1. Natural Language Processing using Python course
【https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】
?
2. Certified Program: NLP for Beginners
【https://courses.analyticsvidhya.com/bundles/nlp-combo?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】
?
3. Collection of articles on Natural Language Processing(NLP)
【https://www.analyticsvidhya.com/blog/category/nlp/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】
?
推薦閱讀:
?
?
?
星標我,每天多一點智慧
?
轉載于:https://www.cnblogs.com/shuzhiwuyu/p/10730305.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的史上最详尽的NLP预处理模型汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Appium_pytest fixtur
- 下一篇: 20175333曹雅坤 实验二 Java