李祥祥,石剛
(新疆大學信息科學與工程學院,烏魯木齊830046)
隨著科技的發展,特別是互聯網技術的普及,人們之間的距離越來越近,真正做到了“天涯若比鄰”。遠隔天涯的人們可以很方便地通過互聯網交談,了解對方的近況。伴隨著全球化的不斷邁進,世界各國之間的政治、經濟、文化交流與融合也越來越密切,各國民眾對于互相交流的意愿也越來越強烈,但是語言不通是極大地障礙,怎么讓說不同語言的人無障礙的交流是自然語言處理的初衷。
雙語詞典是一種基本的資源,其在跨語言自然語言的很多工作中都起到了非常重要的作用[1]。傳統的人工構造雙語詞典的方法有很多弊端,如人工成本較高、時效性不好且語言和領域的覆蓋度方面不理想等。隨個各個國家、各個民族的交流日益密切,每種語言都在不斷的出現新的詞匯,一個不能實時更新的雙語詞典很難滿足跨語言自然語言處理的任務,如何更加實時且高效地構建雙語詞典成為了研究人員的一個重要課題。許多研究人員開始著手研究如何利用深度學習的方法自動完成雙語詞典的構建。
本文基于此背景,研究出了一種基于深度學習神經網絡的雙語詞典構建方法。通過網絡爬蟲技術爬取漢英雙語新聞網站、漢英翻譯網站的數據,作為本文所用漢英語料。將漢英語料中語句分割成一個個詞語(分詞處理);分別設計了漢語和英語的停用詞表,用于去除漢英語料中出現頻率很高但沒有實際含義的功能詞(介詞、冠詞、代詞等);最后使用神經網絡模型訓練漢英語料得到雙語詞向量,根據詞向量的關聯性得到漢英對照翻譯詞對。得到的雙語對照翻譯結果可作為專業編纂人員的參考和補充,避免從零開始工作,減少大量人工成本和時間成本,加快雙語詞典的構建速度。
使用計算機算法構建雙語詞典主要有兩種方式:
(1)基于平行語料庫。平行語料庫中的語句都是嚴格對照翻譯的[1],利用這些嚴格互譯的語句,可以很方便地獲取優質,高效的雙語詞典。只是最大的問題是創建平行語料庫比較耗時,并且雙語詞典覆蓋的范圍只在少數領域和少數語言中,很大程度上限制了這種方法的大范圍使用[2]。
(2)基于可比語料庫??杀日Z料庫中的語句不是一一對照翻譯的,但是互相翻譯的詞語在語料庫中的位置是十分相近的。使用可比語料庫進行雙語詞典構建[3-4,8]的方式是從20世紀90年代末開始的發展起來的,由Fung和Rapp兩人于同一個時間段提出這種觀點[5-6]。這種方式的理論基礎是:互譯的詞語通常出現在相似的上下文語境中。首先計算兩種語言的詞向量,然后計算詞向量之間的距離,兩個詞向量的距離越近,對應詞的相似度越高,互譯的程度就越高,從而完成了互譯詞語的提取。
基于可比預料庫的方法可以快捷且高效地構建雙語詞典,并且構建出的詞典其語言和領域的覆蓋都比較廣。本文正是利用此方法的優點進行漢英雙語詞典的構建。通過網絡爬蟲技術爬取包含漢英雙語的新聞、翻譯類網站的公開數據,包含4000000個語句和段落,數據共計327MB,構成本文研究使用的漢英雙語語料庫。
目前利用可比預料庫構建雙語詞典的方法主要有:
(1)兩種語言各自訓練,互相轉換。Mikolov[9]通過實驗證明了,源語言的詞向量能夠很好地轉變為目標語言的詞向量[7,11]。該文章使用英語和西班牙語兩種語言,通過訓練分別得到對應的兩種詞向量空間E和S,從英語中取出one、two、three、four、five五個詞語,從西班牙語中取出語義相同的五個詞語uno、dos、tres、cuatro、cinco,將他們分別使用PCA(Principal Component Analy?sis,主成分分析)降維,通過降維解決維數災難問題,并且在降維的同時讓信息的損失最小,并在二維空間中描出來,發現他們在對應的詞向量空間中的相對位置差不多,這說明不同語言在其對應的向量空間中的結構具有相似性。將源語言詞向量轉化到對應的目標語言詞向量空間后,對照翻譯的每兩個詞語的相對位置相近。
(2)兩種語言各自訓練,然后轉換到第三方詞向量空間。Faruqui[10]使用子詞典將分別訓練好的兩種語言的詞向量同時轉化到第三方詞向量空間中,由此得到的詞向量空間中,互譯的兩種語言詞語對會出現在相近的位置上。
(3)兩種語言在同一詞向量空間一起訓練。代表工作是Stephan Gouws[12]將兩種語言的語料混合在一起進行訓練,得到在同一向量空間中的雙語詞向量。訓練時的語料經過處理,具有互譯性質的詞語對通常出現在上下文中,同時訓練出的具有互譯性質詞語的詞向量通常具有很高的相似性,可以認定他們是互譯的詞語。
本文參考第三種方式,利用神經網絡模型將漢英語料一起進行訓練,得到同一向量空間中的雙語詞向量,通過計算詞向量之間的關聯性,可同時得到欲翻譯詞語的近義詞和另一種語言的翻譯結果。根據翻譯結果完成雙語詞典的構建。
在自然語言處理的應用中,需要將平時說的話以一種計算機能識別的方式輸入,經常進行的操作是將語言數字化,詞向量就是將語言中的詞進行數學化的一種方式。
詞向量大致有兩種表示方式,第一種方式是Onehot-Representation,這種方式將一個詞表示為一個很長的由很多個0和一個1組成的詞向量,1所在的位置代表了唯一的一個詞語。例如,“中國”的詞向量可以表示為[0 0 0 1 0 0 0 0 0...],“中華”的詞向量可以表示為[0 0 0 0 0 0 1 0 0...]。用One-hot-Representation表示詞向量的方法采用了稀疏方式存儲,十分簡潔,給每一個詞語配置一個唯一的編號。這種表示方式配合上最大熵、SVM、CRF等算法可以很好地完成自然語言處理領域的各種主流任務。然而這種方式也有一些缺陷,它很容易受到維數災難的困擾,這是一種隨著數據維數的增加,計算量呈指數倍增長的現象;同時該方法無法準確描述詞和詞之間的語義關系,如剛才舉例的“中國”和“中華”,雖然詞義是相似的,但是One-hot-Representa?tion并不能描述出他們的相似性。第二種方式是Dis?tributed Representation,使用此種方法可以將詞語表示為一種維數很低的實數向量,一般表示成:[-8.70686,-1.8112,-2.19500,-1.15472,-2.82405,...]。這種詞向量表示方法可以很好地刻畫語義相似的兩個詞語的相似度,理想情況下“中國”和“中華”詞向量的相似度會十分高,會遠遠大于“中國”和“鋼筆”的相似度。
詞向量實際上是在對語言進行建模的同時獲取到的一種詞語在向量空間中的表示,是語言建模時的一種副產物。語言建模就是判斷一個語句是否是正常人說出來的,這種建模有很重要的意義,比方說機器翻譯和語音識別,當得到若干個候選語句后,使用語言模型,可以選擇出最佳的結果。給定一個句子S,由t個詞語W1,W2,W3,…,Wt組成,這個句子是自然語言的概率為P(S),P(W1)代表詞語W1出現的概率,P(W2|W1)代表在有詞語W1存在的情況下W2出現的條件概率。因此詞向量的計算等同于計算P( )Wi|Contexti問題,計算在Contexti(詞語W1至Wi-1)存在的情況下,Wi出現的概率。使用數學表達式表示語言建模,如公式(1)所示:

