深度學(xué)習(xí)實(shí)戰(zhàn)篇-基于RNN的中文分詞探索
近年來,深度學(xué)習(xí)在人工智能的多個(gè)領(lǐng)域取得了顯著成績(jī)。微軟使用的152層深度神經(jīng)網(wǎng)絡(luò)在ImageNet的比賽上斬獲多項(xiàng)***,同時(shí)在圖像識(shí)別中超過了人類的識(shí)別水平。百度在中文語音識(shí)別上取得了97%的準(zhǔn)確率,已經(jīng)超過了人類的識(shí)別能力。
隨著深度學(xué)習(xí)在越來越多的領(lǐng)域中取得了突破性進(jìn)展,自然語言處理這一人工智能的重要領(lǐng)域吸引了大批的研究者的注意力。最近谷歌發(fā)布了基于深度學(xué)習(xí)的機(jī)器翻譯(GNMT),和基于短語的機(jī)器翻譯相比,錯(cuò)誤率降低了55%-85%以上,從而又引發(fā)了深度學(xué)習(xí)在自然語言處理上的熱潮。
自然語言處理是人工智能和語言學(xué)的交叉學(xué)科,在搜索引擎,問答系統(tǒng),機(jī)器翻譯等人工智能領(lǐng)域發(fā)揮著重要作用。分詞,詞性標(biāo)注,命名實(shí)體識(shí)別作為自然語言處理的基礎(chǔ)領(lǐng)域,同樣吸引著大批研究者的注意力,本篇就結(jié)合我們近期的一些探索從中文分詞角度探索深度學(xué)習(xí)在自然語言處理中的應(yīng)用。
中文分詞是將自然語言文本劃分成詞語序列,目前主流方法為序列標(biāo)注,即用BMES這個(gè)四個(gè)標(biāo)簽去標(biāo)注句子中的每一個(gè)字(B是詞首,M是詞中,E是詞尾,S是單字詞)。
對(duì)于 { 京東 搜索 與 大數(shù)據(jù) 平臺(tái) 數(shù)據(jù)挖掘 算法部 }
其標(biāo)注為{ BE BE S BME BE BMME BME }
使用Keras實(shí)現(xiàn)了基于RNN的中文分詞,接下來就分別介紹一下Keras和中文分詞實(shí)戰(zhàn)。
1. Keras介紹
Keras 是一個(gè)高度模塊化的深度學(xué)習(xí)框架,使用python編寫,封裝了大量的函數(shù)接口,可支持CPU和GPU訓(xùn)練。Keras提供了一系列模塊,這樣我們?cè)趯?shí)驗(yàn)?zāi)P偷臅r(shí)候只需要調(diào)用這些模塊就可以完成模型搭建,不用自己在去實(shí)現(xiàn)各層網(wǎng)絡(luò)。
主要模塊有Optimizers(優(yōu)化函數(shù)模塊),常用的有SGD(隨機(jī)梯度下降)、 Adam;Objectives(目標(biāo)函數(shù)模塊),常用的有均方誤差,交差熵;Activations(激活函數(shù)模塊),sigmoid用來做二分類、relu可解決梯度消失問題、softmax常用來做多分類;Layers(網(wǎng)絡(luò)層模塊),提供了CNN(卷積層)、RNN(LSTM、GRU)、embeddings;Initializations(初始化模塊),主要用于模型參數(shù)的初始化,常用的有均勻分布初始化,高斯分布初始化。
使用Keras進(jìn)行模型試驗(yàn),可分為四個(gè)步驟(數(shù)據(jù)準(zhǔn)備,模型構(gòu)建, 模型訓(xùn)練, 模型測(cè)試),本文也將基于這四個(gè)步驟探索基于RNN的中文分詞。
2. 中文分詞實(shí)戰(zhàn)
數(shù)據(jù)準(zhǔn)備
訓(xùn)練數(shù)據(jù)使用的是bakeoff2005中的北京大學(xué)的標(biāo)注語料,train作為訓(xùn)練樣本,test作為測(cè)試樣本。
統(tǒng)計(jì)訓(xùn)練樣本中出現(xiàn)的字符并生成字典,同時(shí)將訓(xùn)練樣本中字符全部映射成對(duì)應(yīng)的字典索引(為了處理未登錄詞,將出現(xiàn)次數(shù)低于2次的字符映射為未登錄詞)。在序列標(biāo)注分詞中,一個(gè)字的標(biāo)簽受到上下文的影響,因而取該字的前后3個(gè)字作為特征。
模型構(gòu)建
本文模型由一層Embedding層,2層LSTM,一個(gè)Dense輸出層構(gòu)成,目標(biāo)函數(shù)為交叉熵,優(yōu)化函數(shù)選擇adam。為了驗(yàn)證方法的有效性,本文未采用外部語料預(yù)訓(xùn)練詞向量,而是在訓(xùn)練數(shù)據(jù)上訓(xùn)練詞向量。
Embedding層完成從詞典索引到詞向量的映射過程,即輸入一個(gè)詞典索引,輸出該索引對(duì)應(yīng)的詞向量,***層LSTM層輸入為詞向量序列,輸出為隱層輸出序列,第二層LSTM層輸入為前一層輸出序列,輸出為隱層個(gè)數(shù),Dense輸出層輸入為第二層LSTM輸出,輸出為類別數(shù)。
在這里embeddingDim設(shè)為128,RNN序列長(zhǎng)度設(shè)為7,LSTM隱層個(gè)數(shù)設(shè)為100,outputDims設(shè)為4,batch_size設(shè)為128。
模型訓(xùn)練
分別在CPU和GPU(使用單卡)上進(jìn)行模型訓(xùn)練,使用單卡GPU的速度為CPU的4.7倍,未來還會(huì)測(cè)試單機(jī)多卡和多機(jī)多卡的性能。
CPU
GPU
模型測(cè)試
使用北京大學(xué)test進(jìn)行測(cè)試,并使用bakeoff2005的測(cè)試腳本進(jìn)行測(cè)試,結(jié)果如下所示:
3.總結(jié)和展望
深度學(xué)習(xí)的優(yōu)點(diǎn)是可以自動(dòng)發(fā)現(xiàn)特征,大大減少了特征工程的工作量。目前深度學(xué)習(xí)已經(jīng)在語音和圖像等領(lǐng)域取得重大進(jìn)展,自然語言與語音、圖像不同,是抽象符號(hào),因而如何將深度學(xué)習(xí)應(yīng)用于自然語言處理需要進(jìn)行更多的研究和探索:針對(duì)不同任務(wù)的不同字詞表示、將先驗(yàn)知識(shí)和深度學(xué)習(xí)相結(jié)合、Attention機(jī)制的運(yùn)用。同時(shí)相對(duì)于標(biāo)注數(shù)據(jù),未標(biāo)注數(shù)據(jù)量更多,如何運(yùn)用未標(biāo)注數(shù)據(jù)也是目前自然語言處理探索的熱點(diǎn)和難點(diǎn)。