蘇東出,孫 萍
(平頂山學(xué)院,河南 平頂山 467000)
隨著以深度學(xué)習(xí)為代表的神經(jīng)網(wǎng)絡(luò)技術(shù)的發(fā)展,很多研究者開始將研究目光轉(zhuǎn)向這一新興的領(lǐng)域,圖書館界也出現(xiàn)了一批利用神經(jīng)網(wǎng)絡(luò)對文本語料進行深度學(xué)習(xí)的研究成果,比如吉林大學(xué)管理學(xué)院張海濤教授利用卷積神經(jīng)網(wǎng)絡(luò)對微博輿情進行情感分類研究[1],徐彤陽、尹凱基于THUCNews數(shù)據(jù)集,研究了如何利用CNN、根據(jù)文檔特征詞向量對文檔進行分類的問題[2]。這些研究為我們提供了一個將深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)與圖書館業(yè)務(wù)相結(jié)合的方向。
通過調(diào)研發(fā)現(xiàn),目前的研究成果大部分都是基于長文本語料:比如微博內(nèi)容、論壇帖子、網(wǎng)絡(luò)新聞等。這類文本具有明顯的統(tǒng)計優(yōu)勢:①大文本數(shù)據(jù)在詞頻統(tǒng)計上更具有一般性,因此選擇出的可以代表文檔特征的關(guān)鍵詞更為準(zhǔn)確;②大文檔可以統(tǒng)計出更多代表文檔的關(guān)鍵詞,在進行分類的時候,能更準(zhǔn)確的表述文檔的內(nèi)容特征。
目前圖書館的數(shù)字資源則剛好和上述研究成果的研究對象相反:圖書館最多的資源不是各種可自由訪問的超長文本數(shù)據(jù),而是幾十萬甚至上百萬條書目數(shù)據(jù),這些數(shù)據(jù)具有以下特征:①內(nèi)容簡短。大多數(shù)題名只有十幾個字符,有的題名甚至只有一個中文字符。②書目數(shù)據(jù)附加信息少,很多書目數(shù)據(jù)缺少主題詞等信息。
這些特征導(dǎo)致我們在用NLP技術(shù)對文獻書目數(shù)據(jù)進行處理的時候,很難得到足夠多的、能代表文獻分類特征的關(guān)鍵詞,因而也不能直接借用上述研究成果,因此需要尋求更合理靈活的辦法來解決這個問題。
文本的特征表示是文本處理的基礎(chǔ),也是NLP(自然語言處理:Natural Language Processing)和深度學(xué)習(xí)的基礎(chǔ),好的文本特征表示算法不僅能準(zhǔn)確反映原始文本的內(nèi)容,而且還有利于提高文本算法的準(zhǔn)確度,當(dāng)前的文本特征表示技術(shù)基本上都基于統(tǒng)計模型,包含分詞和詞的向量化兩個步驟。
分詞是NLP的基本任務(wù),其主要目的就是從連續(xù)的字符序列中提取出可以代表文檔內(nèi)容特征的基本詞匯。相對于西文分詞技術(shù),中文分詞的技術(shù)難度更大,在詞義消歧、粒度大小、詞性標(biāo)注方面需要解決的問題更多。近年來,隨著互聯(lián)網(wǎng)的發(fā)展,分詞技術(shù)雖然在算法原理上沒有突破性的發(fā)展,但是以大數(shù)據(jù)為統(tǒng)計樣本建模,并且從應(yīng)用角度來看,中文分詞越來越成熟,正確率和召回率都有了大幅度的提升,比如清華大學(xué)的THULAC[3](THU Lexical Analyzer for Chinese)的F1值可達97.3%,可以說已經(jīng)具備了工業(yè)化應(yīng)用的水平。
分詞的目的不僅僅是為了表示文檔的主題內(nèi)容,更是為了將文檔表示為計算機能夠識別、處理的一系列有意義的數(shù)字信息,目前應(yīng)用最廣泛的就是詞向量化技術(shù),又稱詞嵌入(Word Embedding)技術(shù)[4],通過將單詞嵌入到(或者說映射到)一個多維實數(shù)空間中來實現(xiàn)詞的數(shù)字化表示,雖然有很多理論和模型都可以實現(xiàn)詞嵌入,但是歸根結(jié)底,根據(jù)生成詞向量的類型,只有稀疏詞向量和稠密詞向量兩種。
1.1.1 稀疏詞向量。稀疏詞向量根據(jù)BOW(詞袋)大小設(shè)置向量空間的維度,比如BOW有1 000個不重復(fù)詞匯,則生成的向量為1 000維向量,如果詞袋單詞數(shù)量達到1萬以上,每1個單詞就需要1萬個實數(shù)來表示,多個單詞同時表示所需的空間復(fù)雜度和時間復(fù)雜度是服務(wù)器難以承受的,雖然可以根據(jù)字典序號壓縮表示,比如TFIDF模型生成的向量[5,6],但是在運算的時候仍然需要“升維”,表示雖然簡單,但是運算復(fù)雜度卻提高了,因此,稀疏詞向量模型通常用于邏輯簡單、訓(xùn)練語料數(shù)據(jù)較少的應(yīng)用場合。
1.1.2 稠密詞向量。稀疏詞向量的種種弊端導(dǎo)致了稠密詞向量的產(chǎn)生,在稠密詞向量中,表示向量的實數(shù)值不再是離散型的整數(shù),而是連續(xù)性的實數(shù),向量的維度也固定為有限的數(shù)值,比如很多模型限制為100維,向量格式形如:
[-0.018229000153951347,…,-0.01511262892
7454352,-0.10122359311208129,-0.079580809455
36494,0.019655946758575737]
通常情況下,假如一篇長文檔中根據(jù)一定規(guī)則提取出m個分詞作為關(guān)鍵詞,每一個關(guān)鍵詞根據(jù)模型算法得到一個n維的詞向量,那么就可以用一個m×n的矩陣表示該文檔,L篇文檔就是L個m×n的矩陣。對于長文本,這通常沒有問題,假設(shè)L個文檔的關(guān)鍵詞數(shù)量分別為:m1,m2,…ml,只需找到關(guān)鍵詞最少的文檔m=min{m1,m2,…ml},并以此作為m×n的m值即可,但是對于諸如書目數(shù)據(jù)這樣的超短文本,由于每一個書目的題名可能提取的關(guān)鍵詞數(shù)量相差甚大,這就導(dǎo)致以下問題。
1.2.1 文檔維度不統(tǒng)一。比如《憶》只有一個關(guān)鍵詞可以生成詞向量,其所生成的文檔矩陣大小為:1×100,而《軟組織 與 骨腫瘤 病理學(xué) 和 遺傳學(xué) Pathology genetics tumours of soft tissue and bone》有10個分詞可以作為關(guān)鍵詞,其文檔矩陣為10×100。
1.2.2 不同維度的文檔特征矩陣無法進行運算。矩陣的運算對矩陣的形狀有著嚴(yán)格的要求,因而,無論是作為神經(jīng)網(wǎng)絡(luò)還是NLP,都無法處理維度、形狀不一致的數(shù)據(jù)。
為了解決上述問題,許多學(xué)者進行了有益的探索,比如利用外部語料庫的文本特征擴展特征向量[7,8]與基于短文本自身內(nèi)容特征擴展特征向量[9-11],這些算法都著重于擴充文檔向量的維度以增加其辨識度。但是這些技術(shù)方法對于書目題名數(shù)據(jù)并不合適:①特征擴充嚴(yán)重依賴外部語料的完整性,100%的完整度不可能做到;②題名數(shù)據(jù)之間幾乎不存在上下文相關(guān)性。
筆者采用了“基于分詞權(quán)重”和“稠密向量”相結(jié)合的方法,該方法指導(dǎo)思路如下:①詞向量采用固定維度的稠密向量格式,比如采用word2vect后的詞向量維度默認(rèn)是100。②將作者作為題名向量空間中的元素加以考慮。對于題名超短的數(shù)據(jù),加入作者詞向量可以有效提高數(shù)據(jù)的辨識度和分類的準(zhǔn)確率。③所有題名的特征向量統(tǒng)一降維為1×100大小,可以解決題名只含有一個分詞的書目數(shù)據(jù)向量化的問題。目前常用的特征選擇和特征抽取降維方法[12,13]不適合短文本。筆者的重點之一在于解決這個要求,其算法原理如下:
由于各個分詞不同,我們可以把集合V的各個元素看作向量空間的一組線性無關(guān)的“基”向量,因此V具備張集的特征,根據(jù)基向量的性質(zhì),必然存在如下一一對應(yīng)關(guān)系:
k1a1+k2a2+…kmam=bki∈,ai∈V
(1)
筆者基于稠密詞向量的文檔特征向量生成方法借鑒了以上概念,文檔特征向量的計算公式如下:
w1a1+w2a2+…wmam=bwi∈{TFIDF},ai∈V
(2)
其中wi為每一個詞向量的權(quán)重,鑒于不同的分詞具有不同的TFIDF值,TFIDF值越大,表示該分詞的信息熵越低,越能代表文檔的確切內(nèi)容,因此,筆者采用TFIDF值作為詞向量權(quán)重并作詞向量的線性降維運算。
從理論上來說,該方法不但能保留文檔所有詞向量的信息,而且還保留了每一個詞向量的權(quán)重信息。
本研究模型分兩個部分:題名特征向量的生成和特征向量的分類訓(xùn)練。
本研究采用Jieba作為分詞工具,word2vect作為稠密詞向量生成工具。word2vect是google開源的一款詞向量計算工具,可以在百萬級的數(shù)據(jù)上高效訓(xùn)練,同時可以將文本中的特征詞在空間上映射為低緯度的稠密向量[14]。
模型從原始文本到特征向量,經(jīng)過以下步驟:①數(shù)據(jù)清洗。所謂數(shù)據(jù)清洗,就是發(fā)現(xiàn)并糾正文本數(shù)據(jù)中可識別的錯誤,包括檢查數(shù)據(jù)的一致性,處理無效值和缺失值NAN等,在本模型系統(tǒng)中,數(shù)據(jù)清洗主要的工作有:去除爬蟲數(shù)據(jù)中題名包含的書名號、單雙引、換行符號等非文字字符(空格字符起到分割英文單詞的作用,因此除外);去除一些與書目信息無關(guān)的網(wǎng)頁數(shù)據(jù),保持?jǐn)?shù)據(jù)的一致性,比如圖書館OPAC檢索結(jié)果中可能包含的“[點擊查看詳細信息]”之類的文本。②數(shù)據(jù)規(guī)范。從合著、獨著、譯著等責(zé)任者方式中分離出責(zé)任者;從出版社字段中分離出出版社,二者作為命名實體數(shù)據(jù),避免被分詞工具強行分詞;糾正原始著錄錯誤,比如去掉題名中多余的空格,以免出現(xiàn)長度為0的無效分詞。③根據(jù)第一步創(chuàng)建的命名實體詞典和停用詞表,利用jieba分詞。④利用word2vect生成詞向量和詞向量模型?;赥FIDF權(quán)重的文檔特征向量降維代碼部分如下:
Import numpy as np
...
for i in range(len(trainX)):
line = trainX[i]
v = np.zeros(100)
cp = dict.doc2bow(line)
weights = tfidf[cp]
for w in line:
idx = dict.doc2idx([w])[0]
weight = list(filter(lambda x:x[0]==idx,weights))
v = v + model.wv._getitem__(w)* weight[0][1]
trainX[i]= v
print(’生成’,i,’條文檔向量’)
...
代碼說明:trainX為待訓(xùn)練文檔的關(guān)鍵詞列表數(shù)據(jù),dict為訓(xùn)練后的詞袋詞典,tfidf為訓(xùn)練后的TFIDF模型,model為訓(xùn)練后的word2vect模型。限于篇幅,以上代碼僅供參考。
各種分類問題是神經(jīng)網(wǎng)絡(luò)的主要研究方向,目前圖書館界的各種基于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的研究基本上也以分類問題為主,比如各種輿情分析、情感分類等,對于題名一類的超短文本文檔,雖然也可以借鑒以上思路,但是不能照搬傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的模型結(jié)構(gòu)。
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)是深度學(xué)習(xí)領(lǐng)域的重要模型,是根據(jù)生物學(xué)上“感受野”機制提出的一種前饋神經(jīng)網(wǎng)絡(luò)[15]。典型的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,由若干個卷積池化層和一個全連接層構(gòu)成,每一個卷積層通過卷積核對原始數(shù)據(jù)提取特征,經(jīng)過池化層的有損壓縮后輸入到下一層,最終形成分類結(jié)果。同全連接BP神經(jīng)網(wǎng)絡(luò)相比,卷積神經(jīng)網(wǎng)絡(luò)因其權(quán)值共享,在處理大數(shù)據(jù)的時候性能更具優(yōu)勢,因此廣泛應(yīng)用于圖像數(shù)據(jù)的分類處理上。近年來,很多學(xué)者嘗試將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于文本數(shù)據(jù)的分類處理,并取得了不錯的效果。
圖1 卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
但是經(jīng)過多次實驗對比,這種傳統(tǒng)的結(jié)構(gòu)在處理短文本文檔的分類時候表現(xiàn)并不理想,經(jīng)過分析,發(fā)現(xiàn)原因有以下兩點:①題名的特征向量維度太低,比如通常默認(rèn)只有100。而卷積神經(jīng)網(wǎng)絡(luò)最初是為大維度的向量數(shù)據(jù)設(shè)計的,我們以降為1維的向量做對比:比如最小的彩色圖標(biāo)文件尺寸為3×32×32像素,轉(zhuǎn)換為一維向量后,其維度為3 072,稍微大一些的圖片數(shù)據(jù),更是遠遠大于文檔的特征向量。②卷積層和池化層的有損壓縮導(dǎo)致文檔的特征向量丟失信息。從本質(zhì)上來說,文檔的稠密特征向量已經(jīng)對文檔的信息進行了壓縮,經(jīng)過卷積和池化后,數(shù)據(jù)的維度大幅度降低(如表1所示),嚴(yán)重影響分類學(xué)習(xí)的效果。
表1 不同尺寸卷積核一次卷積池化后對數(shù)據(jù)維度損失的影響
從表1可以看出,經(jīng)過每次卷積池化,特征向量的維度都會大幅下降,事實上,即使采用較小的3×3的卷積核,經(jīng)過兩次卷積池化運算后,文檔的特征向量只有4×4大小,維度降低為16維,信息損失84%。
筆者通過以下兩種方法避免特征向量降維而損失信息:①卷積層通過padding補零來保證卷積后的維度不變。②取消池化層。無論是最大池化還是平均池化,都不可避免地會對數(shù)據(jù)進行有損壓縮,取消池化層可以避免這個問題。實驗證明,池化層并不是卷積神經(jīng)網(wǎng)絡(luò)必不可少的,對于低緯度特征向量的運算來說,取消池化層后的回歸效果更好。
改進后的神經(jīng)網(wǎng)絡(luò)如圖2所示。
圖2 基于短文本的CNN結(jié)構(gòu)
本研究以平頂山學(xué)院圖書館OPAC頁面抓取的153 816條數(shù)據(jù)作為原始文檔,數(shù)據(jù)經(jīng)過清洗、分詞,并按照中圖法生成22個分類標(biāo)簽,前15萬條作為神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù),后3 816條作為測試數(shù)據(jù);利用word2vect針對分詞生成稠密詞向量,word2vect函數(shù)的頻數(shù)閾值min_count設(shè)置為1,以避免當(dāng)文獻題名只有一個漢字的時候不能生成詞向量;利用gensim的 TFIDF模型生成每一個分詞的向量權(quán)重數(shù)據(jù),在卷積神經(jīng)網(wǎng)絡(luò)上經(jīng)過100次迭代訓(xùn)練后,基于交叉熵的損失穩(wěn)定下降(見圖3),證明經(jīng)過訓(xùn)練,該卷積神經(jīng)網(wǎng)絡(luò)確實通過深度學(xué)習(xí),具備了一定的短文本分類能力,最終實驗結(jié)果:3 816條數(shù)據(jù)的22分類整體正確率為67.5%,各個分類的正確率、召回率和F1值見表2。
圖3 100次迭代損失值變化
表2 22元分類的正確率、召回率和F1值
從分類統(tǒng)計結(jié)果可知,專業(yè)特征明顯的書籍容易得到較高的F1值:比如語言學(xué)、天文地球科學(xué)、醫(yī)學(xué)、工業(yè)技術(shù),這和我們?nèi)斯し诸惖闹庇^感受一致,該分類結(jié)果基本上具備了參考價值。
筆者以文獻題名數(shù)據(jù)為對象,研究了基于題名數(shù)據(jù)的超短文本分類問題,涉及超短文本的特征向量的建立、卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)化等方面,具有一定的理論研究價值和實踐意義。在理論層面,基于向量空間中基的原理,提出了基于TFIDF權(quán)重的、不同尺寸的文檔特征矩陣降維的方法,驗證了卷積神經(jīng)網(wǎng)絡(luò)在取消池化層后,針對低緯度向量的分類具有更好的效果。在實踐層面,該網(wǎng)絡(luò)模型對于智能助手開發(fā)、文獻智能分類都具有借鑒意義。
限于研究環(huán)境和個人學(xué)術(shù)水平等因素,也存在不足,比如:由于爬蟲獲取數(shù)據(jù)效率太低,本模型未能獲取完整的圖書館書目數(shù)據(jù),語料數(shù)據(jù)不足對于模型的準(zhǔn)確度會有較大的影響;硬件配置較低,無法利用騰訊AI LAB開源的800萬詞向量模型來提高詞向量的質(zhì)量;分類準(zhǔn)確度仍需進一步提升,而且還無法做到更詳細的分類。這些問題需要在以后的研究中針對數(shù)據(jù)和模型持續(xù)優(yōu)化,不斷提高。