Google曾公布一種名為Word2Vec的模型[13]。它因為可以簡單、高效得到詞向量而引起人們的關注。
Word2Vec的作用就是將平時說話時所用的詞語轉化成計算機可以識別的詞向量。它本質上是一種單詞聚類的方法,是實現單詞語義推測、句子情感分析等目的的一種手段。選取訓練后詞向量的任意3個維度,放入坐標系中,會發現語義相似的詞語在空間坐標中的位置十分接近,而語義無關的詞語之間則距離較遠,這種性質可以很好地描述單詞之間的相似性。Word2Vec采用三層的神經網絡,即輸入層、隱層和輸出層,其核心技術是根據詞頻使用Huffman編碼,使得所有詞頻相似的詞語在隱藏層激活的內容基本一致,出現頻率越高的詞語,它們激活的隱藏層數目越少,這樣有效地降低了計算的復雜度。
Word2Vec分為兩種類型的訓練方法:CBOW模型和Skip-Gram模型。CBOW的是利用上下文來預測中心詞語的出現的概率,而Skip-Gram與之相反,利用中心詞語來預測上下文的概率。在訓練的最開始,給每個單詞都設置一個隨機的K維One-hot-Representation向量作為輸入數據,經過CBOW或者Skip-Gram模型進行訓練后,可以得到每個單詞的最合理的n維Dis?tributed Representation向量。
CBOW最主要的思想是利用上下文來猜測中心詞語出現的概率。(如圖1所示)設定w(t)為要預測的詞語,設置窗口大小為2,輸入層輸入的數據為w(t)上下的兩個詞語w(t-2)、w(t-1)、w(t+1)、w(t+2)四個詞語,隱層的SUM為輸入層輸入數據的累加和,輸出層對應了一棵Huffman樹。

