使用NeMo快速完成NLP中的信息抽取任務(wù),英偉達(dá)專家實(shí)戰(zhàn)講解,內(nèi)附代碼
信息抽取(IE)是從非結(jié)構(gòu)化、半結(jié)構(gòu)化的可讀文檔或其他電子表示來源中自動(dòng)提取結(jié)構(gòu)化信息的任務(wù)。信息抽取技術(shù)為文本挖掘、智能檢索、智能對(duì)話、知識(shí)圖譜、推薦系統(tǒng)等應(yīng)用提供了基本的技術(shù)支持。
近日,英偉達(dá)x量子位發(fā)起的NLP公開課上,英偉達(dá)開發(fā)者社區(qū)經(jīng)理李奕澎老師分享了【使用NeMo快速完成NLP中的信息抽取任務(wù)】,介紹了NLP、信息抽取、命名實(shí)體識(shí)別等相關(guān)理論知識(shí),并通過代碼演示講解了如何使用NeMo快速完成NLP中的命名實(shí)體識(shí)別任務(wù)。
以下為分享內(nèi)容整理,文末附直播回放、課程PPT&代碼。
大家晚上好,我是本次直播的主講人,來自NVIDIA企業(yè)級(jí)開發(fā)者社區(qū)的李奕澎,本次研討會(huì)的主題是通過對(duì)話式AI工具庫NeMo快速完成NLP中的信息抽取任務(wù)。
本次課程主要是承接上一次快速入門NLP自然語言處理的課程,如果大家對(duì)NLP技術(shù)了解較少,建議大家看一下上期課程的視頻回放(鏈接:https://www.bilibili.com/video/BV1Bq4y1s7xG/)。
本文末附有本次直播的回放鏈接、代碼,大家可以根據(jù)課程內(nèi)容動(dòng)手操作。
今天的課程,首先帶大家回顧上節(jié)課講述的NLP相關(guān)技術(shù)與理論知識(shí);其次介紹NLP自然語言處理的子任務(wù)—信息抽取技術(shù)的相關(guān)理論知識(shí),包括信息抽取的概念、用途等;接下來我將介紹命名實(shí)體識(shí)別(NER)及其用途和基本原理;然后,我將介紹如何基于NeMo構(gòu)建命名實(shí)體識(shí)別數(shù)據(jù)集,同時(shí)介紹 NeMo工具庫中使用的信息抽取模型;最后,我們將進(jìn)入代碼實(shí)戰(zhàn)環(huán)節(jié),跟大家分享如何使用NeMo訓(xùn)練中文命名實(shí)體識(shí)別模型,完成中文命名實(shí)體識(shí)別任務(wù)。
NLP理論知識(shí)簡介
自然語言處理(NLP)是對(duì)話式AI場景中的一個(gè)子任務(wù),是機(jī)器對(duì)文本進(jìn)行理解的過程。
NLP的應(yīng)用領(lǐng)域包括檢索、文本分類、文本摘要、機(jī)器翻譯、智能對(duì)話、序列標(biāo)注、信息抽取等。
自然語言處理的工作流程一般包括文本預(yù)處理(數(shù)據(jù)清洗、分詞、標(biāo)準(zhǔn)化等)、文本向量化、特征提取、模型訓(xùn)練、系統(tǒng)評(píng)估等步驟,最后進(jìn)行商業(yè)部署。
其中,對(duì)于文本向量化的生成,我們重點(diǎn)介紹了Onehot編碼和Word2Vec算法。
OneHot編碼是指在同一個(gè)語料庫中,通過1、0索引方式,對(duì)每一個(gè)單詞進(jìn)行索引編碼,從而讓計(jì)算機(jī)認(rèn)識(shí)單詞并進(jìn)行相應(yīng)的計(jì)算。其缺點(diǎn)是當(dāng)語料庫非常大時(shí),向量的維度也會(huì)非常大,向量會(huì)非常稀疏,不便于后續(xù)的計(jì)算。
為了解決這一問題,我們將Onehot編碼作為輸入,通過Word2Vec算法進(jìn)行降維壓縮,生成更稠密的詞向量,以便于計(jì)算單詞間的相似度。
Word2Vec是連續(xù)詞袋模型(CBOW)和跳字模型(Skip-Gram)兩種算法的結(jié)合。其中,CBOW模型的主要思想是用上下文來預(yù)測中間詞,而Skip-Gram模型是通過中間詞來預(yù)測上下文。
而Word2Vec算法的缺點(diǎn)是無法解決一詞多義的問題。因此,基于Transformer結(jié)構(gòu)的更先進(jìn)的算法相繼出現(xiàn),如BERT、GPT等。
Transformer的核心是注意力機(jī)制。對(duì)此了解較少的小伙伴可以觀看上期回放或者查找其他資料來學(xué)習(xí)。
BERT模型是基于Transformer的雙向語言模型和預(yù)訓(xùn)練模型。我們可以將BERT理解成Transformer結(jié)構(gòu)中的編碼器,是由多個(gè)編碼器堆疊而成的信息特征抽取器。它在序列標(biāo)注、機(jī)器翻譯、閱讀理解、句對(duì)分類等11項(xiàng) NLP子任務(wù)中都取得了非常好的效果。尤其在信息抽取中的命名實(shí)體識(shí)別任務(wù)中,BERT更是扮演了非常重要的角色。
信息抽取技術(shù)
先舉例說明一下,假如我是一名HR,招聘時(shí)需要在大量的簡歷中挑選與招聘目標(biāo)所匹配的關(guān)鍵信息,比如學(xué)歷、技能、工作經(jīng)驗(yàn)等。那么如何快速處理數(shù)百份甚至更多簡歷?是否可以借助機(jī)器幫助我自動(dòng)化抽取簡歷里的關(guān)鍵信息,并進(jìn)行篩選、分類?這時(shí)候,信息抽取技術(shù)就派上用場了。
信息抽取(Information Extraction,IE)是把文本里包含的信息進(jìn)行結(jié)構(gòu)化的處理,變成表格一樣的組織形式。即我們輸入原始的信息文本,輸出固定格式的信息點(diǎn)。
信息抽取本質(zhì)上就是從非結(jié)構(gòu)化或半結(jié)構(gòu)化的文檔中,提取出結(jié)構(gòu)化信息的技術(shù)。
信息抽取的應(yīng)用非常廣泛,國外有人利用信息抽取技術(shù),為圣經(jīng)做了一個(gè)檢索系統(tǒng),可以方便的查詢圣經(jīng)的內(nèi)容。我自己也做過類似的項(xiàng)目,將非常復(fù)雜的石油勘探科研文檔中的文本信息抽取出來,將它變成結(jié)構(gòu)化的數(shù)據(jù)形式,構(gòu)建了一個(gè)智能檢索系統(tǒng),只需輸入關(guān)鍵詞就能快速檢索相關(guān)技術(shù)、參數(shù)。
同樣,我們?cè)谏罟ぷ髦杏龅筋愃频膱鼍?,也可以利用信息抽取技術(shù),將非結(jié)構(gòu)化的文本轉(zhuǎn)化為結(jié)構(gòu)化的信息,減少我們的工作量。
如上圖,輸入一堆雜亂無序的文本內(nèi)容,通過信息抽取技術(shù),就可以輸出結(jié)構(gòu)化的內(nèi)容。
此外,我們還可以基于信息抽取技術(shù)構(gòu)建知識(shí)圖譜。從純文本中進(jìn)行結(jié)構(gòu)化的信息抽取,與已經(jīng)存放在數(shù)據(jù)庫中的結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)融合在一起,抽取出三元組、多元組事件、時(shí)序信息等進(jìn)而構(gòu)建知識(shí)圖譜。
上圖更加的清楚展示了從數(shù)據(jù)處理、到信息抽取,再到知識(shí)圖譜的構(gòu)建流程。
首先我們對(duì)文本進(jìn)行一個(gè)預(yù)處理,包括數(shù)據(jù)清洗,取出特殊符號(hào)、停用詞、停用詞、詞形還原等操作;然后我們可以進(jìn)行、分詞、詞性標(biāo)注、實(shí)體標(biāo)注;最后通過模型進(jìn)行命名實(shí)體識(shí)別的工作,同時(shí)我們對(duì)這些實(shí)體進(jìn)行連接,找出實(shí)體之間的相互關(guān)系。然后我們把抽取出來的這些結(jié)構(gòu),存放在相關(guān)的圖數(shù)據(jù)庫中,就可以構(gòu)建出我們想要的知識(shí)圖譜。
上圖右側(cè)是存放在 NEO4J圖數(shù)據(jù)庫中的知識(shí)圖譜,每一個(gè)圓圈都是一個(gè)節(jié)點(diǎn),代表了一個(gè)實(shí)體,節(jié)點(diǎn)之間的連線代表它們的關(guān)系。
命名實(shí)體識(shí)別
命名實(shí)體識(shí)別(Named Entity Recognition,NER)是信息抽取技術(shù)中基礎(chǔ)環(huán)節(jié),是指識(shí)別文本中具有特定意義的實(shí)體,比如人名、地名、機(jī)構(gòu)名、專有名詞等。其主要目的是識(shí)別文本序列中的人名、地名、組織機(jī)構(gòu)名、事件、時(shí)間等實(shí)體。NER也屬于序列標(biāo)注問題,因?yàn)檫@些實(shí)體都需要用標(biāo)簽進(jìn)行命名。
為實(shí)現(xiàn)一個(gè)商用級(jí)的命名實(shí)體識(shí)別系統(tǒng),數(shù)據(jù)標(biāo)注這一步是至關(guān)重要的。目前有兩種主流的標(biāo)注模式,第一種是BIO標(biāo)注模式,其中 B(begin)是指識(shí)別出來的實(shí)體開頭的字段,I(inside)是指識(shí)別出來的實(shí)體除了開頭的字段,O(outside)是指非實(shí)體的部分。
BIO標(biāo)注模式的缺點(diǎn)是沒考慮到單字實(shí)體以及實(shí)體結(jié)尾字段的標(biāo)注,BIOES標(biāo)注模式就出現(xiàn)了。同樣的,B(begin)是指實(shí)體開頭的字段,I(inside)是實(shí)體中間字符的標(biāo)記,O(outside)是指非實(shí)體部分。E(end)是用來解決BIO標(biāo)注模式的缺點(diǎn),用來表示實(shí)體的結(jié)尾字段,S(single)表示單字實(shí)體。
如上圖右側(cè),在實(shí)際操作中可以將命名實(shí)體識(shí)別理解成對(duì)命名實(shí)體標(biāo)簽進(jìn)行多分類的任務(wù)。模型通過計(jì)算對(duì)向量化之后的標(biāo)簽進(jìn)行分類,來預(yù)測文本與標(biāo)簽之間的對(duì)應(yīng)關(guān)系。
構(gòu)建適用于NeMo的NER數(shù)據(jù)集
想要在NeMo中通過結(jié)合BERT等模型實(shí)現(xiàn)NER任務(wù),首先要構(gòu)建適合NeMo的數(shù)據(jù)集格式,目前NeMo工具庫支持BIO、BIOSE和IOB三種標(biāo)注模式的數(shù)據(jù)集。
對(duì)于一些用IOB方式標(biāo)注的數(shù)據(jù)集,NeMo也提供標(biāo)注數(shù)據(jù)集格式轉(zhuǎn)換的腳本(https://github.com/NVIDIA/NeMo/blob/stable/examples/nlp/token_classification/data/import_from_iob_format.py)。
另外需要注意的是,無論英文還是中文,文本數(shù)據(jù)集原數(shù)據(jù)當(dāng)中,每一個(gè)字符、字段、標(biāo)點(diǎn)符號(hào)之間都需要用空格來進(jìn)行分割。
在NeMo中做命名實(shí)體識(shí)別任務(wù)是基于BERT模型的,在NeMo中去使用BERT模型進(jìn)行微調(diào)、調(diào)用非常方便,如上圖,我們只需要在NeMo給定的模型配置文件中簡單設(shè)置,就可以完成BERT模型的加載以及參數(shù)的微調(diào)。同時(shí),在訓(xùn)練方面可以結(jié)合NVIDIA GPU、混合精度計(jì)算框架等來加速模型訓(xùn)練。
上圖是在NeMo中使用BERT模型進(jìn)行命名實(shí)體識(shí)別的代碼示例,只用了三行代碼就快速地完成了英文的命名實(shí)體識(shí)別任務(wù)。
首先,在NeMo NLP的工具類中導(dǎo)出TokenClassificationModel,然后調(diào)用List_ available_models,查看工具類中有哪些可以用來做命名實(shí)體識(shí)別的模型。
第二步,調(diào)用工具類中的from_pretrained函數(shù),就會(huì)自動(dòng)到NVIDIA NCC云端加載預(yù)訓(xùn)練模型:ner_en_bert,基于英文的BERT,將它命名為model。
最后,調(diào)用 model中的add_predictions函數(shù),將我們想要做命名實(shí)體識(shí)別的英文語句傳進(jìn)來,點(diǎn)擊執(zhí)行,就能夠快速拿到對(duì)應(yīng)的結(jié)果。
可以看出,在NeMo中完成英文的命名實(shí)體識(shí)別任務(wù)是非常方便,開箱即用。但是目前NVIDIA官方并沒有現(xiàn)成的中文命名實(shí)體識(shí)別的模型。
因此,本次課程我們要解決這3個(gè)問題:如何訓(xùn)練中文的NER模型,如何基于BERT模型進(jìn)行微調(diào),如何提高模型的識(shí)別能力。
接下來,我們就帶著這三個(gè)問題,一起進(jìn)入代碼實(shí)戰(zhàn)的環(huán)節(jié)。
代碼實(shí)戰(zhàn):使用NeMo快速完成NER任務(wù)
接下來,奕澎老師通過代碼演示,分享了如何在NeMo中快速構(gòu)建命名實(shí)體識(shí)別任務(wù),大家可觀看視頻回放繼續(xù)學(xué)習(xí)。
- 代碼&課程PPT下載鏈接(提取碼29jy):https://pan.baidu.com/s/1AVMcWwdbZp7MBWxDwTCd5w
- 直播回放(代碼演示部分從第34分鐘開始):
下期直播預(yù)告
7月28日晚8點(diǎn)第3期課程中,奕澎老師將直播分享使用NeMo讓你的文字會(huì)說話—深度學(xué)習(xí)在語音合成任務(wù)中的應(yīng)用,課程大綱如下:
? 語音合成技術(shù)簡介
? 語音合成技術(shù)的工作流程和原理
? 語音合成技術(shù)中的深度學(xué)習(xí)模型
? 代碼實(shí)戰(zhàn):使用 NeMo快速完成自然語音生成任務(wù)
直播報(bào)名:
報(bào)名鏈接:210728-598816
ps.請(qǐng)準(zhǔn)確填寫您的郵箱、便于接收直播提醒&課程資料哦~
報(bào)名后請(qǐng)?zhí)砑有≈?、加入微?strong>交流群,及時(shí)接收直播通知、課程PPT&代碼,還可參與課后問卷,抽取《CUDA編程基礎(chǔ)與實(shí)踐》暢銷書哦~
- 天云數(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