蘇東出,孫 萍
(平頂山學院,河南 平頂山 467000)
隨著以深度學習為代表的神經網絡技術的發展,很多研究者開始將研究目光轉向這一新興的領域,圖書館界也出現了一批利用神經網絡對文本語料進行深度學習的研究成果,比如吉林大學管理學院張海濤教授利用卷積神經網絡對微博輿情進行情感分類研究[1],徐彤陽、尹凱基于THUCNews數據集,研究了如何利用CNN、根據文檔特征詞向量對文檔進行分類的問題[2]。這些研究為我們提供了一個將深度學習和神經網絡與圖書館業務相結合的方向。
通過調研發現,目前的研究成果大部分都是基于長文本語料:比如微博內容、論壇帖子、網絡新聞等。這類文本具有明顯的統計優勢:①大文本數據在詞頻統計上更具有一般性,因此選擇出的可以代表文檔特征的關鍵詞更為準確;②大文檔可以統計出更多代表文檔的關鍵詞,在進行分類的時候,能更準確的表述文檔的內容特征。
目前圖書館的數字資源則剛好和上述研究成果的研究對象相反:圖書館最多的資源不是各種可自由訪問的超長文本數據,而是幾十萬甚至上百萬條書目數據,這些數據具有以下特征:①內容簡短。大多數題名只有十幾個字符,有的題名甚至只有一個中文字符。②書目數據附加信息少,很多書目數據缺少主題詞等信息。
這些特征導致我們在用NLP技術對文獻書目數據進行處理的時候,很難得到足夠多的、能代表文獻分類特征的關鍵詞,因而也不能直接借用上述研究成果,因此需要尋求更合理靈活的辦法來解決這個問題。
文本的特征表示是文本處理的基礎,也是NLP(自然語言處理:Natural Language Processing)和深度學習的基礎,好的文本特征表示算法不僅能準確反映原始文本的內容,而且還有利于提高文本算法的準確度,當前的文本特征表示技術基本上都基于統計模型,包含分詞和詞的向量化兩個步驟。
分詞是NLP的基本任務,其主要目的就是從連續的字符序列中提取出可以代表文檔內容特征的基本詞匯。相對于西文分詞技術,中文分詞的技術難度更大,在詞義消歧、粒度大小、詞性標注方面需要解決的問題更多。近年來,隨著互聯網的發展,分詞技術雖然在算法原理上沒有突破性的發展,但是以大數據為統計樣本建模,并且從應用角度來看,中文分詞越來越成熟,正確率和召回率都有了大幅度的提升,比如清華大學的THULAC[3](THU Lexical Analyzer for Chinese)的F1值可達97.3%,可以說已經具備了工業化應用的水平。
分詞的目的不僅僅是為了表示文檔的主題內容,更是為了將文檔表示為計算機能夠識別、處理的一系列有意義的數字信息,目前應用最廣泛的就是詞向量化技術,又稱詞嵌入(Word Embedding)技術[4],通過將單詞嵌入到(或者說映射到)一個多維實數空間中來實現詞的數字化表示,雖然有很多理論和模型都可以實現詞嵌入,但是歸根結底,根據生成詞向量的類型,只有稀疏詞向量和稠密詞向量兩種。
1.1.1 稀疏詞向量。稀疏詞向量根據BOW(詞袋)大小設置向量空間的維度,比如BOW有1 000個不重復詞匯,則生成的向量為1 000維向量,如果詞袋單詞數量達到1萬以上,每1個單詞就需要1萬個實數來表示,多個單詞同時表示所需的空間復雜度和時間復雜度是服務器難以承受的,雖然可以根據字典序號壓縮表示,比如TFIDF模型生成的向量[5,6],但是在運算的時候仍然需要“升維”,表示雖然簡單,但是運算復雜度卻提高了,因此,稀疏詞向量模型通常用于邏輯簡單、訓練語料數據較少的應用場合。
1.1.2 稠密詞向量。稀疏詞向量的種種弊端導致了稠密詞向量的產生,在稠密詞向量中,表示向量的實數值不再是離散型的整數,而是連續性的實數,向量的維度也固定為有限的數值,比如很多模型限制為100維,向量格式形如:
[-0.018229000153951347,…,-0.01511262892
7454352,-0.10122359311208129,-0.079580809455
36494,0.019655946758575737]
通常情況下,假如一篇長文檔中根據一定規則提取出m個分詞作為關鍵詞,每一個關鍵詞根據模型算法得到一個n維的詞向量,那么就可以用一個m×n的矩陣表示該文檔,L篇文檔就是L個m×n的矩陣。對于長文本,這通常沒有問題,假設L個文檔的關鍵詞數量分別為:m1,m2,…ml,只需找到關鍵詞最少的文檔m=min{m1,m2,…ml},并以此作為m×n的m值即可,但是對于諸如書目數據這樣的超短文本,由于每一個書目的題名可能提取的關鍵詞數量相差甚大,這就導致以下問題。
1.2.1 文檔維度不統一。比如《憶》只有一個關鍵詞可以生成詞向量,其所生成的文檔矩陣大小為:1×100,而《軟組織 與 骨腫瘤 病理學 和 遺傳學 Pathology genetics tumours of soft tissue and bone》有10個分詞可以作為關鍵詞,其文檔矩陣為10×100。
1.2.2 不同維度的文檔特征矩陣無法進行運算。矩陣的運算對矩陣的形狀有著嚴格的要求,因而,無論是作為神經網絡還是NLP,都無法處理維度、形狀不一致的數據。
為了解決上述問題,許多學者進行了有益的探索,比如利用外部語料庫的文本特征擴展特征向量[7,8]與基于短文本自身內容特征擴展特征向量[9-11],這些算法都著重于擴充文檔向量的維度以增加其辨識度。但是這些技術方法對于書目題名數據并不合適:①特征擴充嚴重依賴外部語料的完整性,100%的完整度不可能做到;②題名數據之間幾乎不存在上下文相關性。
筆者采用了“基于分詞權重”和“稠密向量”相結合的方法,該方法指導思路如下:①詞向量采用固定維度的稠密向量格式,比如采用word2vect后的詞向量維度默認是100。②將作者作為題名向量空間中的元素加以考慮。對于題名超短的數據,加入作者詞向量可以有效提高數據的辨識度和分類的準確率。③所有題名的特征向量統一降維為1×100大小,可以解決題名只含有一個分詞的書目數據向量化的問題。目前常用的特征選擇和特征抽取降維方法[12,13]不適合短文本。筆者的重點之一在于解決這個要求,其算法原理如下:

由于各個分詞不同,我們可以把集合V的各個元素看作向量空間的一組線性無關的“基”向量,因此V具備張集的特征,根據基向量的性質,必然存在如下一一對應關系:
k1a1+k2a2+…kmam=bki∈,ai∈V
(1)

筆者基于稠密詞向量的文檔特征向量生成方法借鑒了以上概念,文檔特征向量的計算公式如下:
w1a1+w2a2+…wmam=bwi∈{TFIDF},ai∈V
(2)
其中wi為每一個詞向量的權重,鑒于不同的分詞具有不同的TFIDF值,TFIDF值越大,表示該分詞的信息熵越低,越能代表文檔的確切內容,因此,筆者采用TFIDF值作為詞向量權重并作詞向量的線性降維運算。
從理論上來說,該方法不但能保留文檔所有詞向量的信息,而且還保留了每一個詞向量的權重信息。
本研究模型分兩個部分:題名特征向量的生成和特征向量的分類訓練。
本研究采用Jieba作為分詞工具,word2vect作為稠密詞向量生成工具。word2vect是google開源的一款詞向量計算工具,可以在百萬級的數據上高效訓練,同時可以將文本中的特征詞在空間上映射為低緯度的稠密向量[14]。
模型從原始文本到特征向量,經過以下步驟:①數據清洗。所謂數據清洗,就是發現并糾正文本數據中可識別的錯誤,包括檢查數據的一致性,處理無效值和缺失值NAN等,在本模型系統中,數據清洗主要的工作有:去除爬蟲數據中題名包含的書名號、單雙引、換行符號等非文字字符(空格字符起到分割英文單詞的作用,因此除外);去除一些與書目信息無關的網頁數據,保持數據的一致性,比如圖書館OPAC檢索結果中可能包含的“[點擊查看詳細信息]”之類的文本。②數據規范。從合著、獨著、譯著等責任者方式中分離出責任者;從出版社字段中分離出出版社,二者作為命名實體數據,避免被分詞工具強行分詞;糾正原始著錄錯誤,比如去掉題名中多余的空格,以免出現長度為0的無效分詞。③根據第一步創建的命名實體詞典和停用詞表,利用jieba分詞。④利用word2vect生成詞向量和詞向量模型?;赥FIDF權重的文檔特征向量降維代碼部分如下:
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為待訓練文檔的關鍵詞列表數據,dict為訓練后的詞袋詞典,tfidf為訓練后的TFIDF模型,model為訓練后的word2vect模型。限于篇幅,以上代碼僅供參考。
各種分類問題是神經網絡的主要研究方向,目前圖書館界的各種基于神經網絡和深度學習的研究基本上也以分類問題為主,比如各種輿情分析、情感分類等,對于題名一類的超短文本文檔,雖然也可以借鑒以上思路,但是不能照搬傳統神經網絡的模型結構。
卷積神經網絡(convolutional neural networks,CNN)是深度學習領域的重要模型,是根據生物學上“感受野”機制提出的一種前饋神經網絡[15]。典型的卷積神經網絡結構如圖1所示,由若干個卷積池化層和一個全連接層構成,每一個卷積層通過卷積核對原始數據提取特征,經過池化層的有損壓縮后輸入到下一層,最終形成分類結果。同全連接BP神經網絡相比,卷積神經網絡因其權值共享,在處理大數據的時候性能更具優勢,因此廣泛應用于圖像數據的分類處理上。近年來,很多學者嘗試將卷積神經網絡應用于文本數據的分類處理,并取得了不錯的效果。