圖1 CBOW模型
圖1 CBOW模型設窗口長度為2,中心詞如圖3所示移動,藍色區域為中心詞,灰色區域為中心詞的上下文。假設輸入詞為input,預測的詞為label,每一次訓練的樣本為(input,label)。對于CBOW模型,每移動一次中心詞,可以產生一個訓練樣本,如圖2所示,中心詞移動了四次,產生了四個樣本,分別為([great,was],nothing),([nothing,was,ever],great),([nothing,great,ever,achieved],was),([great,was,achieved,without],ever)。本文使用CBOW模型,通過訓練得到詞語的上下文信息,根據兩種語言詞語共同出現的概率(共現度)判斷是否為對照翻譯的詞語。

圖2 訓練樣本
首先通過網絡爬蟲技術收集英語及漢語語料各約二百萬條語句,這些語句包含日常生活的方方面面。對語料庫進行分詞處理,將語句段落分解成一個個詞語。英語的分詞較為簡單,因為英語的詞與詞之間是靠空格隔開的,進行英語分詞的時候只需要根據空格和英語符號進行分詞,再去除英語的停用詞就行。而中文的語句是以字為單位,一個個字連起來組成了有意義的詞語和句子。例如,英語中的句子“I am a fresh graduate of Xinjiang University”,翻譯成中文就是:“我是新疆大學的應屆畢業生”。計算機可以很輕易地通過空格就分析出graduate是一個單詞,但是卻很難理解“畢”、“業”、“生”三個字組合起來才是一個詞語。把漢語的語句切分成人類可以識別出的有意義的詞語,就是中文分詞?!拔沂切陆髮W的應屆畢業生”這句話的正確分詞結果是:“我”“是”“新疆大學”“的”“應屆”“畢業生”。
為了進行中文的分詞,本文使用了優秀的中文分詞工具“jieba分詞”,結巴分詞支持多種分詞方式,分詞效果十分理想。其對漢語中的所有詞語構建了一個詞典,每一個詞語都有三個重要屬性:詞語、詞頻和詞性。當對一個文本進行分詞的時候,會根據詞典中詞語的詞頻和詞性進行分詞,詞頻越高被判定為一個詞語的幾率越高。也可以根據需要自己構建詞典,以滿足特定的需要。對二百萬條漢語語料進行分詞處理之后,需要進行去停用詞操作。停用詞(Stop Words)是在進行文本檢索或者搜索引擎索引的時候為了提高效率而進行忽略操作的某些字、符號或詞語。本文為了完成漢語的去停用詞的操作,設計了一個擁有1893個停用詞的漢語停用詞表,基本滿足需要。分詞之后的大多數詞語都是沒有實際意義的停用詞,停用詞跟任何詞語的共現度都很高,對基于詞語共現度進行詞向量生成的Word2Vec來說,會嚴重影響詞向量的準確率,所以去除停用詞必不可少。
進行英文分詞雖然比較簡單,但是還是有很多值得注意的地方:
(1)需要將所有的英語語句中的大寫字母轉換為小寫,因為具有大寫字母的詞語雖然在詞義上和小寫的相同,但是在訓練模型中會被認成兩種詞語,影響訓練的效果。
(2)本文使用的英語語料由語句和段落組成,會出現很多不同形態的詞語,例如名詞的單復數形式,動詞的進行時、過去式、被動形式、形容詞的比較級等。這些詞語的語義相同,形態不同,會被當成不同的詞語進行處理,但中文中并沒有形態的困擾,不同形態的英文單詞只有一個形態的中文翻譯結果。需要對不同形態的詞語進行詞形還原處理,將所有的詞語轉換為原形,提高訓練的準確率。本文使用“NLTK”作為詞形還原處理工具,全稱為Natural Language Toolkit。是一套基于Python的自然語言處理工具集。NLTK進行詞形還原的時候根據不同的詞語類型進行操作,例如名詞、動詞、形容詞等。詞形還原處理示例如表1所示。

