王玲
(廣東郵電職業(yè)技術(shù)學(xué)院 廣東省廣州市 510630)
文本分類(lèi)是指對(duì)文本集按照一定的分類(lèi)體系或標(biāo)準(zhǔn)進(jìn)行自動(dòng)分類(lèi)標(biāo)記。主要應(yīng)用于信息檢索、垃圾文本過(guò)濾、輿情檢測(cè)、情感分析等領(lǐng)域,一直是自然語(yǔ)言處理領(lǐng)域的研究熱點(diǎn)。它依據(jù)已經(jīng)被分類(lèi)標(biāo)注的文本訓(xùn)練集合,得到文本特征和文本類(lèi)別之間的關(guān)系模型,然后利用這種通過(guò)學(xué)習(xí)得到的模型對(duì)新的文本進(jìn)行類(lèi)別判斷。現(xiàn)階段文本分類(lèi)從基于知識(shí)的方法轉(zhuǎn)變?yōu)榛诮y(tǒng)計(jì)和機(jī)器學(xué)習(xí)的方法。
當(dāng)前文本分類(lèi)主要面對(duì)的是兩方面問(wèn)題:
(1)文本表示問(wèn)題,即怎樣高質(zhì)量的實(shí)現(xiàn)詞語(yǔ)的向量表達(dá);
(2)文本分類(lèi)的訓(xùn)練模型問(wèn)題。
本文對(duì)常用的模型進(jìn)行對(duì)比的基礎(chǔ)上,選擇了基于Word2Vec的詞嵌入模型的實(shí)現(xiàn),以及基于雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(BiLSTM)的文本分類(lèi)神經(jīng)網(wǎng)絡(luò)模型。
文本語(yǔ)料是符號(hào)集合,計(jì)算機(jī)是無(wú)法處理符號(hào)集合的,詞嵌入就是將符號(hào)集合中的詞(或者更高粒度的句子等)映射為向量。這是NLP 工作中必要的部分。文本的語(yǔ)義表示能力決定著文本表示能力的強(qiáng)弱。
(1)離散表示,有One-hot 表達(dá)、Bag of Words 詞袋表達(dá)、Tf-Idf 權(quán)值向量表達(dá)等等,他們各有缺陷,比如One-hot 表達(dá)忽略了詞頻信息,面臨著高維困境,并且忽略了詞語(yǔ)上下文關(guān)聯(lián);Tfidf 表達(dá)用詞頻來(lái)衡量文章中的一個(gè)詞的重要性不夠全面,而且無(wú)法體現(xiàn)詞在上下文的重要性??傮w上,離散表示方法,存在無(wú)法衡量詞向量之間的關(guān)系、詞向量維度膨脹、數(shù)據(jù)稀疏等缺陷。
(2)神經(jīng)網(wǎng)絡(luò)表示,目前最常用的詞嵌入模型之一Word2Vec,是谷歌2013年提出的。Word2Vec 詞向量是深度學(xué)習(xí)在自然語(yǔ)言處理領(lǐng)域的應(yīng)用,它有兩種網(wǎng)絡(luò)結(jié)構(gòu),分別是連續(xù)詞袋模型CBOW(Continues Bag of Words)和跳字模型Skip-gram。
CBOW 模型的訓(xùn)練輸入是某一個(gè)特征詞的上下文相關(guān)的詞對(duì)應(yīng)的詞向量,而輸出就是這個(gè)特定詞的詞向量。Skip-Gram 模型和CBOW 的思路相反,即輸入是特定的一個(gè)詞的詞向量,而輸出的是特定詞對(duì)應(yīng)的上下文詞向量。
可以通過(guò)gensim、tensorflow、spark 等實(shí)現(xiàn)Word2Vec。這里以gensim 為例實(shí)現(xiàn)Word2Vec 詞嵌入訓(xùn)練。
# 詞向量訓(xùn)練
#text 是經(jīng)過(guò)文本預(yù)處理的語(yǔ)料(對(duì)于中文要首先經(jīng)過(guò)分詞,去除停用詞、低頻詞)
#wlen 是詞向量上下文的距離設(shè)定值
#size 是詞向量的維度設(shè)定值
w2v_model=Word2Vec(sentences=text,window=win_len,size=wlen,min_count=1)
# 存儲(chǔ)所有詞語(yǔ)
vocab_list=[word for word,_ in w2v_model.wv.vocab.items()]
# 生成一個(gè)全零數(shù)組用于后續(xù)存儲(chǔ)詞向量,長(zhǎng)度加1,用于表示新詞
data=np.zeros([len(vocab_list)+1,w2v_model.vector_size])
for i in range(len(vocab_list)):
data[i+1]=w2v_model.wv[vocab_list[i]]# 存儲(chǔ)某個(gè)詞的詞向量
# 將數(shù)組轉(zhuǎn)為DataFrame,這里設(shè)置一個(gè)全零行,用于匹配不存在的新詞
data_frame=pd.DataFrame(data,index=['0']+ vocab_list)
# 保存詞向量
data_frame.to_csv('embedding_matrix.csv',index=None)
創(chuàng)建Word2Vec 模型時(shí),主要的參數(shù)有:
sentences:要訓(xùn)練的語(yǔ)料列表;
window:詞向量上下文的距離,默認(rèn)為5;
size:詞向量的維度,默認(rèn)值是100;
min_count:計(jì)算詞向量的詞語(yǔ)的最小詞頻,默認(rèn)是5。如果所有詞語(yǔ)都需要參與訓(xùn)練,就設(shè)置為1;
sg:如果是0,則是CBOW 模型,是1 則是Skip-Gram 模型,默認(rèn)是0;
iter:隨機(jī)梯度下降法中迭代的最大次數(shù),默認(rèn)是5。語(yǔ)料量大的情況下,可以增大這個(gè)值。
可以在計(jì)算量和訓(xùn)練效果之間,權(quán)衡參數(shù)的設(shè)置值。
CNN 可以提取句子特征,但缺乏學(xué)習(xí)順序相關(guān)性的能力。近年來(lái),對(duì)時(shí)間序列敏感的問(wèn)題,RNN 比較適合。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)是一種對(duì)序列型數(shù)據(jù)進(jìn)行建模的深度神經(jīng)網(wǎng)絡(luò)模型。比如某個(gè)單詞的含義會(huì)因?yàn)樯舷挛牡膬?nèi)容不同而不同,RNN 就適合解決這類(lèi)問(wèn)題。
但是,在RNN 中,常用的激活函數(shù)(sigmoid 函數(shù)、tanh 函數(shù)),在求梯度的過(guò)程中,隨著時(shí)間序列的不斷深入,會(huì)導(dǎo)致梯度越來(lái)越小直到接近于 0,這就會(huì)引起梯度消失現(xiàn)象。梯度消失就意味著那一層的參數(shù)再也不更新了,則模型的訓(xùn)練毫無(wú)意義。Relu 函數(shù)一定程度上可以解決梯度消失的問(wèn)題,但是容易引起梯度爆炸的問(wèn)題。
為了避免RNN 模型的缺陷,一種由長(zhǎng)短期記憶單元LSTM 組成的RNN(longshort-term memory,LSTM)的循環(huán)神經(jīng)網(wǎng)絡(luò)架構(gòu)得到廣泛的應(yīng)用。LSTM 增加了對(duì)過(guò)去狀態(tài)的過(guò)濾,從而可以選擇哪些狀態(tài)對(duì)當(dāng)前更有影響,而不是簡(jiǎn)單的選擇最近的狀態(tài)。
LSTM 只能夠捕獲前向的上下文信息,隨著深度學(xué)習(xí)的發(fā)展,可以分別捕獲前向和后向的上、下文信息的雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(bidirectional long short-tem memory,BiLSTM)出現(xiàn)了,BiLSTM 能得到更好的文本表示。近幾年LSTM 和BiLSTM 在文本分類(lèi)領(lǐng)域取得很多的進(jìn)展。
這里基于tensorflow 搭建文本分類(lèi)的RNN 神經(jīng)網(wǎng)絡(luò)模型:
首先,沒(méi)有進(jìn)行詞嵌入預(yù)訓(xùn)練,在Embedding 層,沒(méi)有設(shè)置weights 參數(shù),那么詞嵌入權(quán)值矩陣則是隨機(jī)初值。而當(dāng)用語(yǔ)料中的詞語(yǔ)進(jìn)行單獨(dú)的預(yù)訓(xùn)練之后,將預(yù)訓(xùn)練得到的詞向量用于此詞嵌入層,經(jīng)過(guò)實(shí)際對(duì)比,采用預(yù)訓(xùn)練之后,模型精度顯著提升。
模型可以通過(guò)調(diào)整以下主要參數(shù),進(jìn)行性能和精度的調(diào)整:將詞向量預(yù)訓(xùn)練的window 增大,可以將更長(zhǎng)范圍的上下文詞語(yǔ)考慮進(jìn)來(lái),但是并不是越大越好,要根據(jù)實(shí)際情況進(jìn)行調(diào)整,并且會(huì)增加計(jì)算量;網(wǎng)絡(luò)設(shè)置,全連接層的個(gè)數(shù),每個(gè)層的神經(jīng)元個(gè)數(shù)。在訓(xùn)練時(shí)候,訓(xùn)練集和驗(yàn)證集的占比,增加訓(xùn)練集的占比,使得訓(xùn)練更加充分;將詞向量矩陣設(shè)為在模型訓(xùn)練過(guò)程中是可調(diào)試的形式(通過(guò)trainable 設(shè)置)等。通過(guò)調(diào)整epochs 和batch_size 參數(shù),控制模型訓(xùn)練過(guò)程中的計(jì)算負(fù)荷。
文本分類(lèi)是自然語(yǔ)言處理領(lǐng)域的研究熱點(diǎn)。當(dāng)前重點(diǎn)側(cè)重在兩個(gè)方面,一是詞向量模型的研究,二是文本分類(lèi)深度神經(jīng)網(wǎng)絡(luò)分類(lèi)模型的研究。本文采用基于Word2Vec 的詞嵌入模型和BiLSTM 雙向長(zhǎng)短期記憶模型,實(shí)現(xiàn)對(duì)文本的分類(lèi)模型訓(xùn)練,以及模型優(yōu)化,對(duì)比其他主要模型,當(dāng)前選擇模型的準(zhǔn)確率是相對(duì)較高的。