1. 程式人生 > >深度學習 (五)cbow、skip-gram of word2vec

深度學習 (五)cbow、skip-gram of word2vec

介紹

       NLP 自然語言處理即讓計算機理解學會人類語言,讓計算機像人一樣能有分辨能力、語言交流能力,併為我們服務產生價值的一種研究方向,從發展歷史來說經過了很多代人的努力,向我們的目標更近了一步,從傳統的基於規則的語言逐步向基於統計的理論發展。
在這裡插入圖片描述
       下面先來看一張旅遊地圖,不至於迷失方向,後面會詳細介紹它們之間的關係。
在這裡插入圖片描述

歷程

rules-Based

       1950年時基於規則的自然語言處理非常火,它是把規則提前編碼好並告訴計算機按著規則來分析解析句子結構和語法,如主謂賓語法,這些規則是咋來的呢,人為編制的,可能是電腦科學家和中文語言學家坐在一起開了個會溝通了一下,中文學家把語言規則提了一個產品需求扔給電腦科學家,說你把這個搞到計算機裡面讓它能懂我們說得話,就這麼簡單的開了個會規則、符號就確定了,顯然這一過程依賴於幾個有經驗的人以及他們的水平,人的水平是有限的一個人同時懂了世界上所有語言不太可能。
       另一方面出來各種新詞之後我們設定的規則是否要從新變更呢,另外翻譯準確率也不是很高,經過一段難熬的時間,很多人們開始把目光轉向了另一種思路,以統計學為基礎統計概率問題。

language modeling

       到了1970年時隨著統計學的快速發展,人們開始嘗試應用統計學和機器學習相結合來解決語言處理問題,要判斷一段文字是不是一句自然語言,可以通過確定這段文字的概率分佈來表示其存在的可能性,語言模型中的詞是有順序的,給定m個詞看這句話是不是一句合理的自然語言,人們嘗試了各種機器學習模型,從那時起語言模型這個概念逐漸流程起來,語言模型這個詞的含義其實也包括傳統的規則符號表示模型,不過現如今一般指基於統計的語言模型。

representation model

       機器學習模型前面我們已經接觸過,常見的監督學習和非監督學習,無論哪種都學要輸入經過資料清洗好的數值資料即向量,我們面臨的第一個問題就是書本或各大新聞上的那麼多文字如何讓計算機理解看懂呢,想象小時候我們學習了什麼,是從單個的字詞 偏旁、結構學起 時間一長積累了大量單詞詞彙並理解各個詞的意思,相近詞等,開始人們建立了一個超大型詞表或叫‘’漢語詞典‘’,在轉換一句話時如果單詞存在字典中即為1,不存在即為0,單詞長度為詞典長度。

one hot encoding(word)

舉個使用one hot encoding編碼的具體例子:
第一句:John likes to watch movies.Mary likes too.
第二句:John also likes to watch football games.
將兩句編碼為詞典:
{“John”:1,“likes”:2,“to”:3,“watch”:4,“movies”:5,“also”:6,“football”:7,“games”:8,“Mary”:9,“too”:10}
對詞典裡面每個詞編碼
John [1,0,0,0,0,0,0,0,0,0]
likes [0,1,0,0,0,0,0,0,0,0]
to [0,0,1,0,0,0,0,0,0,0]
watch [0,0,0,1,0,0,0,0,0,0]
movies [0,0,0,0,1,0,0,0,0,0]
also [0,0,0,0,0,1,0,0,0,0]
football [0,0,0,0,0,0,1,0,0,0]
games [0,0,0,0,0,0,0,1,0,0]
mary [0,0,0,1,0,0,0,0,1,0]
too [0,0,0,1,0,0,0,0,1,1]

bag of words

第一句話整合編碼為:[1 2 1 1 1 0 0 0 1 1 1]
第二句為 [1 1 1 1 0 1 1 1 0 0]
       從實事求是的角度來觀察:句子的編碼可以看出來一個單詞出現的次數越多權重會越大,上面like出現了兩次權重為2,假如John這人還喜歡apple peal 等那又多出來幾個like,經常一篇文章的主題和裡面重複太多的詞關係不大,往往和那麼在本篇中出現的有關係。

  • TF-IDF
           有人因此提出來了TF-IDF模型,此處略過可以自行網上搜索,它在表示一個單詞重要性時不止和本篇有關係,同在其它文件中的頻次成反比,它在一定程度上解決了文章中單個重要程度的合理表達,but依然存在詞之間的相互關係不能表達,每個詞之間順序完全沒有體現出來。

