徐關(guān)友,馮偉森
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
在中國互聯(lián)網(wǎng)技術(shù)的快速發(fā)展和世界范圍內(nèi)線上教育快速普及的大背景下,互聯(lián)網(wǎng)技術(shù)被廣泛地應(yīng)用于教育領(lǐng)域,網(wǎng)絡(luò)上有許多在線題庫能幫助學(xué)生學(xué)習(xí)各種專業(yè)的知識(shí),但是這些在線題庫很難針對(duì)每個(gè)學(xué)生不同的學(xué)習(xí)進(jìn)展而進(jìn)行個(gè)性化的試題定制。題庫中的練習(xí)題一般是以章節(jié)或者是知識(shí)點(diǎn)來進(jìn)行劃分,章節(jié)或者是知識(shí)點(diǎn)之間會(huì)有一部分重疊、遞進(jìn)的情況出現(xiàn),這些情況會(huì)影響學(xué)生練習(xí)試題的效果。因此學(xué)生在學(xué)習(xí)python 知識(shí)時(shí),對(duì)python 知識(shí)進(jìn)行更加精確的命名實(shí)體識(shí)別(Named Entity Recognition,NER)是十分重要的前期工作。
python 命名實(shí)體相較于微博等廣泛使用口語的命名實(shí)體在句子方面會(huì)更加正式。和醫(yī)學(xué)、社交等熱門的領(lǐng)域相比,python 領(lǐng)域的NER 研究和嘗試都相對(duì)較少,現(xiàn)有的技術(shù)可以解決部分問題,但仍會(huì)面臨數(shù)據(jù)少、可借鑒和參考少的問題,因此取得的效果一般。
NER 是自然語言處理(Natural Language Processing,NLP)眾多子任務(wù)中一項(xiàng)非常上游的基本任務(wù),NER 同時(shí)也是諸如問答系統(tǒng)[1]、信息檢索[2]、關(guān)系提?。?]等非常多下游任務(wù)的前提和重要基礎(chǔ),在近幾年受到了非常多研究人員的重點(diǎn)關(guān)注。NER 的主要目標(biāo)是從給定文本中找到諸如人物名和地名等命名實(shí)體(Named Entity,NE)。在深度學(xué)習(xí)(Deep Learning,DL)技術(shù)未廣泛使用以前,Saito 等[4]提出使用隱馬爾可夫模型(Hidden Markov Model,HMM)來識(shí)別NE,而Feng 等[5]則是利用條件隨機(jī)場(Conditional Random Fields,CRF)解決該問題,Ekbal 等[6]在2010 年提出使用支持向量機(jī)(Support Vector Machines,SVM)識(shí)別文本中的NE。近幾年深度學(xué)習(xí)技術(shù)和注意力機(jī)制得到發(fā)展后則使用神經(jīng)網(wǎng)絡(luò)技術(shù)[7]來解決NER 問題,使得NER 有很大的進(jìn)步。
相較于英文NER,中文NER 難度更大,因?yàn)橹形牟⒉荒芟裼⑽哪菢幼匀磺蟹郑~邊界非常模糊,所以現(xiàn)有的一些研究是先使用已有的中文分詞系統(tǒng)進(jìn)行分詞,然后將詞級(jí)序列標(biāo)注的模型應(yīng)用于分詞的句子[8]。然而,中文分詞(Chinese Word Segmentation,CWS)不可避免地會(huì)產(chǎn)生錯(cuò)誤分割的情況,會(huì)使詞邊界和實(shí)體類別的預(yù)測出現(xiàn)錯(cuò)誤。所以有些方法直接使用字符進(jìn)行NER,文獻(xiàn)[9-10]中的研究表明字符級(jí)的NER 模型也能夠有效地識(shí)別NE。
雖然基于字符的中文NER 模型能避免分詞錯(cuò)誤,但是基于字符的模型有一個(gè)缺點(diǎn)就是沒有充分利用數(shù)據(jù)中的單詞信息,而這些單詞信息對(duì)于識(shí)別NE 非常關(guān)鍵。出于將詞信息加入到模型中的目的,Lattice-LSTM 模型[11]使用類似格子的結(jié)構(gòu)來編碼輸入到模型中的字符以及與詞典所匹配的詞信息。該模型是一個(gè)使用長短期記憶(Long Short-Term Memory,LSTM)和條件隨機(jī)場(Conditional Random Field,CRF)的字符級(jí)模型的拓展模型,它在兩個(gè)字符之間設(shè)置一個(gè)用于存儲(chǔ)開始和結(jié)束字符之間對(duì)應(yīng)單詞的“快捷路徑”,通過“快捷路徑”連接開始字符、存儲(chǔ)單元和結(jié)束字符,并且使用門控循環(huán)單元(Gated Recurrent Unit,GRU)來控制快捷路徑和相鄰字符直接路徑的貢獻(xiàn)。門控循環(huán)單元在如圖1 所示的情況時(shí),模型沒有辦法選擇正確的路徑,此時(shí)該模型會(huì)退化為基于詞的模型,受到分詞錯(cuò)誤帶來的負(fù)面影響。圖1(a)表示Lattice-LSTM 原模型,而圖1(b)則表示因?yàn)殄e(cuò)誤預(yù)測“河水(River Water)”為實(shí)體從而造成快捷路徑錯(cuò)誤的情況,圖中標(biāo)有雙下劃線的標(biāo)簽表示正確預(yù)測的標(biāo)簽,而沒有下劃線的標(biāo)簽表示模型預(yù)測的錯(cuò)誤標(biāo)簽,字符間的虛線路徑則表示未正確預(yù)測的路徑。由于句子中的每一個(gè)單詞的長度是不同的,整個(gè)路徑的長度不是固定的;每個(gè)字符都對(duì)應(yīng)有一個(gè)可變大小的候選詞集,這意味著模型的輸入和輸出路徑的數(shù)量也不是固定的,上述兩個(gè)問題會(huì)使得Lattice-LSTM模型失去批量訓(xùn)練的能力,從而導(dǎo)致模型訓(xùn)練的速度降低。
圖1 一個(gè)Lattice-LSTM退化的例子Fig.1 An example of Lattice-LSTM degradation
新提出的字符-詞 transformer(Character-Word TransFormer,CW-TF)模型可以很好地解決Lattice-LSTM 模型的上述問題。為了防止模型退化為基于詞的模型而受到分詞錯(cuò)誤帶來的影響,本文模型將詞信息分配給單個(gè)的字符,摒除了錯(cuò)誤路徑的影響。在transformer 編碼前創(chuàng)建字符和詞信息,在編碼時(shí)將詞信息分別分配給其對(duì)應(yīng)的開始和結(jié)束字符,通過transformer 處理后使用CRF 解碼預(yù)測標(biāo)簽序列。本文模型還引入了3 種策略來處理字符對(duì)應(yīng)的詞信息長度不固定的問題,讓模型能夠保留詞信息的同時(shí)提高模型批量訓(xùn)練的速度。
針對(duì)python 的NER,CW-TF 模型在python 數(shù)據(jù)集上展示了其有效性,而且驗(yàn)證了模型并不會(huì)因?yàn)閜ython 數(shù)據(jù)集而產(chǎn)生高性能的特殊情況,同時(shí)還在另一個(gè)數(shù)據(jù)集上訓(xùn)練,確保模型的普適性。實(shí)驗(yàn)的結(jié)果表明本文所提模型確實(shí)能較好地識(shí)別python 中的NE。
本文的主要工作有:1)提出了CW-TF 模型將詞信息融合到基于字符的模型中;2)探索了3 種不同的策略將詞信息編碼為固定大小的向量以解決無法批量化訓(xùn)練的問題;3)針對(duì)python 已有數(shù)據(jù)集缺乏的問題整理了一個(gè)python 的NER數(shù)據(jù)集;4)驗(yàn)證了所提模型能很好地識(shí)別python 中的NE。
近年來LSTM 等神經(jīng)網(wǎng)絡(luò)技術(shù)的進(jìn)步促進(jìn)了NER 的快速發(fā)展,本章將說明神經(jīng)網(wǎng)絡(luò)技術(shù)在NER 中的應(yīng)用以及提出模型使用到的transformer 的結(jié)構(gòu)。
近些年來神經(jīng)網(wǎng)絡(luò)技術(shù)在NER 中已經(jīng)取得了較好的成績[12-14]。從輸入序列到預(yù)測標(biāo)簽序列,基于DL(Deep Learning)或者是注意力機(jī)制的NER 模型一般是由輸入、上下文編碼器和標(biāo)簽解碼器3 個(gè)部分構(gòu)建而成[15]。
Xu 等[16]利用詞根、字符、詞等不同粒度級(jí)別的信息作為輸入解決了中文微博數(shù)據(jù)集中的NER 明顯的性能下降問題;Sun 等[17]提出了ERNIE2.0 模型,首先從訓(xùn)練的語料庫中提取詞匯信息、句法信息和語義信息,然后逐步構(gòu)建預(yù)訓(xùn)練任務(wù),最后通過在這些構(gòu)建的任務(wù)上持續(xù)多任務(wù)學(xué)習(xí)的方式利用了訓(xùn)練語料庫中其他有價(jià)值的信息。
Liu 等[18]在將信息輸入模型時(shí)將詞信息與字符信息相融合,避免了分詞錯(cuò)誤帶來的影響,但是其批量化的訓(xùn)練速度仍然受限于上下文編碼的方式;所以現(xiàn)有的某些研究[19-20]使用圖像處理的方法來處理NER,將中文字符轉(zhuǎn)化為圖片的格式進(jìn)行訓(xùn)練,使用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)編碼圖片吸收漢字作為象形文字的象形信息;Yan 等[21]使用了transformer 結(jié)構(gòu)作為上下文編碼器編碼輸入信息,對(duì)字符級(jí)和詞級(jí)特征進(jìn)行建模,通過整合方向感知、距離感知等信息證明了transformer 類的編碼器對(duì)于NER和其他NLP 任務(wù)一樣有效;Zhu 等[22]針對(duì)詞級(jí)嵌入和詞匯特征的模型經(jīng)常出現(xiàn)的分詞錯(cuò)誤以及預(yù)訓(xùn)練在字典外(Out-Of-Vocabulary,OOV)的問題,提出使用一個(gè)基于字符并且?guī)в芯植孔⒁饬拥腃NN 和從相鄰的字符以及句子語境中獲取信息的全局自注意層的GRU 組成的卷積注意網(wǎng)絡(luò)(Convolutional Attention Network,CAN)作為上下文編碼器解決這個(gè)問題;Ding 等[23]利用自適應(yīng)的門控圖序列神經(jīng)網(wǎng)絡(luò)(Gated Graph Sequence Neural Network,GGNN)和一個(gè)標(biāo)準(zhǔn)的雙向長短期記憶(Bi-directional Long Short-Term Memory,Bi-LSTM)網(wǎng)絡(luò)作為上下文編碼器,學(xué)習(xí)來自不同詞典的加權(quán)信息組合,并且模型基于上下文信息解決了字符和詞匯匹配的沖突;Sui 等[24]和Wu 等[25]也使用Bi-LSTM 作為上下文編碼器解決了中文詞邊界模糊的問題;Xue 等[26]提出一個(gè)transformer 的拓展模型多孔格子transformer 編碼器(Porous Lattice Transformer Encoder,PLTE),它通過批處理并行建模所有的字符和匹配的詞匯,并用位置關(guān)系表示來增加自注意以包含格結(jié)構(gòu),它還引入了一種多孔機(jī)制來增強(qiáng)本地建模,并保持捕獲豐富的長距離依賴關(guān)系的強(qiáng)度。Zhao 等[27]提出了多任務(wù)數(shù)據(jù)選擇和使用知識(shí)庫的約束解碼兩種方式改進(jìn)Bi-LSTM-CRF 模型架構(gòu)。
Vaswani等[28]改進(jìn)了seq2seq任務(wù)模型,提出了transformer的概念。transformer 的結(jié)構(gòu)如圖2所示,包含編碼和解碼兩個(gè)部分,為了專注于NER 任務(wù),本部分只關(guān)注于transformer的編碼部分。transformer 的編碼部分是由多頭注意力(Multi-head Attention)和前饋網(wǎng)絡(luò)(FeedForward Network,F(xiàn)FN)這兩個(gè)非常重要的部分組成,F(xiàn)FN 是一種具有非線性轉(zhuǎn)換位置方式的多層感知器。在這之后是殘差連接和層標(biāo)準(zhǔn)化這兩個(gè)操作。
圖2 transformer結(jié)構(gòu)Fig.2 Structure of transformer
1.2.1 位置嵌入
自注意力不知道不同標(biāo)記的位置,所以無法捕獲語言的順序特征,而Vaswani 等[28]則采用由頻率變化的正弦波產(chǎn)生的位置嵌入。第t個(gè)詞元的位置嵌入可以用下面的公式計(jì)算:
其中:i∈[0,],d表示輸入的維度。這種基于正弦曲線的位置嵌入使transformer 能夠?qū)υ~元的位置和每兩個(gè)詞元的距離進(jìn)行建模。對(duì)于任何固定的偏移量k,PEt+k以通過PEt的一個(gè)線性transformer 表示。
1.2.2 縮放點(diǎn)擊注意力
transformer 編碼器接收到一個(gè)已經(jīng)轉(zhuǎn)化為嵌入向量的矩陣H∈Rl×d,其中的l和d分別表示序列的長度和輸入的維度。使用三個(gè)可學(xué)習(xí)的矩陣Wq,Wk,Wv∈可以將矩陣H投影到不同的空間中,dk為一個(gè)超參數(shù)??s放點(diǎn)積注意力可以通過以下公式計(jì)算:
其中:At,j、Q、K、V、A皆為矩陣;Qt表示第t個(gè)詞元的查詢向量;j表示第j詞元;Kj表示第j個(gè)詞元的值向量表達(dá);歸一化指數(shù)函數(shù)softmax 將應(yīng)用于最后一個(gè)維度。
1.2.3 多頭自注意力
可以使用多組Wq、Wk、Wv提升自注意力的能力,在使用多組Wq、Wk、Wv時(shí)被稱為多頭自注意力,其計(jì)算方式為:
式(6)和(7)中的h表示頭的索引,式(8)中的n表示頭的數(shù)量,[head(1),head(2),…,head(n)]則表示在最后一個(gè)維度的連接操作。在一般的情況下有d=n×dk,這可以說明多頭注意力MultiHead(H) ∈Rl×d。在式(8)中的WO∈Rd×d是一個(gè)可學(xué)習(xí)參數(shù)。
1.2.4 前饋網(wǎng)絡(luò)
多頭注意力的輸出會(huì)經(jīng)過FFN 進(jìn)一步處理,處理過程可以表示為:
其中:W1,W2∈為可學(xué)習(xí)參數(shù)矩陣,dff是一個(gè)超參數(shù);b1∈為可學(xué)習(xí)向量,b2∈Rd同樣為可學(xué)習(xí)向量。
所提模型結(jié)構(gòu)如圖3 所示,和有的模型一樣使用transformer 作為上下文編碼器編碼輸入的數(shù)據(jù),但是本文模型和標(biāo)準(zhǔn)的transformer 模型在嵌入層有所不同。如圖3 所示,實(shí)線部分可以看作是一個(gè)使用transformer 作為上下文編碼器的基于字符的模型,虛線部分則表示將單詞信息編碼成固定大小的表示,單詞信息被整合到單詞的結(jié)尾字符中,“PAD”表示填充值,“Stgy”表示3 種編碼策略的一種,“⊕”表示連接操作。在嵌入層中,中文句子是將詞信息綁定到每個(gè)字符上形成字符-詞對(duì);其次,為了使模型能夠批量訓(xùn)練并滿足不同的應(yīng)用需求,引入了3 種編碼策略來從詞集中提取固定大小但不同的信息;最后,CW-TF 模型能提取字符和單詞的特征,以更好地預(yù)測NE。
圖3 所提模型結(jié)構(gòu)Fig.3 Structure of the proposed model
使用S={c1,c2,…,cn}來表示輸入的一句中文句子,ci表示句子中的第i個(gè)字符;使用cb,e表示句子S中的一個(gè)以第b個(gè)字符開始到第e個(gè)字符結(jié)束的字符子序列,如圖3 中所示的字符子序列“清澈”,可以將其表示為字符子序列c1,2。使用ciw表示第i個(gè)字符對(duì)應(yīng)的單詞集,它由一組來自詞典D的字符子序列cb,i所構(gòu)成,而下標(biāo)b<i,詞典D的構(gòu)建和Lattice-LSTM 模型中自動(dòng)分割原始文本構(gòu)建的詞典相同,每個(gè)字符對(duì)應(yīng)的單詞集可以表示為ciw={wi1,wi2,…,},wi1表示字符ci對(duì)應(yīng)的字符子序列構(gòu)成詞集的第一個(gè)詞,表示詞集中詞的數(shù)量。字符對(duì)應(yīng)的詞集在經(jīng)過詞編碼策略選擇以后,把字符和對(duì)應(yīng)詞信息連接在一起,最終輸入的句子按字符-詞對(duì)這種形 式可以表示為CW={(c1,c1w),(c2,c2w),…,(cn,cnw)}。
詞集ciw中詞的原始數(shù)量為,盡管模型在同一個(gè)批次中為每個(gè)字符ci分配的單詞集ciw中詞的數(shù)量通過填充都為,但是每個(gè)批次為字符ci選擇的詞的長度會(huì)因?yàn)榕尾煌赡懿煌虼四P偷妮斎氪笮〔⒉皇窍嗤模@種情況將會(huì)不利于批量訓(xùn)練。為了獲取固定大小的輸入,本節(jié)將會(huì)介紹3 種不同的編碼策略,并且在后面的部分統(tǒng)一使用wi,fin作為字符ci對(duì)應(yīng)詞信息的最終表示,然后其他對(duì)應(yīng)詞的長度則通過填充或者是截取的方式變成相同的長度。在通過詞編碼后字符ci對(duì)應(yīng)的詞集中只有一個(gè)詞,其詞集可以表示為ciw=wi,fin。
2.1.1 最短策略
對(duì)于字符ci對(duì)應(yīng)的詞集ciw={wi1,wi2,…},最短策略為選擇詞集中長度最短的詞,假如是第一個(gè)詞的長度為最短,則有:
2.1.2 最長策略
對(duì)于字符ci對(duì)應(yīng)的詞集ciw={wi1,wi2,…,},最長策略就是選擇詞集中長度最長的詞,如果最后一個(gè)詞的長度最長,則有:
2.1.3 平均策略
如果選擇長度最短的詞語,一般情況下就是字符本身,必定只能利用部分的信息,而選擇長度最長的詞會(huì)對(duì)增加計(jì)算的時(shí)間,所以引入一種平均策略。將平均策略用于選詞的時(shí)候,對(duì)于字符ci對(duì)應(yīng)的詞集ciw={wi1,wi2,…,},選擇對(duì)應(yīng)的詞有:
在CW中的i個(gè)元素都包含兩個(gè)部分:對(duì)應(yīng)句子中的第i個(gè)字符和分配給這個(gè)字符的詞ciw。在字符ci的詞集沒有經(jīng)過編碼策略選擇以前,每個(gè)詞集ciw中的詞的數(shù)量為,通過填充確保每個(gè)詞集ciw有相同數(shù)量的候選詞數(shù)量,經(jīng)過詞編碼策略以后字符ci對(duì)應(yīng)的詞為wi,fin。通過預(yù)訓(xùn)練的字符嵌入查找表ec將每個(gè)字符ci嵌入到分布空間中獲得向量有:
同樣字符ci對(duì)應(yīng)的詞ciw=wi,fin,通過預(yù)訓(xùn)練的詞嵌入查找表ew將每個(gè)詞wi,fin表示為向量:
選擇對(duì)應(yīng)的詞編碼策略將詞集編碼并且使字符和對(duì)應(yīng)的詞轉(zhuǎn)化為嵌入向量,然后將字符嵌入與對(duì)應(yīng)的詞嵌入連接。將字符嵌入與對(duì)應(yīng)的詞嵌入連接計(jì)算獲取向量Xi如下:
式(15)中的“⊕”符號(hào)表示連接操作,在經(jīng)過連接以后CW={X1,X2,…,Xn}。通過將字符與對(duì)應(yīng)詞信息連接,本模型沒有Lattice 模型中的快捷路徑,信息只能在相鄰的字符間流動(dòng),確保模型不會(huì)退化。將連接的信息輸入到上下文編碼器中,在CW-TF 中的隱藏狀態(tài)向量hi計(jì)算有:
則CW-TF 的輸出可 以表示為H={h1,h2,…,hn}的向量集合。
模型使用標(biāo)準(zhǔn)的CRF 作為模型的最后一層,將上下文編碼器的結(jié)果H輸入到CRF 中。對(duì)于一個(gè)由向量li組成可能的標(biāo)記序列y={l1,l2,…,ln},它的概率計(jì)算如下:
在得到所有可能的標(biāo)簽序列后,對(duì)其使用一階維特比算法找到可能性最大的標(biāo)簽序列。
使用3 個(gè)數(shù)據(jù)集評(píng)估提出的CW-TF 模型,并且使用精確率(Precision,P)、召回率(Recall,R)和F1 值(F1)作為評(píng)價(jià)的指標(biāo)。
3.1.1 數(shù)據(jù)集
使用多個(gè)數(shù)據(jù)集(python 數(shù)據(jù)集、resume 數(shù)據(jù)集和weibo數(shù)據(jù)集)評(píng)估提出的CW-TF 模型。resume 數(shù)據(jù)集、weibo 數(shù)據(jù)集是Lattice-LSTM 模型中使用的數(shù)據(jù)集,python 命名實(shí)體數(shù)據(jù)集是針對(duì)python 知識(shí)領(lǐng)域的數(shù)據(jù)集。
針對(duì)學(xué)生在學(xué)習(xí)python 知識(shí)時(shí)的個(gè)性化定制問題,python 命名實(shí)體識(shí)別的工作必不可少。中文命名實(shí)體識(shí)別的工作主要集中在新聞?lì)I(lǐng)域以及社交領(lǐng)域,針對(duì)教學(xué)領(lǐng)域的數(shù)據(jù)集很少,所以制作了一個(gè)有關(guān)python 命名實(shí)體的數(shù)據(jù)集。制作python 數(shù)據(jù)集時(shí)需要知道:在教育領(lǐng)域中,可以將NE 看作是教學(xué)過程中傳遞信息的載體。具體來說,在教學(xué)材料中NE 的表現(xiàn)形式可以是一個(gè)符號(hào)、一個(gè)事實(shí)、一個(gè)概念、一個(gè)原理或一個(gè)技能。通過這些事實(shí)、概念實(shí)現(xiàn)信息從一端到另外一端的傳遞。
教育領(lǐng)域中的NE 可以分為概念性、事實(shí)型、原理型、技能型以及符號(hào)型幾類。在教育材料中:符號(hào)型NE 通常以單詞形式出現(xiàn)。概念型NE、原理型NE、事實(shí)型NE、技能型NE通常以一句或多個(gè)句子的形式出現(xiàn)。其例子如圖4 所示。
圖4 數(shù)據(jù)集標(biāo)注例子圖Fig.4 Dataset labeling examples
標(biāo)注的python 數(shù)據(jù)集是使用文獻(xiàn)[29]作為標(biāo)注數(shù)據(jù)集的原始文本材料,對(duì)書中的第一章至最后一章的所有內(nèi)容進(jìn)行標(biāo)注。在進(jìn)行數(shù)據(jù)標(biāo)注以前使用正則表達(dá)式將語料中的數(shù)字統(tǒng)一替換為0,然后對(duì)清理過后的數(shù)據(jù)使用開源的標(biāo)注工具YEDDA[30]進(jìn)行NE 標(biāo)注,并使用BIO 標(biāo)記主題。對(duì)于數(shù)據(jù)集中的每個(gè)字符,可能的標(biāo)注結(jié)果包括“B-NAME”“INAME”和“O”三種情況。python 數(shù)據(jù)集、resume 數(shù)據(jù)集和weibo 數(shù)據(jù)集的句子數(shù)量和字符數(shù)量如表1 所示,而表中的“K”表示1 000。
表1 數(shù)據(jù)集的統(tǒng)計(jì)信息Tab.1 Statistics of datasets
3.1.2 評(píng)估指標(biāo)
使用精確率(P)、召回率(R)和F1 值(F1)來評(píng)價(jià)模型在3 個(gè)數(shù)據(jù)集上的NE 識(shí)別效果。P指的是所有正確預(yù)測結(jié)果占所有實(shí)際被預(yù)測到的結(jié)果的比例;R指的是正確被預(yù)測的結(jié)果占所有應(yīng)該被預(yù)測到的結(jié)果的比例;P傾向于查準(zhǔn),而R更傾向于查全,在預(yù)測的時(shí)候希望兩者都高,但事實(shí)上這兩個(gè)指標(biāo)在有些情況下是矛盾的,所以引入了精確率和召回率的調(diào)和平均F1。P、R、F1 三者的計(jì)算方法如下:
其中:Tp表示模型能夠正確識(shí)別到的實(shí)體數(shù)目,F(xiàn)p表示模型識(shí)別到與所需NE 不相關(guān)的實(shí)體個(gè)數(shù),F(xiàn)N表示模型無法識(shí)別的相關(guān)實(shí)體個(gè)數(shù)。
本節(jié)將會(huì)通過兩個(gè)部分詳細(xì)地介紹實(shí)驗(yàn)所依托的軟硬件環(huán)境以及在實(shí)驗(yàn)過程中所設(shè)置的各種參數(shù)。
3.2.1 模型參數(shù)設(shè)置
模型的超參數(shù)和訓(xùn)練參數(shù)搜索范圍如表2 所示,模型的特征維度在前兩個(gè)數(shù)據(jù)集上都在160 時(shí)取得最好的效果,而在weibo 這個(gè)數(shù)據(jù)集上取得最好效果是在320;同樣前兩個(gè)數(shù)據(jù)集在模型層數(shù)設(shè)置為2 時(shí)取得較好的效果,而weibo 則是在4 時(shí)效果較好;將python 數(shù)據(jù)集和resume 數(shù)據(jù)集的多頭注意力頭數(shù)和維度分別設(shè)置為10 和64,而將weibo 數(shù)據(jù)集的多頭注意力頭數(shù)和維度分別設(shè)置為16 和128。輸入句子的最大長度在resume 數(shù)據(jù)集上設(shè)置為178,而在python 數(shù)據(jù)集上設(shè)置為199,在weibo 數(shù)據(jù)集上設(shè)置為175。字符嵌入和詞嵌入設(shè)置為0.15,而將模型中transformer 的dropout 率為0.4。并且模型將隨機(jī)梯度下降(Stochastic Gradient Descent,SGD)這種優(yōu)化算法應(yīng)用于優(yōu)化器,同時(shí)在python 數(shù)據(jù)集和resume 數(shù)據(jù)集上都將學(xué)習(xí)率設(shè)置為0.000 7。將梯度裁剪值設(shè)置為5,模型訓(xùn)練10 個(gè)輪次,100 個(gè)批次。
表2 模型參數(shù)Tab.2 Model parameters
3.2.2 實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)的硬件和軟件環(huán)境如表3 所示。
表3 實(shí)驗(yàn)環(huán)境Tab.3 Experimental environment
與本文所提模型比較的基準(zhǔn)模型同樣是使用了詞信息的模型,即在2018 年提出的Lattice-LSTM 模型、在2019 年提出的WC-LSTM 模型、在2019 年提出的LR-CNN 模型以及在2020 年提出的BERT+CRF 和BERT+LSTM+CRF 方法作為比較的基準(zhǔn)。表4 為各模型在python 數(shù)據(jù)集、resume 數(shù)據(jù)集和weibo 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果。
表4 在python,resume,weibo數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果 單位:%Tab.4 Experimental results on python,resume,weibo datasets unit:%
從表4 中可以看出將字符與對(duì)應(yīng)詞連接時(shí),NER 性能將得到提升。在python 數(shù)據(jù)集,針對(duì)Lattice-LSTM 模型,將字符直接與其對(duì)應(yīng)的詞信息連接消除了原有模型中的快捷路徑,進(jìn)一步消除了模型退化為基于詞模型的可能性,所以在P、R以及F1 上分別提升1.5、3.81、2.64 個(gè)百分點(diǎn)。與WC-LSTM模型相比,在R 值和F1 值上分別提升1.73 和0.58 個(gè)百分點(diǎn),由于訓(xùn)練模型時(shí)的參數(shù)問題,導(dǎo)致得到的模型相較于理想情況,更傾向于查全而不是查準(zhǔn),所以所得結(jié)果的P 值會(huì)低于該模型。相較于LR-CNN 模型,在P 值上提升0.61 個(gè)百分點(diǎn),而在R 值和F1 值上的性能提升并不明顯。本模型和使用了BERT+CRF 的模型相比在F1 值上提升3.65 個(gè)百分點(diǎn),在P 值和F1 值上相較于BERT+LSTM+CRF 模型分別低2.15 和0.59 個(gè)百分點(diǎn),說明使用BERT 初始化詞嵌入優(yōu)于隨機(jī)初始化詞嵌入,并且在使用BERT 的情況下再加入LSTM是有必要的。本模型通過使用BERT 語言預(yù)訓(xùn)練模型可以有進(jìn)一步的提升,說明預(yù)訓(xùn)練的語言模型在python 領(lǐng)域是有效果的。從表4 還可以看出三種詞編碼策略中平均策略在各項(xiàng)均優(yōu)于最短策略。
為驗(yàn)證本文模型的性能提升并非特定于python 數(shù)據(jù)集,使用resume 數(shù)據(jù)集和weibo 數(shù)據(jù)集驗(yàn)證模型的拓展性。從表4 中在resume 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果可以看出與Lattice-LSTM模型相比,在F1 值提升0.83 個(gè)百分點(diǎn);而和使用BERT 的模型相比,由于resume 數(shù)據(jù)集中的數(shù)據(jù)對(duì)于方向性有一定的依賴,所以使用BERT 的模型會(huì)優(yōu)于使用單向transformer 的CW-TF 模型。雖然模型在resume 數(shù)據(jù)集上的提升不大,但是訓(xùn)練速度明顯提高。
表4 最后的部分為CW-TF 模型使用預(yù)訓(xùn)練后在weibo 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果??梢钥闯鲈贔1 值上本模型略高于Lattice-LSTM 模型,而對(duì)于weibo 這種口語化強(qiáng)、語句短的領(lǐng)域表現(xiàn)出的效果低于其他基準(zhǔn)模型,但仍然可以說明CW-TF模型具有一定的泛化性。
通過3 種詞編碼策略提高了模型的批量訓(xùn)練能力,表5第2 列顯示了部分模型在python 數(shù)據(jù)集總訓(xùn)練時(shí)間上的對(duì)比,而第3 列表示在resume 數(shù)據(jù)模型上的比較,使用“×”表示倍數(shù)關(guān)系。使用Lattice-LSTM 模型的總訓(xùn)練時(shí)間作為比較的基準(zhǔn),Lattice-LSTM 模型相較于所提出的模型而言,在python 數(shù)據(jù)集上的總訓(xùn)練時(shí)間為CW-TF 模型的4.14 倍,在resume 數(shù)據(jù)集上的總訓(xùn)練時(shí)間為CW-TF 模型的3.25 倍。而所提模型與其他模型相比在總的訓(xùn)練時(shí)間上都有顯著減少。
表5 訓(xùn)練速度Tab.5 Training speed
本文還研究了多頭注意力的特征維度對(duì)CW-TF 模型的影響。實(shí)驗(yàn)在保持transformer 上下文編碼器總規(guī)模不變的情況下,通過python 數(shù)據(jù)集研究了多頭注意力的特征維度對(duì)CW-TF 模型的影響,特征維度的取值范圍為[32,64,96,256]。將其他參數(shù)設(shè)置為固定值,所得實(shí)驗(yàn)結(jié)果如表6 所示。從表6 可以看出:前期當(dāng)多頭注意力的特征維度數(shù)增加時(shí),實(shí)驗(yàn)的效果逐漸變好;在多頭注意力的特征維度取64時(shí),模型取得最佳的效果;而當(dāng)多頭注意力的特征維度增加到一定程度后,實(shí)驗(yàn)效果達(dá)到最優(yōu)值并逐漸變差。
表6 在python數(shù)據(jù)集上不同transformer多頭注意力的特征維度結(jié)果對(duì)比 單位:%Tab.6 Result comparison of different transformer multi-head attention feature dimension on python dataset unit:%
選擇不同的詞編碼策略會(huì)對(duì)實(shí)驗(yàn)的效果有影響,圖5 為3 種詞編碼策略的實(shí)驗(yàn)效果對(duì)比。從圖5 中可以看出在python 數(shù)據(jù)集上選擇最長的詞可以讓F1 值達(dá)到最高。由于最長的詞編碼策略可以利用更多的詞信息,所以最長的詞編碼策略在效果上均優(yōu)于最短的詞編碼策略。
圖5 在python數(shù)據(jù)集詞編碼策略性能比較Fig.5 Word coding strategy performance comparison on python dataset
本文對(duì)python 領(lǐng)域的NER 進(jìn)行了研究,提出了一種基于transformer 的python 領(lǐng)域NER 模型。該模型將字符和字符對(duì)應(yīng)的詞信息進(jìn)行連接,獲取連接后的向量化表示,然后輸入到transformer 中編碼,最后通過CRF 獲取預(yù)測的標(biāo)簽序列。實(shí)驗(yàn)的結(jié)果表明,所提模型相較于其他幾個(gè)模型在識(shí)別效果和速度上都有提升。所提模型為python 領(lǐng)域NER 的下游任務(wù)打下堅(jiān)實(shí)的基礎(chǔ),為個(gè)性化學(xué)習(xí)python 知識(shí)進(jìn)一步提供了技術(shù)上的可行性。與基于機(jī)器學(xué)習(xí)方法相比,本文模型可以很容易地遷移到其他領(lǐng)域。為了解決教育領(lǐng)域命名實(shí)體識(shí)別標(biāo)記數(shù)據(jù)集少的問題,整理了一個(gè)python 的數(shù)據(jù)集。后續(xù)將進(jìn)一步驗(yàn)證模型的可遷移性,將該模型應(yīng)用于其他領(lǐng)域,還會(huì)擴(kuò)大數(shù)據(jù)集的規(guī)模,以達(dá)到更好的識(shí)別效果。