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

 author:XueQiang Tong  mail:niurenai@outlook.com  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激活。google

  上面的思考過程很重要。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狀況。若是要預測的詞的上下文在訓練語料中歷來沒有出現過,此時的預測與上下文顯然是違和的。url

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

  

  這個方案出來後,讓人很吃驚,居然這麼簡單並且超越了以前的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#11blog

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

相關文章
相關標籤/搜索