唐國豪
(西北工業(yè)大學(xué)附屬中學(xué),陜西西安,710000)
詞是自然語言處理的最小單位,計算機中無法對詞進(jìn)行直接處理,因此需要采用數(shù)學(xué)的方式去表示詞,通常采用的方式是詞向量。常見的詞向量有兩種,分別是獨熱詞向量和分布式詞向量。分布式詞向量表示相比于獨熱表示,具有向量維度小、具有語義相似性的特點。大規(guī)模數(shù)據(jù)訓(xùn)練得到的詞向量,在各種下游任務(wù)如文本分類、文本聚類中表現(xiàn)超越傳統(tǒng)方式,慢慢成為計算機處理自然語言的范式。
Bengio在2003年提出了神經(jīng)網(wǎng)絡(luò)語言模型(Neural Network Language Model),該模型在學(xué)習(xí)語言模型的同時,得到了詞向量。在對統(tǒng)計語言模型進(jìn)行研究的背景下,Google公司在2013年開放了word2vec這一款用于訓(xùn)練詞向量的軟件工具。Word2vec可以根據(jù)給定的語料庫,通過優(yōu)化后的訓(xùn)練模型快速有效地將一個詞語表達(dá)成向量形式,為自然語言處理領(lǐng)域的應(yīng)用研究提供了新的工具。Tomas Mikolov在2013年提出的兩種訓(xùn)練詞向量方式CBOW(Continues Bag-of-Words Model)模型和Skip-Gram(Continuous Skip-gram Model)模型,CBOW的主要思想是用詞的上下文預(yù)測當(dāng)前詞,可看作語言模型的神經(jīng)網(wǎng)絡(luò)表示,而Skip-gram模型與CBOW模型訓(xùn)練方式剛好相反,是通過當(dāng)前詞預(yù)測其上下文。facebook人工智能研究院(AI Research)在2016年開源了fastText,它是一個詞向量與文本分類工具,用簡單而高效的文本分類和表征學(xué)習(xí)的方法,解決了帶監(jiān)督的文本分類問題,F(xiàn)astText結(jié)合了自然語言處理和機器學(xué)習(xí)中最成功的理念。
在自然語言處理中,詞是語義理解的最小語言成分。中文分詞是指用技術(shù)手段,將漢語中句子拆分成一連串有意義的詞。常見做中文分詞的方式有基于語義的中文分詞、基于匹配的中文分詞和基于概率統(tǒng)計的中文分詞。本文主要介紹基于概率統(tǒng)計的中文分詞方式。
基于統(tǒng)計的分詞方式的基本原理是計算不同切分下組成句子的概率,組成句子概率最大的切分方式即為句子的分詞。這種分詞方法基于一個非常簡單的思想:越合理的句子在現(xiàn)時生活中出現(xiàn)概率越大。若S表示一個句子,其組成方式為S=w1,w2,…,wn,其中n是句子的長度,句子S出現(xiàn)的概率,可以表示成如下:
根據(jù)條件概率公式,可將式2-1展開如下:
式(2)中, P (w1) 為詞w1出現(xiàn)的概率, P (w2|w1) 為詞w1出現(xiàn)的條件下詞w2出現(xiàn)的概率,根據(jù)條件概率可知,第i(i= 2,3,4,…,n)個詞是否出現(xiàn)與前面i-1個詞均相關(guān)。式(2)我們稱之為統(tǒng)計語言模型。
根據(jù)式(2),計算出右邊每一項的值,相乘則得到句子出現(xiàn)的概率 P (S)。大樹定理告訴我們:當(dāng)統(tǒng)計量足夠時,可以近似用頻率近似代替概率。若用#w1表示w1在語料庫中出現(xiàn)的頻數(shù), # (w1,w2,…,wi) 表示(w1,w2,…,wi)同時在語料庫中出現(xiàn)的頻數(shù),#表示語料庫中詞語總數(shù)。根據(jù)大樹定理,可以按照如下公式計算式(2)中右邊的每一項:
依據(jù)二元模型和大樹定理計算不同切分下句子的概率,如果有:
依照統(tǒng)計語言模型分詞思想,A1,A2,…,Ak是最好分詞方法。
句子S的切分方式隨著句子S長度增加而呈指數(shù)型增長,采用窮舉的方式計算每種切分方式下的句子的概率會導(dǎo)致計算復(fù)雜度過大,在實際應(yīng)用中難以忍受,當(dāng)前一般利用維特比算法解決這個問題。
自然語言中詞不能被深度學(xué)習(xí)算法直接處理,為了深度學(xué)習(xí)能夠處理詞,需要用數(shù)學(xué)方式表示詞,詞向量就是詞的一種數(shù)學(xué)化表示方式。常見的詞向量有兩種,一種是獨熱表示(One-Hot Representation),另外一種是分布式表示(Distribute Representation)。
獨熱表示的詞向量使用一個長度為詞典大小的向量表示一個詞,向量的分量只有該詞在詞庫中索引位置處為1(詞典索引從0開始)其他位置全為0。這種表示有兩個巨大的缺陷:一個是維度災(zāi)難,表現(xiàn)為向量維度太大(量級大概在百萬左右),占用的時間和空間巨大,特別是應(yīng)用于深度學(xué)習(xí)中;另一個是詞匯鴻溝,獨熱表示下任意兩個向量內(nèi)積為0,空間中表示為兩個向量獨立,語義上表示為兩個詞語義不相關(guān),丟失了詞語之間的相似性。
分布式表示最早由Hinton于1986年提出,是一種低維、稠密和包含語義相似性的詞向量。分布式詞向量語義相似性可由向量距離體現(xiàn),計算詞向量在語義空間距離可以得到詞向量表示詞之間的語義相似性,表示為空間距離越近則詞語語義越相似。
word2vec中主要用到的是CBOW(Continues Bag-of-Words Model)模型和Skip-Gram(Continuous Skip-gram Model)模型,這兩個模型是是Tomas Mikolov在2013年提出的兩種訓(xùn)練詞向量方式[3,4]。CBOW的主要思想是用詞的上下文預(yù)測當(dāng)前詞,可看作語言模型的神經(jīng)網(wǎng)絡(luò)表示,而Skip-Gram模型與CBOW模型訓(xùn)練方式剛好相反,是通過當(dāng)前詞預(yù)測其上下文。 以CBOW模型為例,介紹word2vec訓(xùn)練的原理,CBOW模型結(jié)構(gòu)如圖1所示。
圖1 CBOW模型結(jié)構(gòu)
CBOW模型是一個三層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),模型中沒有使用復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),每層之間均為全連接。輸入層(Input Layer)是之前n-1個詞的獨熱表示向量,每個向量通過矩陣乘法乘以一個維度為的權(quán)重矩陣后得到維度為m的向量;映射層(Projection Layer)直接把n個m維向量做平均,得到映射層的輸出;輸出層(Output Layer)包含個神經(jīng)元,每個神經(jīng)元對應(yīng)詞庫中一個詞,通過softmax函數(shù)將矩陣乘法結(jié)果映射到概率,這個概率表示預(yù)測結(jié)果為該神經(jīng)元對應(yīng)詞的概率。在一個大型的語料庫中,按照上述方式構(gòu)建網(wǎng)絡(luò)的輸入和輸出,通過反向傳播算法,交叉熵?fù)p失作為損失函數(shù),以梯度下降方式不斷修正網(wǎng)絡(luò)參數(shù)。當(dāng)損失函數(shù)收斂時,網(wǎng)絡(luò)訓(xùn)練完成,取出輸入層和映射層之間的權(quán)重參數(shù)做為預(yù)訓(xùn)練好的詞向量。
fastText是facebook人工智能研究院(AIResearch)在2016年開源的文本表示和文本分類的工具。fastText的主要功能有文本表示、文本分類和模型壓縮,分別在三篇論文中進(jìn)行了詳細(xì)的介紹??偨Y(jié)來說,fastText提供了一套完整的文本分類需要的工具,并且開源了其C++代碼。C++工具包使用非常方便,文檔也非常完善。本文主要使用到的fastText功能是文本表示,相對于Google在2013年提出的word2vec,fastText訓(xùn)練速度非??欤軌?qū)W習(xí)到詞的形狀特征,還能部分解決OOV(Out of Vocablary)問題。
本文實驗使用的操作系統(tǒng)是Ubuntu16.04,中文分詞工具使用的是jieba,詞向量訓(xùn)練工具是fastText v0.9.1,實驗環(huán)境硬件配置如表1所示。
表1 實驗環(huán)境配置
本文使用的語料來源于清華大學(xué)新聞分類語料庫THUNews,THUNews是根據(jù)新浪新聞RSS訂閱頻道2005~2011年間的歷史數(shù)據(jù)篩選過濾生成,包含83萬篇新聞文檔(3.9 GB),均為UTF-8純文本格式。在原始新浪新聞分類體系的基礎(chǔ)上,重新整合劃分出14個候選分類類別:財經(jīng)、彩票、房產(chǎn)、股票、家居、教育、科技、社會、時尚、時政、體育、星座、游戲、娛樂。
詞向量表示好壞往往非常難以直接橫向,本文擬采用文本表示下的文本分類效果來衡量系向量好壞。在分類任務(wù)中,我們通常用準(zhǔn)確率,召回率和F度量值表示文本分類效果。在二分類任務(wù)中,準(zhǔn)確率(Precision,P)表示在分類器判斷為正樣本的樣本中真實為正樣本的比例,召回率(Recall,R)表示被分類器判斷為正樣本且真實為正樣本的樣本占樣本中所有真實為正樣本的比例。為了更好的描述準(zhǔn)確率和召回率,引入混淆矩陣(Confusion Matrix),混淆矩陣定義如表2所示。
表2 混淆矩陣
其中,TP表示將正樣本預(yù)測為正樣本的數(shù)目,TN表示將負(fù)樣本預(yù)測為負(fù)樣本的數(shù)目,F(xiàn)P將負(fù)樣本預(yù)測成正樣本的數(shù)目,F(xiàn)N將正樣本預(yù)測為負(fù)樣本的數(shù)目。根據(jù)以上描述,準(zhǔn)確率和召回率可以表示為:
詞向量訓(xùn)練采用的是網(wǎng)上提供的開源工具fastText,fastText是Facebook提供的一個詞向量訓(xùn)練工具,速度很快,能夠在普通CPU上在幾十分鐘內(nèi)快速訓(xùn)練得到詞向量。在(3)中得到的訓(xùn)練集合中用fastText,采用CBOW模型,訓(xùn)練詞向量。訓(xùn)練用時14分鐘,得到一個詞庫大小為277959,向量維度為100維的詞向量,人工檢查發(fā)現(xiàn)向量相似性效果較好,如與媽媽最相似的兩個詞分別是“爸爸”和“女兒”;與高興最相似的兩個詞是“更高興”和“開心”。
將數(shù)據(jù)按照9:1劃分訓(xùn)練集和測試集,在訓(xùn)練集合上用構(gòu)造分類器,用時2分14秒,在測試集合上驗證分類器正確率為94.1%,高于清華大學(xué)公開分類器的87%。
本文主要介紹了分布式詞向量。我們首先對基于概率統(tǒng)計的中文分詞進(jìn)行研究,建立了統(tǒng)計語言模型。然后使用FastText分類工具CBOW模型進(jìn)行分布式詞向量訓(xùn)練。確定了實驗環(huán)境,使用了清華大學(xué)新聞分類語料庫THUNews,明確了評價指標(biāo)。通過實驗,采用文本表示下的文本分類效果來衡量詞向量表示好壞,實現(xiàn)分布式詞向量的指標(biāo)評價,并對實驗結(jié)果進(jìn)行分析,人工檢查發(fā)現(xiàn)向量相似性效果較好。實驗結(jié)果表明,分布式詞向量是一種維度小、含有語義相似性的詞向量。
研究分布式詞向量過程中,我對分布式詞向量的原理和含義有了深入的了解,并且在完成論文中實驗過程中,我掌握了訓(xùn)練分布式詞向量流程,對其中使用到的數(shù)據(jù)集和開源工具有了簡單的了解;在科學(xué)研究過程方面:我學(xué)習(xí)到科學(xué)研究的一般過程,了解了許多查詢資料的手段。最終,在同學(xué)和老師的幫助下,利用開源工具fastText實現(xiàn)了一個版本的詞向量,并且在文本分類任務(wù)中檢驗訓(xùn)練好的詞向量效果,在THUNews數(shù)據(jù)集上達(dá)到94.1%的正確率。