表1 詞形還原表
不同詞性詞語經過對應的詞形還原后,可以得到符合要求的詞語。NLTK具有詞性標注功能,可以識別不同單詞的詞性,再根據詞性調用對應的接口將詞語處理為原形。
(3)英文分詞處理。利用每個詞語之間的空格和符號將每個詞語分割出來,然后設計一款英語停用詞表,去除分詞后英語語料中的停用詞。英語停用詞包括冠詞(a,an,the)、介詞(in,on,from,above,behind)、連詞(and,but,before)、感嘆詞(oh,well)、代詞(who,she,you,it)還有英語的標點符號等。與漢語情況相同,這些停用詞在每一句英語句子中幾乎都有,卻并沒有有效的含義,會嚴重影響詞向量和共現詞語的準確率,必須要去除掉。本文設計的英語停用詞表包含891個停用詞,在實際的使用中表現良好。
將處理好的漢語和英語的分詞結果交叉合并為一個語料庫,此語料庫中都是本文需要的漢語及英語詞語。合并后的語料庫如圖3所示。

圖3 雙語分詞語料庫
本文使用Word2Vec中的CBOW模型進行訓練。深度學習框架使用TensorFlow,TensorFlow由谷歌公司研發,可以應用于語音識別,自然語言處理,計算機視覺等多項深度學習領域。提供Python接口,能夠使多個CPU和GPU協同工作,具備很好的靈活性和可擴展性,支持異構設備的分布式計算,能夠支持CNN、RNN、LSTM等算法,是一款相當優秀的深度學習框架。本文的詞向量訓練過程分為以下幾步:
(1)讀取經過分詞和去停用詞處理的漢英雙語語料庫,作為訓練語料。該語料庫中總共有27495541個詞語。
(2)統計每一個詞語的頻率。取用頻率最高的前40萬個詞語,對每一個詞語設置一個索引。根據統計結果,出現頻率在2以上的詞語有331090個,頻率最高詞語的頻率為137890。如表2所示:頻率代表的是每個詞語出現的次數,個數代表的是大于這個頻率的總共有多少個詞語。

