在自然語言處理領域,文字表示學習技術可以幫助我們將現實世界轉化為計算機可以處理的資料,以求更精準地建立學習模型。而在中文搜尋場景下,同音詞、易混詞、錯別字等文字的召回和相似度匹配一直存在著棘手的問題,本文將嘗試從圖計算的角度來進行中文詞向量的訓練,並取得了積極的效果,希望與大家一同分享交流。文章作者:翟彬旭,騰訊雲大資料高階研發工程師。
一、技術背景
在中文搜尋場景下,同音詞、易混詞、錯別字等文字的召回和相似匹配是一個常見且棘手的問題。NLP(自然語言處理)社群對文字的匹配和召回已經經歷從早期的基於分詞和倒排索引的全文檢索過渡到如今流行的文字向量檢索。
向量檢索通過訓練和學習文字的分散式表徵得到文字向量,可以解決倒排索引無法解決的語義相似度匹配問題,而且針對高維向量的大規模快速檢索在業界已經有相當成熟的解決方案,如Faiss、Nmslib等。
但目前業內常用的表示學習方法很少考慮中文場景下由於輸入法輸入錯誤、發音問題等導致的文字相似匹配問題。
例如,在筆者所在的騰訊雲企業畫像產品研發過程中,就經常遇到類似的需求。當使用者在我們的產品中搜尋“騰迅科技集團股份有限責任公司”時,此時使用者希望搜尋的企業工商註冊名稱應該是“騰訊科技(深圳)有限公司”,但由於輸入法錯誤(將“騰訊”錯輸為“騰迅”)、認知錯誤(將“有限責任公司”誤認為“集團股份有限責任公司”)等原因,導致使用者輸入無法匹配到想要的搜尋結果,甚至出現OOV的情況(“騰迅”可能不在詞表中)。
如何在無需過多考慮語義相似度的前提下解決中文詞形學表示學習的問題是本文討論的重點話題。
二、詞嵌入訓練的演進
在統計學習模型中,使用詞嵌入(Word Embedding)完成自然語言處理任務,是NLP領域裡的一項關鍵技術。常見的詞嵌入(又稱為文字表徵)訓練方法及主要特點如下圖所示。
圖1. 文字分散式表徵方法概覽
早期的詞嵌入研究主要包括One-hot編碼、TF-IDF等詞袋模型。詞袋模型(Bag of Words, BOW)是指忽略文件的語法和語序等要素,將文件僅僅看成是若干無序單詞的集合,並且每個詞都是獨立的。
這些方法都屬於離散表示法,當詞彙表龐大時,會佔用很大的儲存空間,詞彙表的大小決定了向量的維度大小,存在維數災難問題。此外,這類方法無法通過任何計算得到詞語之間的相似度,因此詞向量之間不存在關聯關係。
鑑於詞袋錶示法存在維度災難、語義鴻溝的問題,Yoshua Bengio等人在[1]中證明使用神經網路訓練的語言模型可以生成更好的詞向量,並且提出了很多優化訓練的方法。
如下圖所示,整個網路分為兩部分,第一部分是利用詞特徵矩陣C獲得詞的分散式表示(即詞嵌入)。第二部分是將表示context的n個詞的詞嵌入拼接起來,通過一個隱藏層和一個輸出層,最後通過softmax輸出當前的p(wt|context)(當前上下文語義的概率分佈,最大化要預測的那個詞的概率,就可以訓練此模型)。
這一模型框架不但訓練了一個用神經網路表示的語言模型,而且作為語言模型的副產物還獲得了詞語的詞嵌入(存在矩陣C中)。
圖2. 經典的自然語言模型(Bengio et al., 2003)
經典語言模型的訓練存在計算量大的問題(主要集中在隱含層到輸出層的全連線層以及輸出層的softmax計算上),具體實現較為困難,針對這些問題,Mikolov等人[2,3]在語言模型的基礎上進行了簡化並給出了Cbow和skip-gram兩種架構的word2vec模型,同時在具體學習過程中可以採用兩種降低複雜度的近似方法——Hierarchical Softmax和Negative Sampling。
如下圖所示,這種架構大大簡化了計算量。不過,word2vec訓練出來的詞向量與單詞是一對一的靜態對映關係,一詞多義問題沒有解決。
圖3. word2vector模型結構
為了解決一詞多義問題,ELMO模型[4]被提出來,它通過語言模型進行學習,得到一個詞嵌入表示,在實際使用詞嵌入時,根據上下文單詞的語義再去調整單詞的詞嵌入表示,從而使得單詞在不同的上下文語境得到不同的詞嵌入表示。
網路結構採用雙向LSTM網路。其中前向雙層LSTM和逆向LSTM分別代表正方向和反方向編碼器,輸入分別是單詞的上文和下文。一個句子輸入到訓練好的網路中,最終將得到每個單詞三個不同的嵌入表示:雙向LSTM中的兩層詞嵌入表示以及單詞的詞嵌入表示。其中雙向LSTM中的兩層詞嵌入表示分別編碼了單詞的句法資訊和語義資訊。在做實際任務時,網路中單詞對應的詞嵌入表示將被提取出來作為新特徵補充到實際任務中去。
ELMO根據上下文動態調整後的embedding不僅能夠找出對應的相同語義的句子,而且還可以保證找出的句子中的同義詞對應的詞性也是相同的。不過,ELMO使用LSTM提取特徵的能力不如後來的Transformer,其雙向語言模型採取的是用簡單的拼接來融合特徵,一體化特徵融合表現欠佳。
圖4. ELMO模型示意圖
BERT[5]作為動態詞嵌入表示學習的集大成者,是一種雙向融合特徵的模型。
BERT提出兩個任務:MLM(Masked Language Model)和NSP(Next Sentence Predict)。前者是詞級別的,其採取的方法是,隨機擋住15%的單詞,讓模型去預測這個單詞,能夠訓練出深度的雙向詞嵌入向量表示;後者是句子級別的,也是一個二分類任務,其採取的方法是,將兩個句子的序列串連作為模型的輸入,預測後一句是否是前一句文字的下文,這一方法能夠學習句子之間的關係,捕捉句子級別的表示。因此BERT得到的詞嵌入表示融入了更多的語法、詞法以及語義資訊,而且動態地改變詞嵌入也能夠讓單詞在不同的語境下具有不同的詞嵌入。
不過,BERT 對資料規模要求較高,如果沒有足夠大的語料,則很難達到預期的效果;其計算量很大,所需成本較高。
圖5. BERT模型結構示意圖
目前已經存在的主要詞向量模型都是基於西方語言,這些西方語言的內部組成都是拉丁字母,然而,由於中文書寫和西方語言完全不同,中文詞語存在同音字、錯別字等場景,而且中文字元內部的偏旁部首以及發音也包含了很強的語義資訊,因此,如何有效利用中文字元內部的語義資訊來訓練詞向量,成為近些年研究的熱點[6,7,8]。
這裡的典型代表是2018年螞蟻金服提出的基於中文筆畫的cw2vec模型[6]。文中將中文筆畫劃分為5類,類似於fasttext[9]的思想,每個詞語使用n-gram 視窗滑動的方法將其表示為多個筆畫序列。每個 gram 和詞語都被表示成向量,用來訓練和計算他們之間的相似度。為了簡化計算文中也採用了負取樣的方法,實驗也取得了良好的效果。
圖6. cw2vec模型示意圖
三、存在的問題及解決方案
從以上相關工作可以看出,當前主要的詞嵌入表徵學習方法主要集中在從文字語料的上下文語義角度學習詞嵌入,對於其他角度如中文詞形學角度的研究較少。採用這些方法訓練學習得到的詞向量,即使在中文編輯距離較近、發音相同的詞語,在詞嵌入空間的距離也相差甚遠。
例如,以騰訊AILab釋出的百萬詞向量為例,該版詞向量模型可以較好地捕捉中文詞語間的語義相似度,但對於子詞和同音字的相似度量場景,效果欠佳,如下圖所示。
圖7. 詞向量相似度計算示例
在無需過多考慮語義相似度的前提下,本文提出從圖計算的角度訓練學習文字的向量表徵,解決中文詞形學相似匹配的問題。演算法基本原理如下。
將常用漢字及業務場景下的詞庫構建無向帶權圖:每個詞語和漢字作為圖中一個節點,同時加入子詞和拼音節點,依次在圖中的“詞語-子詞-單字-拼音”節點間建立連邊(如圖8所示),根據字詞之間在拼音和構成上的編輯距離(此處可根據業務需求靈活設定,亦可直接單獨訓練權重模型)為節點之間的連邊賦予權重。
特別地,本文重點在同音字、平舌音、翹舌音以及子詞序列等型別的節點間建立了連邊,以保證同音字、易混字在圖中可達,同時子詞(subword)的引入在一定程度上保留了文字的語序特徵。而後採用node2vec或metapath2vec等skip-gram類模型學習得到各節點的向量表示,以此作為字元的分散式表徵。
圖8. 構圖示例
在遊走方式的選擇上,對於當前業內主要的學習方法,如deepwalk[10]、node2vec[11]、Line[12]、metapath2vec[13]等演算法,考慮到這裡構造的圖是帶權圖,故而不宜採用deepwalk,而圖中的節點關聯需要考慮二度以上聯絡,故不宜採用Line,所以本文重點對比node2vec和metapath2vec演算法在嵌入效果上的差異。
對於未登入詞,可以採用類似FastText的方法將未登入詞的單字向量求平均得到,如果單字也是未登入詞則採用拼音節點的詞向量代替。這種方式可以獲得較高質量的詞嵌入,使得詞形上接近的單詞在詞嵌入空間也擁有較高的相似性,同時由於拼音和子詞節點的加入,大大緩解了OOV(Out Of Vocabulary)的問題。
簡而言之,演算法主要步驟包括以下部分:構建圖 —> 隨機遊走取樣 —> 訓練詞嵌入。
以上就是對於騰訊自研的中文詞形表示學習演算法 AlphaEmbedding 的完整介紹。AlphaEmbedding 從圖計算的角度重點解決針對中文場景下的分散式詞表徵學習問題,使得學習到的詞向量在中文詞形學角度相近的詞語在向量空間中也擁有較近的距離。
四、實驗結果
實驗資料採用全量國內工商註冊企業名稱(約2.2億家),對企業名稱進行名稱分割(這裡由於業務需要,已經開發了一個可用的BERT-CRF序列標註模型),針對name欄位清洗、過濾、去重後構建圖。輸入資料示例如下圖所示:
圖9. 名稱分割示意圖
構建圖部分採用Pyspark實現,形成的圖的規模包含千萬節點、億級邊,隨機遊走和詞嵌入訓練採用WXG開源的plato計算框架在騰訊雲EMR叢集進行,在20個節點進行隨機遊走約用時1分鐘左右,進行節點嵌入學習約耗時2小時左右。構建的帶權圖效果如下圖所示:
圖10. 構建的無向帶權圖示例
在具體構圖的實現方面,本文對比了兩種實現方法:最初基於全稱的排列組合,僅考慮同音詞和子詞在節點間建立連邊,每個漢位元組點最短兩個字,拼音節點為對應漢字詞語節點的拼音,我們稱這種方法為combination style,其構圖方式示意圖如下圖所示。
圖11. combination style 構圖示例
採用node2vec進行訓練學習,以業務中常用的詞語相似度排序為例,實驗結果如下(檢索詞為“騰訊”,已在圖中標紅顯示):
圖12. combination style 效果
combination style 在業務應用中存在較多 OOV 的情況,之後採用更為簡潔的“詞語-子詞-單字-拼音”構圖方式(如圖8所示),我們稱之為fasttext style,並在節點嵌入學習中分別嘗試了node2vec和metapath進行訓練。這裡仍以業務中常用的詞語相似度排序為例,實驗結果如下:
圖13. fasttext style + node2vec 深度優先搜尋效果
圖14. fasttext style + node2vec 寬度優先搜尋效果
圖15. fasttext style + metapath2vec 效果
其中,三種遊走方式的引數設定如下,除遊走取樣設定不同外,其他輸入資料、嵌入學習引數均相同:
-
node2vec 深度優先:p=100, q=0.2, step=5, epoch=30
-
node2vec 寬度優先:p=100, q=5, step=5, epoch=30
-
metapath2vec:meta="3-2-1-0"(詞語-子詞-單字-拼音), step=5, epoch=30
-
word2vec: learning_rate=[(linear, 0.02, 0.0001)], window_size=5, epoch=20
從實驗對比效果可以發現,combination style 的構圖方式由於僅考慮庫內詞表的排列組合,圖的規模最小(一千萬節點),與檢索詞之間距離最近的都是同音詞,但同音詞間的排序未考慮單字構成上的相似度,拼音節點作為相似度排序的分界點,之後的子詞節點相似度急劇下滑,總體效果相對欠佳。
metapath2vec 獲得的詞表規模相比 combination style 大但比 node2vec 小(兩千多萬節點),相似詞語更偏好子詞節點,且各近鄰詞語間的區分度較差。
這一結果可能與遊走方式有關,一方面,metapath定義的遊走方式較為固定,若僅採用“詞語-子詞-單字-拼音”的方式進行遊走,實際業務圖上存在較多詞語(二字詞語)沒有子詞而只能連線單字的場景(此時對應的metapath應該為“詞語-單字-拼音”),這些metapath在取樣時就會丟失,造成節點取樣失衡,另一方面由於子詞節點在遊走過程中始終同詞語節點共現,所以子詞節點的相似度整體相對較高。由於metapath2vec 訓練結果區分度差的特性,使得獲得的詞嵌入在下游任務中的表現並不理想。
node2vec 深度優先搜尋和寬度優先搜尋效果接近,二者獲得的詞表規模相同(近三千萬節點),針對特定檢索詞返回的排序結果也很接近。
相對而言,深度優先搜尋獲得的結果可以匹配到編輯距離更大的子詞,模型的容錯邊界被外推到更大的範圍;寬度優先搜尋獲得的近鄰詞語間的區分度更加平滑,對下游任務的應用更加友好。而對於編輯距離相同的子詞對,由於都考慮了n-gram詞序資訊,兩種搜尋方式返回的子詞對的相對排序也基本相同。
整體而言,相對於上面提到的兩種構圖和遊走方式,node2vec 模型獲得的詞向量效果相對更好,且寬度優先搜尋的結果更符合業務需求。
五、總結
本文回顧了NLP領域當前主要的文字分散式表示學習方法,針對中文搜尋場景下同音詞、易混詞等文字的相似匹配問題,嘗試從圖計算的角度提出一種詞向量訓練方法,使得模型學習到的詞向量在中文詞形學角度相近的詞語在向量空間中也擁有較近的距離。
通過對比 combination style 和 fasttext style 兩種不同的構圖方式以及 node2vec 深度優先、node2vec 寬度優先和 metapath2vec 三種不同的邊取樣方法得到的詞嵌入在業務應用中的效果,探索了圖計算在文字表示學習中的應用,為提升業務效果提供了積極的幫助。
目前這一工作已經應用於騰訊雲企業畫像產品搜尋業務中。未來我們會在相關方面進行更多嘗試和探索,例如考慮加入筆畫對單字構造建模,以期藉此提升錯別字的相似匹配效果;考慮採用GCN/GraphSAGE/GAT等圖神經網路建模,以期提升詞嵌入質量等,也歡迎業內同學提供更多思路,批評指正。
參考文獻:
[1] Bengio, Y., Ducharme, R., Vincent, P., & Janvin, C. (2003). A Neural Probabilistic Language Model. The Journal of Machine Learning Research, 3, 1137–1155.
[2] Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality[C]//Advances in neural information processing systems. 2013: 3111-3119.
[3] Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.
[4] Peters M E, Neumann M, Iyyer M, et al. Deep contextualized word representations[J]. arXiv preprint arXiv:1802.05365, 2018.
[5] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
[6] Cao S, Lu W, Zhou J, et al. cw2vec: Learning chinese word embeddings with stroke n-gram information[C]//Thirty-second AAAI conference on artificial intelligence. 2018.
[7] Yin R, Wang Q, Li P, et al. Multi-granularity chinese word embedding[C]//Proceedings of the 2016 conference on empirical methods in natural language processing. 2016: 981-986.
[8] Xu J, Liu J, Zhang L, et al. Improve chinese word embeddings by exploiting internal structure[C]//Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. 2016: 1041-1050.
[9] Joulin A, Grave E, Bojanowski P, et al. Bag of tricks for efficient text classification[J]. arXiv preprint arXiv:1607.01759, 2016.
[10] Perozzi B, Al-Rfou R, Skiena S. Deepwalk: Online learning of social representations[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. 2014: 701-710.
[11] Grover A, Leskovec J. node2vec: Scalable feature learning for networks[C]//Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. 2016: 855-864.
[12] Tang J, Qu M, Wang M, et al. Line: Large-scale information network embedding[C]//Proceedings of the 24th international conference on world wide web. 2015: 1067-1077.
[13] Dong Y, Chawla N V, Swami A. metapath2vec: Scalable representation learning for heterogeneous networks[C]//Proceedings of the 23rd ACM SIGKDD international conference on knowledge discovery and data mining. 2017: 135-144.
看騰訊技術,學雲端計算知識,就來雲+社群: https://cloud.tencent.com/developer