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