圖1 卷積神經網絡模型結構
但是經過多次實驗對比,這種傳統的結構在處理短文本文檔的分類時候表現并不理想,經過分析,發現原因有以下兩點:①題名的特征向量維度太低,比如通常默認只有100。而卷積神經網絡最初是為大維度的向量數據設計的,我們以降為1維的向量做對比:比如最小的彩色圖標文件尺寸為3×32×32像素,轉換為一維向量后,其維度為3 072,稍微大一些的圖片數據,更是遠遠大于文檔的特征向量。②卷積層和池化層的有損壓縮導致文檔的特征向量丟失信息。從本質上來說,文檔的稠密特征向量已經對文檔的信息進行了壓縮,經過卷積和池化后,數據的維度大幅度降低(如表1所示),嚴重影響分類學習的效果。

表1 不同尺寸卷積核一次卷積池化后對數據維度損失的影響
從表1可以看出,經過每次卷積池化,特征向量的維度都會大幅下降,事實上,即使采用較小的3×3的卷積核,經過兩次卷積池化運算后,文檔的特征向量只有4×4大小,維度降低為16維,信息損失84%。
筆者通過以下兩種方法避免特征向量降維而損失信息:①卷積層通過padding補零來保證卷積后的維度不變。②取消池化層。無論是最大池化還是平均池化,都不可避免地會對數據進行有損壓縮,取消池化層可以避免這個問題。實驗證明,池化層并不是卷積神經網絡必不可少的,對于低緯度特征向量的運算來說,取消池化層后的回歸效果更好。
改進后的神經網絡如圖2所示。

圖2 基于短文本的CNN結構
本研究以平頂山學院圖書館OPAC頁面抓取的153 816條數據作為原始文檔,數據經過清洗、分詞,并按照中圖法生成22個分類標簽,前15萬條作為神經網絡訓練數據,后3 816條作為測試數據;利用word2vect針對分詞生成稠密詞向量,word2vect函數的頻數閾值min_count設置為1,以避免當文獻題名只有一個漢字的時候不能生成詞向量;利用gensim的 TFIDF模型生成每一個分詞的向量權重數據,在卷積神經網絡上經過100次迭代訓練后,基于交叉熵的損失穩定下降(見圖3),證明經過訓練,該卷積神經網絡確實通過深度學習,具備了一定的短文本分類能力,最終實驗結果:3 816條數據的22分類整體正確率為67.5%,各個分類的正確率、召回率和F1值見表2。

圖3 100次迭代損失值變化

表2 22元分類的正確率、召回率和F1值
從分類統計結果可知,專業特征明顯的書籍容易得到較高的F1值:比如語言學、天文地球科學、醫學、工業技術,這和我們人工分類的直觀感受一致,該分類結果基本上具備了參考價值。
筆者以文獻題名數據為對象,研究了基于題名數據的超短文本分類問題,涉及超短文本的特征向量的建立、卷積神經網絡的優化等方面,具有一定的理論研究價值和實踐意義。在理論層面,基于向量空間中基的原理,提出了基于TFIDF權重的、不同尺寸的文檔特征矩陣降維的方法,驗證了卷積神經網絡在取消池化層后,針對低緯度向量的分類具有更好的效果。在實踐層面,該網絡模型對于智能助手開發、文獻智能分類都具有借鑒意義。
限于研究環境和個人學術水平等因素,也存在不足,比如:由于爬蟲獲取數據效率太低,本模型未能獲取完整的圖書館書目數據,語料數據不足對于模型的準確度會有較大的影響;硬件配置較低,無法利用騰訊AI LAB開源的800萬詞向量模型來提高詞向量的質量;分類準確度仍需進一步提升,而且還無法做到更詳細的分類。這些問題需要在以后的研究中針對數據和模型持續優化,不斷提高。