如何讓機器理解漢字一筆一畫的奧秘?
背景介紹
從智能客服到機器翻譯,從文本摘要生成到用戶評論分析,從文本安全風控到商品描述建模,無不用到自然語言技術(shù),作為人工智能領(lǐng)域的一個重要分支,如何讓機器更懂得人類的語言,尤其是漢字這種強表意文字,是一個具有極大挑戰(zhàn)的事情。
詞向量,是一種利用無監(jiān)督學(xué)習(xí)方式(不需要人工數(shù)據(jù)標注),將詞語映射到語義向量空間的技術(shù)。舉個例子:在過去,計算機使用下標表示詞語,比如“貓: 2123”,“狗: 142”,由于下標不一樣,機器就只會認為是不同的詞語,卻不能像人一樣感知詞語間的語義關(guān)系。而詞向量技術(shù)恰好彌補了這一點,使機器可以理解潛在的語義信息。實際上,現(xiàn)在很多自然語言處理的算法都是將其作為輸入,進而建立端到端的算法模型。因此,設(shè)計出高質(zhì)量的詞向量生成算法是一個值得探討的問題。
中文經(jīng)過幾千年的發(fā)展和演變,是一種強表意文字,對于我們而言,即使某個字不認識,都或許可以猜到其含義,機器卻很難理解這些。比如,“蘒”這個字我們很可能不認識,但里面有“艸”字頭,和“禾”木旁,那它也許就是長得像該字右下角部分的某種植物吧。通過詞向量的方式,我們希望讓機器能夠理解漢字一筆一畫之間的奧秘。然而,傳統(tǒng)的算法并不能很好的利用中文語言學(xué)上的特性,這篇文章里,我們將提出一種利用筆畫信息來提高中文詞向量的方法。
詞向量算法是自然語言處理領(lǐng)域的基礎(chǔ)算法,在序列標注、問答系統(tǒng)和機器翻譯等諸多任務(wù)中都發(fā)揮了重要作用。詞向量算法最早由谷歌在2013年提出的word2vec,在接下來的幾年里,經(jīng)歷不斷的改進,但大多是只適用于拉丁字符構(gòu)成的單詞(比如英文),結(jié)合中文語言特性的詞向量研究相對較少。
相關(guān)工作:
早在1954年,語言學(xué)家Harris提出“Distributional Hypothesis [1](分布式假設(shè))”:語義相似的單詞往往會出現(xiàn)在相似的上下文中。這一假設(shè)奠定了后續(xù)各種詞向量的語言學(xué)基礎(chǔ),即用數(shù)學(xué)模型去刻畫單詞和其上下文的語義相似度。Bengio et al., 2003 [2] 提出了NNLM(基于神經(jīng)網(wǎng)絡(luò)的語言模型),由于每次softmax的計算量很大(分母項的計算時間復(fù)雜度O(|V|),V是全詞表),相繼出現(xiàn)了很多快速近似計算策略。
為了解決上述問題,谷歌提出了word2vec [3,4] 算法,其中包含了兩種策略,一種叫做Negative Sampling(負采樣),另一種是hierarchical softmax(層次softmax)。Negative Sampling的核心思想:每次softmax計算所有單詞太慢,那就隨機的選幾個算一算好了,當然,訓(xùn)練語料中出現(xiàn)次數(shù)越多的單詞,也就越容易被選中;而Hierarchical Softmax,簡單來說,就是建一棵樹狀的結(jié)構(gòu),每次自上而下的從根計算到葉子節(jié)點,那么就只有對數(shù)時間復(fù)雜度了!如何構(gòu)建這棵樹可以使得讓樹的高度盡量小呢?哈夫曼樹。
詞向量模型的核心是構(gòu)造單詞與其上下文的相似度函數(shù),word2vec工具包里面有兩種實現(xiàn)方式,分別是skipgram和cbow。
圖 1 SGNS算法示意圖
假設(shè)當前單詞w是“cat”,而上下文單詞c是“sat”,算法的目標是給定w***化c出現(xiàn)概率(skipgram)。在這個算法中,每個單詞都被當作一個整體,利用外部的上下文結(jié)構(gòu)信息去學(xué)習(xí)得到詞向量。
那么是否可以充分結(jié)合單詞內(nèi)部結(jié)構(gòu)的(亞詞)信息,將其拆分成更細粒度的結(jié)構(gòu)去增強詞向量?英文中每個單詞所包含的character(字母)較多,每個字母并沒有實際的語義表達能力。對于中文詞語而言,中文詞語可以拆解成character(漢字)。
Chen et al., 2015 [5] 提出了CWE模型,思路是把一個中文詞語拆分成若干漢字,然后把原詞語的向量表示和其中的每一個漢字的向量表示做平均,然后作為新的詞語向量。
圖 2 CWE模型示例
在該算法中,“智能”是一個上下文詞語,先拆解成兩個漢字“智”和“能”,然后計算出新的詞語向量表示;同理,上下文詞語“到來”也得到重新計算。CWE保持當前詞語不拆分,這里“時代”保持不變。
不難想到,將漢字拆分成偏旁或許是一種不錯的方式,Sun et al., 2014 [6]和Li et al., 2015 [7] 做過相關(guān)的研究。然而偏旁只是漢字的一部分,Yu et al., 2017 [8] 提出了更加細化的拆分,根據(jù)人工總結(jié)的“字件”,將漢字拆成一個一個的小模塊,把詞、漢字和字件一起進行聯(lián)合學(xué)習(xí):
圖 3 JWE算法示意圖
其中,w , c和s分別表示詞語、漢字和字件模塊。字件粒度的拆分也取得了超過僅僅利用偏旁信息的方法。
此外,Su and Lee, 2017 [9] 提出了GWE模型,嘗試從漢字的圖片中利用卷積自動編碼器來提取特征:
圖 4 GWE卷積神經(jīng)網(wǎng)絡(luò)提取特征示意圖
從漢字圖片提取出特征之后,再結(jié)合上下文結(jié)構(gòu)信息學(xué)習(xí)中文詞向量。很遺憾的是,根據(jù)其原文的描述,這種方式得到的特征基本沒有提升,不過這確實是非常有意思的一次試探。
問題與挑戰(zhàn):
自然語言處理的***會議ACL 2017,共提出了未來的四大研究方向,如何更好的利用“亞詞”信息就是其中的一個。在中文詞向量場景下,僅將中文詞語拆解到漢字粒度,會一定程度上提高中文詞向量的質(zhì)量,是否存在漢字粒度仍不能刻畫的情況?
圖 5 漢字粒度拆解
可以看出,“木材”和“森林”是兩個語義很相關(guān)的詞語,但是當我們拆解到漢字粒度的時候,“木”和“材”這兩個字對比“森”和“材”沒有一個是相同的(一般會用一個下標去存儲一個詞語或漢字),因此對于這個例子而言,漢字粒度拆解是不夠的。我們所希望得到的是:
圖 6 更細粒度的亞詞信息拆解
“木”和“材”可以分別拆解出“木”和“木”(來源于“材”的左半邊)結(jié)構(gòu),而“森”和“林”分別拆解得到多個“木”的相同結(jié)構(gòu)。此外,可以進一步將漢字拆解成偏旁、字件,對于以上例子可以有效提取出語義結(jié)構(gòu)信息,不過我們也分析到:
圖 7 偏旁和字件結(jié)構(gòu)拆分舉例
可以看出,“智”的偏旁恰好是“日”,而“日”不能表達出“智”的語義信息。實際上,偏旁的設(shè)計是為了方便在字典中查詢漢字,因此結(jié)構(gòu)簡單、出現(xiàn)頻率高變成了首要原則,并不一定恰好能夠表達出該漢字的語義信息。此外,將“智”拆分到字件粒度,將會得到“失”,“口”和“日”三個,很不巧的是,這三個字件也均不能表達其漢字語義。我們需要設(shè)計出一種新的方法,來重新定義出詞語(或漢字)具有語義的結(jié)構(gòu):
圖 8 更細粒度的亞詞信息拆解舉例
這里,“知”是可以表達出“智”語義的模塊,如何得到這樣的亞詞結(jié)構(gòu),并結(jié)合句子上下文設(shè)計模型的優(yōu)化目標,生成出更好的中文詞向量,將是后文要探索的內(nèi)容。
cw2vec模型:
單個英文字符(character)是不具備語義的,而中文漢字往往具有很強的語義信息。不同于前人的工作,我們提出了“n元筆畫”的概念。所謂“n元筆畫”,即就是中文詞語(或漢字)連續(xù)的n個筆畫構(gòu)成的語義結(jié)構(gòu)。
圖 9 n元筆畫生成的例子
如上圖,n元筆畫的生成共有四個步驟。比如說,“大人”這個詞語,可以拆開為兩個漢字“大”和“人”,然后將這兩個漢字拆分成筆畫,再將筆畫映射到數(shù)字編號,進而利用窗口滑動產(chǎn)生n元筆畫。其中,n是一個范圍,在上述例子中,我們將n取值為3, 4和5.
在論文中我們提出了一種基于n元筆畫的新型的損失函數(shù):
圖 10 算法過程的舉例
如上圖所示,對于“治理 霧霾 刻不容緩”這句話,假設(shè)此刻當前詞語恰好是“霧霾”,上下文詞語是“治理”和“刻不容緩”。首先我們將當前詞語“霧霾”拆解成n元筆畫并映射成數(shù)字編碼,然后劃窗得到所有的n元筆畫,根據(jù)我們設(shè)計的損失函數(shù),計算每一個n元筆畫和上下文詞語的相似度,進而根據(jù)損失函數(shù)求梯度并對上下文詞向量和n元筆畫向量進行更新。
為了驗證我們提出的cw2vec算法的效果,我們在公開數(shù)據(jù)集上,與業(yè)界***的幾個詞向量算法做了對比:
圖 11 實驗結(jié)果
上圖中包括2013年谷歌提出的word2vec [2,3] 的兩個模型skipgram和cbow,2014年斯坦福提出的GloVe算法 [10],2015年清華大學(xué)提出的基于漢字的CWE模型 [5],以及2017年***發(fā)表的基于像素和字件的中文詞向量算法 [8,9],可以看出cw2vec在word similarity,word analogy,以及文本分類和命名實體識別的任務(wù)中均取得了一致性的提升。同時,我們也展示了不同詞向量維度下的實驗效果:
圖 12 不同詞向量維度下的實驗結(jié)果
上圖為不同維度下在word analogy測試集上的實驗結(jié)果,左側(cè)為3cosadd,右側(cè)為3cosmul的測試方法。可以看出我們的算法在不同維度的設(shè)置下均取得了不錯的效果。此外,我們也在小規(guī)模語料上進行了測試:
圖 13 小訓(xùn)練數(shù)據(jù)下的實驗結(jié)果
上圖是僅選取20%中文維基百科訓(xùn)練語料,在word similarity下測試的結(jié)果,skipgram, cbow和GloVe算法由于沒有利用中文的特性信息進行加強,所以在小語料上表現(xiàn)較差,而其余四個算法取得了不錯的效果,其中我們的算法在兩個數(shù)據(jù)集上均取得的了***效果。
圖 14 案例分析結(jié)果
為了更好的探究不同算法的實際效果,我們專門選取了兩個詞語做案例分析。***個是環(huán)境相關(guān)的“水污染”,然后根據(jù)詞向量利用向量夾角余弦找到與其語義最接近的詞語。GWE找到了一些和“污”字相關(guān)的詞語,比如“污泥”,“污漬”和“污垢”,而JWE則更加強調(diào)后兩個字“污染”GloVe找到了一些奇怪的相近詞語,比如“循環(huán)系統(tǒng)”,“神經(jīng)系統(tǒng)”。CWE找到的相近詞語均包含“水”和“污”這兩個字,我們猜測是由于其利用漢字信息直接進行詞向量加強的原因。此外,只有cw2vec找到了“水質(zhì)”這個相關(guān)詞語,我們認為是由于n元筆畫和上下文信息對詞向量共同作用的結(jié)果。第二個例子,我們特別選擇了“孫悟空”這個詞語,該角色出現(xiàn)在中國的名著《西游記》和知名日本動漫《七龍珠》中,cw2vec找到的均為相關(guān)的角色或著作名稱。
作為一項基礎(chǔ)研究成果,cw2vec在阿里的諸多場景上也有落地。在智能客服、文本風控和推薦等實際場景中均發(fā)揮了作用。此外,不單單是中文詞向量,對于日文、韓文等其他語言我們也進行類似的嘗試,相關(guān)的發(fā)明技術(shù)專利已經(jīng)申請近二十項。
我們希望能夠在基礎(chǔ)研究上追趕學(xué)術(shù)界、有所建樹,更重要的是,在具體的實際場景之中,能夠把人工智能技術(shù)真正的賦能到產(chǎn)品里,為用戶提供更好的服務(wù)。
論文下載
https://github.com/ShelsonCao/cw2vec/blob/master/cw2vec.pdf
參考資料
1. Harris, Zellig S. "Distributional structure." Word 1954.
2. Bengio, Yoshua, et al. "A neural probabilistic language model." JMLR 2003.
3. Mikolov, Tomas, et al. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013).
4. Mikolov, Tomas, et al. "Distributed representations of words and phrases and their compositionality." NIPS 2013.
5. Chen, Xinxiong, et al. "Joint Learning of Character and Word Embeddings." IJCAI 2015.
6. Sun, Yaming, et al. "Radical-enhanced Chinese character embedding." ICNIP 2014.
7. Li, Yanran, et al. "Component-enhanced Chinese character embeddings." arXiv preprint arXiv:1508.06669 (2015).
8. Yu, Jinxing, et al. "Joint Embeddings of Chinese Words, Characters, and Fine-grained Subcharacter Components." EMNLP 2017.
9. Su, Tzu-Ray, and Hung-Yi Lee. "Learning Chinese Word Representations From Glyphs Of Characters." EMNLP 2017.
10. Pennington, Jeffrey, et al. "Glove: Global vectors for word representation." EMNLP 2014.
【本文為51CTO專欄作者“阿里巴巴官方技術(shù)”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】