n-gram

       我們先來說一下基於統計的語言模型,它們都是基於條件率來求解,在A事件發生的情況下,B事件發生的概率是多少,我們想一句話是否合理轉化為了數學向量,然後又通過概念來計算這一向量是否合理的概率,可以說是結合數學+統計學解決自然語言識別翻譯等問題,概率論的鼻祖是貝葉斯,所以都稱貝葉斯是自然語言理論的開拓者。
       假設句子為S,由m個片語成,即求這m個字片語成句子S的概率是多少,概率值越大表明這個句子接近正確越近、表達也越合理。
P(S) = p(w1)*p(w2|w1)*p(w3|w1,w2)*p(w4|w1,w2,w3)****p(wm|w(m-1+n)**wm)
馬爾科夫鏈假設:
       由於上述問題非常複雜求解,後來馬爾科夫提出來了一個假設,每個詞出現的概率只與前面n-1個詞有關係,那麼可以節省很多計算,常用模型如下:
n=1 unique gram
在這裡插入圖片描述
n=2 binary gram
在這裡插入圖片描述
n=3 third gram

在這裡插入圖片描述
       這裡面的n是劃分預料庫的一個標準,n=1表明整個語料庫都是單個詞,n=2表明都是大小為2的短語,我們要做的便是基於這麼多的預料庫計算我們所給出的句子發生的概率是多少,語料庫中的每一個詞都有可能是組成我們將要預測詞的一部分,因此每個詞都要有一個概率值,即語料庫的個數即我們引數規模的大小,語料庫成指數增長,那麼引數個數也呈指數增長,n值越大句子越精確但是n>=4時語料庫將非常大不利於計算,專案中很少使用,對於計算概率我們可以寫一個例子來實現說明。
       計算時大概是根據出現次數來計算.

distributed representation

You shall know a word by the company it keeps
       distributed描述的是把詞語包含的資訊分散式地儲存在向量的各個維度中相反的是區域性表示(local representation),如詞語的獨熱表示(one-hot representation),在高維的one hot向量中只有一個維度描述了詞的語義如為1的那個維度,其它維度都是0,語義是離散的,可以通過矩陣降維或神經網路降維可以將語義分散儲存到向量的各個維度中,因此,這類方法得到的低維向量可稱為分散式表示。
cocurrence matrix
       topic model 說道這裡有必要先說下主題topic model,即識別一個文件是屬於或包含哪些主題,如今日頭條文章都是自動分好類的,這個分類如何來分呢,一個分類就是一個主題,下面這兩種常用方法經常用來識別文件主題,主題模型也是自然語言的一個研究方向,詳細的這裡先不深入研究。
在這裡插入圖片描述

  • word document
           詞-文件表示用來發現topic,大概描述方法矩陣的每行表示詞(one hot) ,縱列表示文件,可想而知每個文章包含的單詞個數是很大的,那麼每行將非常長,雖然可以利用SVD來降維,結果還是難於計算如LSA,後面人們又優化了有了LDA等,詳情請百度。
  • word-word
           表示方法變了但要記住我們的思想 ,我們是想通過上下文來表示目標詞的含義,word-document也可以表示它的上下文自然是整個文件,因此這種方法在分析句子含義方面很少用,它的關係是詞語整篇文章,這個word-word關係表示法即可以用來表達句子語義資訊,看下面三句話:
    l like deep learning
    l like NLP
    I enjoy flying,編碼為詞典
    效果如下圖:
    在這裡插入圖片描述
           上圖也好理解,我們發現好多方法都存在向量維度非常大的問題,對新加入詞相容性不好,它沒有表明詞與詞之間的順序,當我們設定劃窗大小時,劃窗只是表示目標詞周圍幾個詞和他共同出現的現象,共現的意義也在於此,在2013年有人提出來了更好的設計詞語義表示方法,如下
    word embedding
           嵌入即把一個東西放在另一個東西里面的意思,在生活中也常常聽說嵌入鑽石的戒指、項鍊等,嵌入貌似都是將大的物件嵌入到小的物品中,其實詞向量這裡也是這個意思,嵌入這個詞真是異曲同工,在數學上可以理解為有兩個集合A、B,A包含B,那麼B也可以說嵌入到了A中,具體的例子可以正整數、整數的關係來說,我們可以說把正整數集合嵌入到整數集合中,那麼整數的特徵可以表達出來正整數,正整數依然有些自己的特性,再高階說即將整數對映到實數,本篇尾部我們來談談一個高階話題黎曼猜想,人類的這些認為常識的東西,也是逐漸積累起來的,現在認為的常識,放在幾千年前可能是難以想象的數學難題,word embdding也是類似,詞嵌入是將高維稀疏的詞向量對映到低維稠密的向量空間,主要為了方便計算。
           word embedding完成了哪些事呢,首先它將硬生生的語言文字(不只限於中文)用數學中的向量來表達出來了,即表達原有語言文字,將語義資訊分不到了多個向量維度來表達,另外只表達出來還不算,還要能儘量把表達的東西的本身特性不能丟了也要表達出來,一句話總結即用低維稠密向量完美表達語言本意資訊。
           word embedding可以理解為一個概念層面的東西,好比介面api有人定義有人實現,java ee裡面基本的規範有十三個,而實現這些規範的公司有很多,隨便舉個例子MDB,實現產品就有activeMQ、rocketMQ等流程框架,目前實現將詞嵌入到有著更多表達資訊的稠密向量方法中常用的有nnlm、cbow、skip-gram等。

