在天然語言處理領域,文本表示學習技術能夠幫助咱們將現實世界轉化爲計算機能夠處理的數據,以求更精準地創建學習模型。而在中文搜索場景下,同音詞、易混詞、錯別字等文本的召回和類似度匹配一直存在着棘手的問題,本文將嘗試從圖計算的角度來進行中文詞向量的訓練,並取得了積極的效果,但願與你們一同分享交流。文章做者:翟彬旭,騰訊雲大數據高級研發工程師。
在中文搜索場景下,同音詞、易混詞、錯別字等文本的召回和類似匹配是一個常見且棘手的問題。NLP(天然語言處理)社區對文本的匹配和召回已經經歷從早期的基於分詞和倒排索引的全文檢索過渡到現在流行的文本向量檢索。node
向量檢索經過訓練和學習文本的分佈式表徵獲得文本向量,能夠解決倒排索引沒法解決的語義類似度匹配問題,並且針對高維向量的大規模快速檢索在業界已經有至關成熟的解決方案,如Faiss、Nmslib等。web
但目前業內經常使用的表示學習方法不多考慮中文場景下因爲輸入法輸入錯誤、發音問題等致使的文本類似匹配問題。算法
例如,在筆者所在的騰訊雲企業畫像產品研發過程當中,就常常遇到相似的需求。當用戶在咱們的產品中搜索「騰迅科技集團股份有限責任公司」時,此時用戶但願搜索的企業工商註冊名稱應該是「騰訊科技(深圳)有限公司」,但因爲輸入法錯誤(將「騰訊」錯輸爲「騰迅」)、認知錯誤(將「有限責任公司」誤認爲「集團股份有限責任公司」)等緣由,致使用戶輸入沒法匹配到想要的搜索結果,甚至出現OOV的狀況(「騰迅」可能不在詞表中)。網絡
如何在無需過多考慮語義類似度的前提下解決中文詞形學表示學習的問題是本文討論的重點話題。架構
在統計學習模型中,使用詞嵌入(Word Embedding)完成天然語言處理任務,是NLP領域裏的一項關鍵技術。常見的詞嵌入(又稱爲文本表徵)訓練方法及主要特色以下圖所示。框架
圖1. 文本分佈式表徵方法概覽分佈式
早期的詞嵌入研究主要包括One-hot編碼、TF-IDF等詞袋模型。詞袋模型(Bag of Words, BOW)是指忽略文檔的語法和語序等要素,將文檔僅僅當作是若干無序單詞的集合,而且每一個詞都是獨立的。ide
這些方法都屬於離散表示法,當詞彙表龐大時,會佔用很大的存儲空間,詞彙表的大小決定了向量的維度大小,存在維數災難問題。此外,這類方法沒法經過任何計算獲得詞語之間的類似度,所以詞向量之間不存在關聯關係。學習
鑑於詞袋錶示法存在維度災難、語義鴻溝的問題,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 效果
其中,三種遊走方式的參數設置以下,除遊走採樣設置不一樣外,其餘輸入數據、嵌入學習參數均相同:
從實驗對比效果能夠發現,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