1. 程式人生 > >從應用創新的角度再論語義表示

從應用創新的角度再論語義表示

ans 舉例 url cto 創新 target 之前 outlook 歧義

 author:XueQiang Tong mail:[email protected] v:txq130 

先引入一個例子:

  bush這個詞有灌木叢和總統兩個意思。給你一句話,如果其中含有bush這個詞,如何判斷他的語義?

  這是一個經典又古老的nlp話題。解決他的方案,有很多。其中有一個方案是這樣的:在計算bush的上下文與標註語料中出現bush句子的上下文的相似度,如果與總統的上下文相似度高,就是總統的意思,如果與灌木叢的上下文相似度高,就是灌木叢的意思。這個方案最大的特點是計算語義的上下文,這是語義消歧,除此之外,漢語中有很多同義詞,反義詞和近義詞,衡量他們的最好辦法仍然是上下文。那麽在漢語中,會有如下的情況:①相同語境下出現不同的詞②不同的語境下出現相同的詞,這兩種情況在語料中是大量存在的。稍後深入討論這兩種情況對語義表示的影響。

  本文要討論的是,從w2v的核心思想入手,探討他的語義表示在前面提到的兩種情景下會有什麽問題,如何改進然後遷移到句子或者短語語義表示。

  上面提到了通過計算上下文相似度來解決語義問題。那麽問題來了,我們可不可以把上下文的信息融合到詞本身,這樣就可以直接衡量詞的差異了。也就是,用一個稠密的向量(相對於one-hot)把詞本身,語義信息和上下文信息壓縮起來,用以解決此的語義問題。在nlp中,解決語義問題的核心是語言模型,有了語言模型就可以抽象出數學模型。這個問題的語言模型是:相同語境出現的詞語義相近。舉例子:現有一句話由以下詞構成:ABCDE。現在要用一個稠密向量表示C的語義,把他的上下文A、B與D、E融合進來,也就是這樣一個數學公式:A + B + D + E = C。這個公式是一個最簡單的加法,但是要轉化成機器學習的數學模型才能解決問題,這個公式的含義就是輸入上下文,輸出詞分類,是個分類模型,當然也可以倒過來。構建這樣一個分類模型,從中我們要得到詞的語義表示,這是一個variable,同時還要有分類輸出層的參數thelta,一共兩個variable。那麽,這兩個變量應該是什麽關系才能滿足上述語言模型,也就是保證C的上下文是A,B,D,E的前提下獲取到他的語義表示?很顯然,這個過程中,兩個參數絕非是獨立的,必須相互決定相互影響才能滿足這個需求。首先獲取詞的語義表示變量,獲取之後進入到分類層,讓著兩個參數是互為對稱的關系。於是,我們想到,用神經網絡抽取到詞的高階語義表示,然後進行激活,把激活值的輸出作為分類層的輸入,完成模型的構建。說白了,就是現在有一個稠密語義表示的矩陣,這個矩陣就相當於詞典,最初的時候每個詞用one-hot表示,拿到這個one-hot後,到稠密詞典中進行查找,找到對應的稠密向量表示,然後去做分類映射,這是基本的想法。查找的過程屬於典型的矩陣操作(請體會矩陣的本質,以及矩陣分解的意義),這個過程其實是一層神經網絡的操作,然後用y = x激活。

  上面的思考過程很重要。w2v的CBOW和Skip_Gram是兩個非常經典的語言模型。關於他的優化及推導不做具體論述了,比較簡單,現在回歸本文的正題。之前做過siamese lstm的實驗,主要用以解決句子語義相似度的計算,這個方案是2015年提出的,獲得了很高的準確率。但是缺點也很明顯,人工構建語料比較復雜,而且準確率難以確定。監督學習給企業應用帶來不小的困擾,探索非監督學習用以解決句子或者短語的語義表示是一個很重要的嘗試。因為之前word2vector在詞語義表示上已經很成功了,所以沒有必要推倒了重來,我們要做的是在此基礎之上探索。為了探索w2v的語義表示問題,我們不妨從一個經典古老的話題開始:TF-IDF。在深度學習沒有出現之前,他在特征詞抽取上占據主導位置,包括lucene底層的文檔打分也用到他。那麽他有什麽閃光點嗎?在深度學習產生後他是不是沒用了呢?這個方法認為,如果一個詞在一篇文章中出現的頻率高,那麽他就是重要的,同時如果有多篇文章都出現了這個詞,那麽他又是不那麽重要了。事實上,IDF的推導是有樸素貝葉斯簡化來的,也可以用信息熵來理解他,就是平均信息量。現在來探討前面提到的兩種情景。用w2v訓練詞嵌入時,因為他是機器學習模型,有過經驗的人都知道,在機器學習模型訓練中會存在數據傾斜問題。什麽意思呢?以垂直搜索的文檔機器學習排序為例,在listwise產生之前,占據主導的是pairwise,比如用SVM轉化為二分類問題,結果就轉化為了文檔對兒的分類。由於不用的文檔集合文檔對兒數量不一樣,多的會對模型訓練貢獻大,預測時會出現數據傾斜。那麽在w2v訓練時同樣存在這樣的數據傾斜問題。①相同語境下出現不同的詞。比如在訓練語料中,上下文A,B,D,E,中間的詞C,出現了100次,而同樣的上下文情況下,中間的詞F,只出現數次,那麽在訓練時C的語義表示會比F要稠密一些,會與相同的上下文聯系更加緊密。但是,在漢語中,有很對類似於英文中的and,but,no等詞,而且出現的頻率很高,這些詞對句子的語義貢獻是無意義的,於是訓練出來的語義表示會傾向於語義無意義方向。另外,相同的語境下出現的不同的詞,用VSM來解釋的話,應該是近義詞,位於一個象限內。這樣漢語中眾多的詞,在VSM中會匯聚成不同的簇,就像聚類一樣。那麽問題有來了,如果一個詞有多個含義,如何表示歧義詞的語義?目前的word2vector在這方面有沒有問題呢,答案是有的。熟悉聚類算法的人都知道,除了kmeans還有高斯混合聚類。他們倆的區別可以這樣說,前者的歸類是hard,後者是soft,那麽解決歧義詞的語義表示,應該讓他具備多重語義,也就是應該與多個上下文重疊。這個今年已經有學者改進了。②不同的語境下出現相同的詞,out of context情況。如果要預測的詞的上下文在訓練語料中從來沒有出現過,此時的預測與上下文顯然是違和的。

  上面提到的兩個問題,已經有了解決方案,之所以關註這些問題,是為了解決句子語義表示的非監督學習。對於每一個句子都有一個隱含的句子嵌入表示,以這個語義表示為中心,他會影響句子中每個詞的分布。也就是我們應該找到一種解決辦法,讓這些詞的語義表示,通過某種方式,比如加權求和之後得到最終的語義表示,與這個隱含的句子語義表示最接近,有點兒接近非監督學習的思想了吧。前面提到了TF-IDF的思想,這裏很容易讓人聯想到:把每個句子看成文檔,每個句子不允許重復詞的情況。2017年學者提出了對w2v訓練出的詞嵌入進行平滑處理以及出去第一主成分的方案來解決句子向量。針對out of context的情況主要用平滑來解決,針對語義傾斜問題用取出第一主成分來解決。總結起來,這個方案就是:

  技術分享圖片

  這個方案出來後,讓人很吃驚,竟然這麽簡單而且超越了之前的siamese lstm,最大的特點是非監督學習。但是任何算法都有局限性,這個方案用在情感分析中是有問題的,因為and,but,no等詞在情感分析中是有意義的。原論文連接地址:https://translate.googleusercontent.com/translate_c?depth=1&hl=zh-CN&prev=search&rurl=translate.google.de&sl=en&sp=nmt4&u=https://openreview.net/pdf%3Fid%3DSyK00v5xx&usg=ALkJrhj3hLRTIvvsJmVZz2lRkOljjVNSeA#11

  另外,文章或者段落的語義表示,這個方案也是有局限的。獲取到每個句子向量後,不可能粗糙地累加起來,因為這不符合人腦神經元對於閱讀文字的機制。本人認為最符合的模型應該是attention model。因為人在閱讀一篇文章時,順序地從第一句話開始往後閱讀,首先記憶是逐漸消失的,但是有部分重要的詞會形成記憶,其余的忽略掉,這些重要的詞不斷匯集,在這個過程中不斷揣摩文章的中心思想,當遇到中心句時我們會比較他的上下文與中心句的關聯程度,如果大的話,就認為他是中心句,就是這樣的不斷搜索的過程。而這個過程的解決方案,本人結合了siamese lstm和atttention model,比較符合這個機制。分別構造詞級別和句子級別的兩個attention model,前者重新獲取每個句子的向量,後者再此基礎上獲取整個上下文的語義表示,然後把中心句共同引入siamese lstm中,輸出相似度得分進行訓練。預測時,按照上述人腦的機制,按照時間序列t,把每個句子當作中心句,用attention model獲取上下文,然後計算t時刻的句子與上下文相似度,增加時間序列繼續搜索,從中找出相似度最高的句子向量,這個句子就是中心句。這個過程完美地模擬了上述人腦尋找中心句的機制。

從應用創新的角度再論語義表示