neural network model

在這裡插入圖片描述

       我們想理解上面模型首先要理解各個字母表達的含義,v是詞典的大小,就是詞典中包含多少個單詞或漢字,n在這裡表示劃窗大小,如n=5表示用前4個詞來預測第五個詞是啥(從詞典v中查詢),我們是想將一個詞的表達對映到一個稠密向量d,d一般是可以設定的一般在幾百維度左右,可令d=100,不宜太大不好計算。
       例如下面這句話:我愛自然語言處理。jieba分詞後為【我、愛、自然、語言、處理】 ,我們要根據【我、愛、自然、語言】預測 【處理】,即一個樣本有了,也可以這樣表示(context(w),w) ,w代表目標詞處理,context(w)表示它前面n-1個詞,這樣的樣本有很多,這裡只是一個,上圖原理圖只代表一個樣本處理過程,這點我在這類疑惑了還以為是多個樣本。
       假設詞典只包含中文常用詞大小為5000,即v=5000,那麼投影矩陣C = 1005000大小的矩陣,輸入的最下面一層為 我[1 0000**] 、愛[010000*]、自然[0010000***]、語言[00010000*],它們都為15000的向量,讓C矩陣和上面四個輸入做對映,將得到4個1001的稠密向量,即倒數第二層,然後讓這個4個向量連線起來變為一個向量,大小就4*100,即(n-1)d ,也可以看做輸入層的大小,它在與隱層做全連線權重個數為(n-1)dh,h為隱層的節點個數(可以調節),到這裡就和BP網路類似了,前面我們利用sigmoid啟用函式分析過。輸出層大小為hv,輸出層大小為詞典大小,即預測詞典裡面哪一個測稱為目標詞的概率大。
       前面我們在訓練BP網路時已經發現,其引數量很大,而且輸入的維度一般也很大,這裡我們輸入的語料庫依然很大,模型將訓練變慢,同樣不太實用。

continuous bag of word

       順著概念的不斷擴充套件來擴充知識,是一個水到渠成的過程,上面介紹了nnlm這裡介紹cbow感覺一句話即可概括,在經過projection layer線性對映後,為了減少訓練引數數量將隱層去掉了,改為了求(n-1)個向量的和,再做輸出層變換softmax結果,還有一點主要區別是cbow是利用上下文n-1個詞去預測中間的詞,nnlm是利用前n-1個詞預測後一個詞,如下圖左:
在這裡插入圖片描述
       再想想簡化後的過程其實只是對稠密向量做了一個softmax多類迴歸,這裡計算量依然耗時的是softmat分類,詞典多大softmax就有多大,為了減少這部分耗時採用了哈夫曼樹和下采樣方法,下次再說如何優化的。
右邊模型是skip-gram 思想是利用中間次去預測周圍你個詞,思路類似。

疑問

       剛看這裡的時候有很多疑問,可以帶著疑問往下看,有了眾多疑問更是學習的動力,如:

  • word2vec 與cbow skip-gram 關係
    word2vec只是一個專案名稱,也可以叫工具名稱,其原理主要是利用了cbow sip-gram兩個模型思想來實現詞向量的訓練
  • HMM、最大熵模型、CRF 、LDA 之間關係
    LDA是預測主題模型的框架,HMM CRF 最大熵模型都是用來解決序列問題。
  • one-hot詞向量表示法 詞彙鴻溝 維度災難
  • 訓練一份好的詞向量表示對深度學習很有幫助
  • RNN LSTM為什麼能處理文字?
  • 什麼是序列問題
  • n-gram規模為什麼隨著n指數增長?
  • word embedding如何理解

隨筆

網約車壟斷的行程
       現在生活中人們已經習慣滴滴一下,網約車就來了,方便了我們的生活,也可以說是生態圈已經行程,貿然採取措施會是生態區被迫害,再行程下一個生態之前會有一段混亂時間,壟斷的缺點是使得服務和技術落後,沒有了推動力去提高服務和質量,聯想、惠普等大公司在購買晶片時一般不會只買in特爾,也會買一些amd,作為購買方知道有責任維持這個行業的生態,同樣作為乘客如果我們每次出行都換一種出行方式,會不會好些,好像比較難,我每次出行都會選價格低一些的,價錢好像是大部分人靠譜的主要因素。