表2 詞語頻率及出現個數
(3)為CBOW模型創建一個批處理函數來量化訓練樣本的大小及范圍。
(4)構造基于TensorFlow的CBOW的計算圖,其核心是定義計算損失(loss)的公式以及計算中使用的優化方法。
(5)開啟會話,運行構造好的計算圖,對模型進行訓練。
(6)在最后一次訓練完后,將得到的模型保存起來,以待下一次的調用。
(7)根據訓練好的雙語詞向量,使用sklearn的TSNE對詞向量進行降維處理,對降維數據以圖像形式直觀地展示(如圖4所示),其中語義相近(包括近義詞和互譯詞)的詞語相對位置較近。

圖4 詞向量降維后詞語位置
(8)加載訓練好的詞向量模型,使用頻率最高的三十萬個單詞作為輸入,得到對應的翻譯結果,并進行保存。當輸入是漢語詞語后,只保存對應的英語翻譯詞語,當輸入的英語詞語時,只保存對應的漢語翻譯詞語。之后使用一個標準的漢英詞典與本文構建的詞典進行對比,只保留互為翻譯的漢英詞對。得到的結果就是本文構建成功的漢英雙語詞典,如圖5所示。

圖5 雙語詞典
基于Python中的pyqt5模塊做的一個圖形操作界面,對其輸入框輸入想要翻譯的詞語(無論是漢語還是英語詞語),可以得到對應的翻譯結果(如圖6所示)。

圖6 雙語詞典應用界面
已構建的漢英雙語詞典中漢語和英語詞語按照訓練時詞語出現頻率的順序由上至下排列,一個詞語占一行空間,每一行的第一個詞語是訓練時的詞語,后面跟隨多個訓練出來的翻譯詞語。如圖7所示:第一行中的“UNK”代表頻率排名4萬名以后的詞語。

圖7 漢英對照翻譯詞對
圖7 中每個詞語訓練后的翻譯結果有多個,但是真實的翻譯情況只包含其中的一個或者多個結果,可以看出頻率排名較高的詞語翻譯結果比較優秀,誤差不大。
為了研究出使用詞向量構建出的漢英雙語詞典的翻譯結果的準確率,本文使用一個標準的嚴格互譯的漢英詞典與其進行對比,推算出其翻譯的準確率。
本文選取的標準互譯的漢英詞典如圖8所示。詞典按照a-z的順序依次排列,前半部分是7880個單詞,后半部分是359個短語,共8239個詞語。但由于本文使用的雙語語料庫中只包含單詞,沒有短語,所以真正能用的只有前半部分的7880個單詞。

圖8 標準英漢詞典
本文使用詞向量方案構建的漢英雙語詞典與標準互譯的漢英詞典進行對比,得出如下結果(如圖9所示)。

圖9 不同詞頻的翻譯情況
對比后結果顯示互相翻譯的詞語共有5046對。相較于標準漢英詞典的7880個單詞,已經比較符合預期。因為每一種詞頻的單詞,其單詞數目不一,于是本文根據詞頻的順序排列,每100個單詞,計算一次準確率。如圖8所示,X軸表示單詞的相對順序位置,X軸的數值越大,單詞的頻率越小,軸上的數字表示條形的多少,每100個單詞顯示一個條形;Y軸表示這100個單詞中正確翻譯的數目。由圖可以看出訓練時出現頻率越高的詞語,其訓練的翻譯結果就越準確。
本文提出的基于深度學習構建雙語詞典的方案,可以減少人工成本,提高構建的速度。無論是構建基于新語言的雙語詞典,還是提煉網絡和生活中出現的新鮮詞語,都可以在使用收集語料的基礎上,使用深度學習的方法自動完成雙語詞典的初步構建。構建出的詞典與實際翻譯結果會有一定的誤差,但可以作為一種參考或雙語詞典的初始版本,經過專業編纂人員的校對和補充后,完成準確、可信的雙語詞典最終版本。針對網絡和生活中新出現的詞語,只需要利用網絡爬蟲技術爬取近些年互聯網中的語料信息,使用本文方案便可以得出對應的英語翻譯結果和近義詞,可幫助專業人員研究新詞的含義和演變過程。