英偉達(dá)NLP公開課第1期:使用NeMo快速入門NLP、實現(xiàn)機器翻譯任務(wù),英偉達(dá)專家實戰(zhàn)講解,內(nèi)附代碼
對話式AI是當(dāng)前AI領(lǐng)域最火熱的細(xì)分領(lǐng)域之一,其中自然語言處理(NLP)是最為困難的問題之一。
那么,零基礎(chǔ)、對會話式AI感興趣的小伙伴們如何快速入門 NLP領(lǐng)域?
近日,英偉達(dá)x量子位發(fā)起的NLP公開課上,英偉達(dá)開發(fā)者社區(qū)經(jīng)理李奕澎老師分享了【使用NeMo快速入門自然語言處理】,介紹了NLP相關(guān)理論知識,并通過代碼演示講解了如何使用NeMo方便地調(diào)用NLP函數(shù)庫及NLP預(yù)訓(xùn)練模型,快速完成NLP各類子任務(wù)的應(yīng)用。
直播回放:
以下為分享內(nèi)容整理,文末附課程PPT&代碼下載鏈接。
大家好,我是英偉達(dá)開發(fā)者社區(qū)經(jīng)理李奕澎。今天的課程中,我將首先對自然語言處理(NLP)做出介紹,包括NLP的定義、發(fā)展歷程、應(yīng)用場景;然后帶大家了解NLP的工作流程及原理;接下來將詳細(xì)闡述從Word2Vec到Attention注意力機制、從Transformer到BERT模型的內(nèi)部原理;最后,將通過代碼實戰(zhàn)介紹如何在NeMo中結(jié)合BERT模型,快速實現(xiàn)命名實體識別、機器翻譯等任務(wù)。
自然語言處理簡介
自然語言處理(NLP)是對話式AI場景中的一個子任務(wù)。
對話式AI本質(zhì)上是一個人機交互的問題,它讓機器能夠聽懂人說的話、看懂人寫的文字,同時機器寫出人看得懂的句子、說出人聽得懂的話。機器能夠“聽”的過程,是由自動語音識別(ASR)技術(shù)實現(xiàn)的,機器能夠“說”的過程,是由語音合成(TTS)技術(shù)實現(xiàn)的。
本次課程中,我們將把重心放在如何讓機器去理解、懂得人類的語言這一過程,即對話式AI的重中之重—自然語言處理(NLP)技術(shù)。
上圖是維基百科對NLP的定義。簡單來說,NLP是一個語言學(xué)、計算機科學(xué)、人工智能的交叉學(xué)科,其目標(biāo)是實現(xiàn)人與機器之間有關(guān)語義理解方面的有效溝通。
NLP主要經(jīng)歷了5個重要的發(fā)展階段。首先是基礎(chǔ)階段,在1950年從圖靈測試發(fā)問“機器是否能夠思考”開始,研究者就根據(jù)喬姆斯基語法,基于規(guī)則實現(xiàn)了第一個句法分析器。
1980年,由于基于規(guī)則系統(tǒng)的研究不斷的發(fā)展,第一個基于大量的手寫規(guī)則的自動問答系統(tǒng)就誕生了。
1990年,隨著統(tǒng)計學(xué)習(xí)方法開始興起,結(jié)合語料庫的建設(shè)和大量機器學(xué)習(xí)算法不斷的創(chuàng)新和迭代,革命性的應(yīng)用相繼出現(xiàn)。
到了2010年,隨著深度學(xué)習(xí)的崛起、神經(jīng)網(wǎng)絡(luò)的復(fù)興,包括文字表示學(xué)習(xí)、端到端設(shè)計等思想的進步,讓NLP的應(yīng)用在效果上得以進一步的提升。
此后,隨著2013年Word2Vec算法的出現(xiàn)、2018年劃時代的BERT模型的誕生,以及從BERT延伸出來的一系列更優(yōu)秀的算法,NLP進入黃金時代,在工業(yè)界的應(yīng)用領(lǐng)域、實用性和效果得到了大大的提升,實現(xiàn)了落地和產(chǎn)業(yè)化。
NLP的應(yīng)用領(lǐng)域非常之多,比如文本檢索、文本摘要、機器翻譯、問答系統(tǒng)、文本分類/情感分析、對話系統(tǒng)、信息抽取、文本聚類、序列標(biāo)注、知識圖譜等,上圖介紹了在不同領(lǐng)域的具體應(yīng)用。
NLP的工作流程和實現(xiàn)原理
一般來說,當(dāng)我們拿到一個NLP的項目,首先需要做的是數(shù)據(jù)預(yù)處理,尤其是文本數(shù)據(jù)預(yù)處理。數(shù)據(jù)的來源比較廣泛,可以通過爬蟲、開源數(shù)據(jù)集、各種合作渠道等獲得原始的文本數(shù)據(jù);我們需要對這些數(shù)據(jù)進行分詞、清洗、標(biāo)準(zhǔn)化等預(yù)處理工作。
接下來,我們要讓計算機認(rèn)識這些文本,也就是文本向量化,把人類可讀的文字轉(zhuǎn)換成計算機可以認(rèn)識的、數(shù)字化的過程??梢酝ㄟ^tf-idf、Word2Vec、Elmo、BERT等算法提取到文本的詞向量。
最后再根據(jù)相似度計算、分類算法進行建模,訓(xùn)練模型,并進行推理測試、模型評估、應(yīng)用部署等。
對于其實現(xiàn)原理,比較難理解的是“文本向量化”這一部分,我重點聊一下。俗話說“物以類聚、人以群分”,同樣的,對文本進行向量化之后,能夠發(fā)現(xiàn)屬性相近的單詞,在向量空間的分布上更加接近。
那么這些單詞是怎么實現(xiàn)向量化的?
計算機只認(rèn)識二進制的數(shù)據(jù),因此我們需要給語料庫中的每一個單詞進行編碼,從而讓計算機可以認(rèn)識不同的單詞,并且進行相關(guān)的計算。
我們可以采用Onehot編碼,如上圖左側(cè),apple的第一維是1其它是0,bag的第二維是1其它是0,以此類推。但它有一些缺點,一是當(dāng)語料庫非常龐大時,比如100萬個單詞,這將導(dǎo)致每個單詞都需要表示成100萬維的向量,這種向量是很稀疏的,不利于計算。二是Onehot編碼無法表達(dá)相似的單詞之間的相似長度,比如說英文單詞beautiful和pretty,二者意思相近,但是無法通過Onehot編碼的方式表達(dá)出來。
為了解決這一問題,我們將Onehot編碼作為輸入,通過Word2Vec算法對它進行降維壓縮,生成更加稠密的詞向量,并投射到向量空間中。這樣,表示動作的動詞run和jump之間的向量位置會比較接近,dog、rabbit、cat等表述動物的名詞會離得比較近。
也就是說,通過Word2Vec生成稠密的詞向量后,便于我們計算單詞間的相似度。
從Word2Vec到Attention注意力機制
可以說,Word2Vec的出現(xiàn)是NLP領(lǐng)域中非常重要的一個節(jié)點,下面簡單介紹下。
Word2Vec是連續(xù)詞袋模型(CBOW)和跳字模型(Skip-Gram)兩種算法的結(jié)合。
CBOW模型的主要思想是用周圍的詞、即上下文來預(yù)測中間詞。比如上圖左半部分,首先以pineapples、are、and、yellow這幾個詞的Onehot編碼作為輸入,與初始化的權(quán)重矩陣進行矩陣相乘,得到n維的向量;然后進行加權(quán)平均,把它作為隱藏層的向量h;再用向量h和另外一個初始化的權(quán)重矩陣進行矩陣相乘,最后再經(jīng)過激活函數(shù)的處理,就可以得到一個v維的向量y。向量y當(dāng)中的每一個元素代表了它相對應(yīng)的每一個單詞的概率分布,其中概率最大的元素所指的單詞就是我們想要預(yù)測的中間詞。
而Skip-Gram模型是通過中間詞來預(yù)測上下文。如上圖右半部分,首先是將spikey這個詞的Onehot編碼作為輸入,與初始化的權(quán)重矩陣進行矩陣相乘,得到隱藏層的向量h;然后將h與每一個輸出單元的初始化權(quán)重矩陣進行矩陣相乘,就可以得到輸出詞及相對的概率。
CBOW與Skip-Gram相結(jié)合就是Word2Vec算法,但這種算法也存在一定問題,比如無法解決一詞多義的問題,也就是對上下文語義關(guān)系的理解還不夠深入。
為了解決一詞多義的問題,一些更先進的算法,如ELMO、BERT、GPT等算法就相繼出現(xiàn)了。
BERT和GPT都是基于Transformer的結(jié)構(gòu),而Transformer的核心是注意力機制。
舉個例子,人類瀏覽一段手機介紹的文字時,除了注意價格等因素,男性可能會把更多注意力放在性能、技術(shù)參數(shù)相關(guān)字段,女性則更注意外觀、顏色等字段。
在NLP中,機器也可以模擬人類的注意力機制,根據(jù)信息的重要程度更深入的理解文本。
首先介紹下“自注意力機制”的工作流程。
給定兩個單詞,比如Thinking和Machines,第一步是要輸入這兩個單詞的詞向量x1、x2。
第二步,將x1、x2分別與初始化的 q、k、v權(quán)重矩陣進行矩陣相乘,得到q1、k1、v1、q2、k2、v2矩陣。其中q矩陣是用來做搜索的,k矩陣是用來被搜索的,v矩陣是值矩陣,是文本內(nèi)容的本身。
第三步,將q1和k1進行矩陣相乘,將q1和k2進行矩陣相乘,用來計算 Thinking與Machines兩個詞的相關(guān)度,來打出注意力的分?jǐn)?shù)。這個分?jǐn)?shù)就體現(xiàn)了上下文中不同單詞間的關(guān)聯(lián)程度。
第四步,為了防止矩陣點乘后的結(jié)果過于龐大,這里需做縮放處理和softmax歸一化的處理。
第五步,將歸一化的結(jié)果與值矩陣分別進行點乘,加權(quán)求和,就可以得到做完注意力機制之后的z矩陣。
在實際的操作當(dāng)中,我們可以設(shè)置多個自注意力機制的疊加,初始化多個q、k、v權(quán)重矩陣參與文本向量的特征提取,也就是“多頭注意力機制”。最后把這多個注意力的頭拿到的注意力矩陣z進行加權(quán)求和,就可以得到最終的注意力矩陣Z,便于后續(xù)的計算。
從Transformer結(jié)構(gòu)到BERT模型
Transformer的核心是注意力機制,下面一起了解下它的內(nèi)部的結(jié)構(gòu)。
如上圖左側(cè),藍(lán)色框里的Encoder部分是Transformer的編碼器,紅色框里的Decoder部分是Transformer的解碼器。
編碼器的輸入是詞向量本身加上位置嵌入向量形成的向量的和,再經(jīng)過一層多頭注意力機制層,再經(jīng)歷帶有殘差網(wǎng)絡(luò)結(jié)構(gòu)的Add&Norm層,就走完了第一個子模塊。接下來就進入第二個編碼器子模塊,先經(jīng)過一個前饋神經(jīng)網(wǎng)絡(luò)層,再接一層基于殘差網(wǎng)絡(luò)結(jié)構(gòu)的Add&Norm層,就完成整體的編碼工作。
解碼器除了基于注意力機制、考慮自身的文字信息的輸入之外,它在第二個解碼器子模塊中還考慮了編碼器的輸出結(jié)果。
上述就是Transformer的一個編碼器和一個解碼器的工作流程,實際使用中可以重復(fù)n次。Transformer論文發(fā)表的作者使用了6個編碼器和6個解碼器來實現(xiàn)機器翻譯的任務(wù),取得了非常不錯的效果。
BERT是基于Transformer的雙向語言模型,同時也是一個預(yù)訓(xùn)練模型。
我們可以將BERT理解成Transformer結(jié)構(gòu)中的編碼器,是由多個編碼器堆疊而成的信息特征抽取器。BERT有3個重要的特點:
從BERT的輸入表示方面來看,BERT的輸入既有詞嵌入(Token Embeddings),又有位置嵌入(Position Embeddings),同時還加入了分割嵌入(Segment Embeddings),所以BERT的輸入是三個Embeddings求和結(jié)果。
從BERT的Mask系統(tǒng)來看,它類似于我們做完型填空的任務(wù)。給定一個句子,將其中的某個詞遮擋起來,讓模型根據(jù)上下文信息來預(yù)測被遮擋起來的詞。這樣能夠讓模型對上下文的語義有更深的理解。
第三點是BERT預(yù)測句子關(guān)系,即句對分類任務(wù),對被打亂順序的段落進行重新排序,這就需要對整個文章做出充分、準(zhǔn)確的理解。因此,我們認(rèn)為BERT是一個句子級別、甚至文章級別的語言模型,并且在句子分類、問答系統(tǒng)、序列標(biāo)注、閱讀理解等11項 NLP的任務(wù)中都取得了非常好的應(yīng)用效果。
在NeMo中如何使用BERT
BERT模型如此優(yōu)秀,那么我們?nèi)绾慰焖?、方便地利用起來呢?接下來我將通過代碼實戰(zhàn)演示,分享如何在開源工具庫NeMo中玩轉(zhuǎn)BERT。
接下來,李老師通過代碼演示,分享了如何安裝NeMo、如何在NeMo中調(diào)用BERT模型,實現(xiàn)命名實體識別、機器翻譯等任務(wù)。大家可觀看直播回放繼續(xù)學(xué)習(xí)。(代碼演示部分從第43分鐘開始)
代碼&課程PPT下載鏈接:https://pan.baidu.com/s/1AXMv7e0EY8ofzgdm4gy-pQ
提取碼: nhk2
下期直播預(yù)告
7月14日晚8點第2期課程中,奕澎老師將直播分享使用NeMo快速完成NLP中的信息抽取任務(wù),課程大綱如下:
- 介紹信息抽取技術(shù)理論
- 介紹命名實體識別(NER)
- 構(gòu)建適合NeMo的自定義NER數(shù)據(jù)集
- 介紹NeMo中的信息抽取模型
- 代碼演示:使用NeMo快速完成NER任務(wù)
直播報名:
掃碼-關(guān)注“NVIDIA開發(fā)者社區(qū)”,并根據(jù)提示完成報名:
△請準(zhǔn)確填寫您的郵箱、便于接收直播提醒&課程資料哦~
—?完?—