1. 程式人生 > >CS224n | 高階詞向量表示

CS224n | 高階詞向量表示

在這裡插入圖片描述

試圖分析原理
如何更有效地捕捉word2vec的本質
關於詞向量表面的評估
最後,你們實際上會很清楚如何去評估詞向量
並且至少有兩種受驗方法來訓練他們

複習

在這裡插入圖片描述

在這裡插入圖片描述

函式是非凸的,所以初始值就很重要了

在這裡插入圖片描述

在這裡插入圖片描述

Skip -gram

在這裡插入圖片描述

T對應需要遍歷語料庫的每個視窗
在這裡插入圖片描述

J是我們的損失函式 T是在遍歷語料庫的第T個時間步

theta通常作為一個用於所有變數的引數,因此在skip-gram模型的例子中,它基本上就是所有的u向量和v向量,然後當我們呼叫時,我們就呼叫theta。它也可能有神經網路 層等其他引數

我們不是遍歷所有的單詞,而是隨機的去取5 10個或者其他數目的隨機詞,然後最小化他們的概率

通常我們把這個隨機取詞的數目作為一個超引數,一個需要評估重要性的引數

我們會為每一視窗 取k個負樣本 然後最小化這些隨機詞 出現在中心詞附近的概率

接著從簡單的均勻分佈或一元模型分佈(unigram distribution)中取樣獲取

觀測這些詞大致出現的頻率 然後基於頻率去取樣

但是我們也取其指數為3/4的值,這是一個簡單的術語 如果你使用這個模型有一段時間 可能它應該經常取樣一些稀有 的詞

不然的話,它將經常取樣 The 和 A 以及其他停用詞

在我們的語料庫中,對aardvark和zebra進行取樣 因此這個指數為3/4的值

CBOW

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

我們會遍歷語料庫中的每個單詞,觀察視窗中周圍的詞,預測周圍的詞。我們努力抓取 詞的共同點,這個詞和其他詞共同出現的頻率是多少,每出現一次進行一次計數,就像看到deep 和learning同時出現,就對這兩個向量做次梯度更新,然後再次瀏覽語料庫,你很可能將最終發現deep和learning 又同時出現,然後對其再做一次梯度更新。

你會覺得這很沒效率,為什麼我們現在僅對整個語料庫計算一次,deep learning這兩個詞共同出現的頻率,然後我們能捕獲整個計數而不是一個樣本,這實際上是,在word2vec之前出現的方法,這兒有可供我們選在的不同方法:

在這裡插入圖片描述

最簡單就是word2vec 是在每個單詞周圍使用一個視窗,這基本上相當遍歷了這個語料庫。我們不對任何部分進行梯度更新,不使用隨機梯度下降,首先對計數結果進行採集。一旦獲得了計數結果,就對矩陣進行操作,視窗的長度可能會是2詞的句法資訊,如同該示例,也可能是5這是一些單詞周圍的小視窗,我們將要抓取的不僅是語義,還有每個詞的句法資訊,即它是哪一種詞性標籤,所以動詞之間會更接近,例如 動詞變為名詞。另一方面,觀測共同出現的計數結果不僅在視窗周圍,而是整個文件,那麼我們不能僅僅觀測每個視窗,但是我們認為這個詞和其他這些詞出現在所有維基百科文章中或整個詞文件中,然後你會捕獲到更多的話題,這通常被稱為潛在語義分析,—》這是很久以前很流行的一個模型,忽略掉詞性和句法資訊,基本上你會得到的是僅僅是游泳 船 水 天氣 太陽,它們都在這個話題上出現,在這個文件中一起出現,我們不會太過深入,因為和涉及到其他的下游任務,比如機器翻譯或其他的,並且我們想使用這些視窗是很有用的。

舉例

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在詞向量中很多表徵能力通過the he 和 has 以及其他非常頻繁出現的詞, 幾乎和所有名詞同時處出現,比如the 出現在所有名詞的視窗中,但是它並沒有給我們帶來很多資訊,只是不斷重複出現,因此事實上對此能做的僅僅知識遮住它們出現的次數最大化在100,無論the 共同出現的次數是否最多, 或者很多其他類似的功能詞,我們僅把它最大化為100

有人會直接忽略,因為冪律分佈或齊夫定律指出,最高頻率的詞會比其他詞出現得越來越頻繁,然後逐漸消失。
詞的長尾效應:不經常出現的詞但是這些稀少的詞常常含有非常多的語義內容

也可以,不平等計算所有詞的出現次數。靠近中心詞的詞出現一次記1,如果詞出現在五步距離於中心詞的地方,那麼計為0.5
除了計數以外還可以計算詞相關性並置0,有很多不同的方法來處理共現矩陣,並且非常有用。

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

奇異矩陣雖然簡單,只需要一行python程式碼,但實際上從計算方面講效果不是很好,尤其是當處理越來越大的矩陣時候,因此需要將二次損失函式定在較小的維度上。如果是一個詞和詞聯立的共現矩陣,或一個詞和文件的共現矩陣,並且假設這個矩陣非常非常大,那麼將很難把新詞或文件整合到整個模型中,因為必須返回整個PCA。然後在熟練掌握了SVD後,如何優化SVD的方法與 其他很多下游深度學習方法不同,我們將使用神經網路的方法,這是不同的優化型別。因此 詞到向量的目標函式和SVD相似,一次只觀測一個視窗,然後進行梯度更新。

來比較基於共現矩陣和視窗的兩類方法
PCA的優點是相對來說訓練得更快,除非矩陣非常非常大,但通常非常有效地使用我們擁有的統計資料。我們只需要收集一次統計資訊,理論上先將整個語料庫放一邊,然後對共現計數進行一系列的操作。但它主要是捕獲大多數詞的相似性,沒有word2vec模型抓取的其他模式。
有些計數很大的單詞往往得到不成比例的重要性,我們嘗試了各種方法降低,功能詞和詞頻很高的詞的重要性。
Skip-Gram模型的缺點是,它會縮放語料庫的尺寸,還需要遍歷每一個單一視窗,這非常低效。因此不能有效利用資料集的統計資料。
實際上,在下游任務的很多情況下,能獲得更好的效能,但是還不知道下游具體的任務,也就是我們為什麼整個學期都在講這個的原因。
對於各種不同的問題,比如實體識別或詞性標註等等,這些都是在作業集中需要實現的部分,事實證明類Skip-Gram模型效能會更好一點。我們能捕獲跟中複雜的模式,其中一些非常令人震驚。

在這裡插入圖片描述

2

在這裡插入圖片描述

讓我們深入這個目標函式,在此強調一下,這裡的theta表示所有的引數,在這個情況下,已有U和V向量,但現在它們更加對稱,我們基本上會遍歷所有可能共現的詞對。非常大 的共現矩陣,設為P。對語料庫的每一對詞,我們希望最小化內積距離和,兩個詞計數的對數。這並不是執行SVD,而是一次僅優化一個計數,因此這裡使用距離的平方,然後f是的我們可以衡量,甚至減少這些頻繁共現的事件,因此我們可以在整個目標函式中對它衡量,從而取得最大值。

這實際上可以更快地進行訓練,因此我們將優化deep和learning共現在一個視窗,然後會在幾個視窗中看到他們同時出現,然後再一次更新,直到deep learning共同出現在整個語料庫,甚至在整個維基百科或是我們的爬蟲資料集,即網際網路的大部分中,這非常神奇,這種巨大的語料庫有數十億個符號。deep learning 在十億文件共現536詞 這種等。

基本上可以優化這部分內積,使它近似真實值,然後減去總體的對數。

因此 它可以拓展到非常大的語料庫,稀有詞很少出現。因此只要花幾個小時就能捕獲更稀有的,比如這些稀有詞的語義。因為統計資訊被有效利用。

事實證明在小語料甚至更小的詞向量尺寸都能得到很好的效果。

現在你可能會因為向量單一而感到困惑,我向你們展示的一直是單一向量,但是在這,就像skip-gram向量一樣,會有v向量,這是外部向量和內部向量,因此我們丟掉這些困惑,你要知道很多不同的選擇,這些都是最後可以採用的。

在這裡插入圖片描述

其實僅是從這兩個向量中得到單一向量,就能將他們連線起來,但事實證明把他們相加效果最好的,他們本質上都捕獲了共現的計數,

但這也有違直覺,為什麼某些事情會發生,但是事實證明它是實踐中效果最好的

U是包含所有詞的向量,因此對於skip-gram有內部和外部向量,u 和v 就是列中的向量和行中的向量,他們本質上是可以互換的,因為把他們加起來就更有意義。

但為什麼不是一組向量,但是之後目標函式的表現會更差,因為是兩個相似引數集之間的內積

事實證明,就優化來說,在優化期間有獨立的向量,並且最後把他們整合在一起會更穩定

對skip-gram也存在這個問題,對skip-gram來說把它們相加很常見,並且效果很好,在全部專案中無論何時採取這個策略都很好,不過這看起來似乎有點武斷,最好一直保持在做的事情比如:你可以走過來對我說 hi 我應該做什麼 X or Y
實際答案是,尤其是更進一步瞭解專案和做更多的研究以及常見的應用時,最好的答案總是, 把它們都試一遍

有一個真正的度量來衡量他們的表現,然後在最後的專案描述中有一個完整的小表格,具體表明它是什麼,一旦做了很多次之後,你直覺上會覺得 對於第五個專案,把它們相加工作效果最好,所以我就準備繼續這樣做,尤其是進入這個領域後,嘗試不同的旋鈕和超引數非常有好處。

它們真的是可以互換的,特別是對於GloVe模型這個問題來說。

評估單詞向量

在這裡插入圖片描述

那麼你們可能會問,實際中它們是如何工作呢?一直這些超引數,那麼如何設定視窗尺寸,以及向量尺寸?

不管你對你在做的專案有內在或者外在的評估,都可以做出一個高級別的決策,對於單詞向量來說是一樣的。

因此 內在評價通常是針對特定或中間環節的子任務進行的,例如,可以觀測這些向量的差異性或相似性,以及內部產品與人類對相似判斷有多大的相關性。

內部評估的優點就是,計算速度非常快,已有向量的情況下,可以通過這個快速相似相關的研究評估它們,然後得到數值結果,大功告成。或者 可以修改模型,嘗試50000種不同的小旋鈕和組合,然後非常快地調整它。有時它會幫助你們非常快地理解系統的工作原理。例如 什麼樣的超引數實際上,會對這種相似性指標產生影響。

不過,天下沒有免費的午餐,在中間或內在的評價和改進實際上 是改善一些真正關心的任務,真實的人是一個相當微妙的定義,我想對於真實的人,通常會假設他們是普通人,只是想要一個機器翻譯系統或問答系統之類的東西,不一定是語言學家,或者是自然語言處理領域的研究人員。因此,有時候你會觀察到很多人試圖,優化他們的內在評價,他們花費幾年的時間去優化。後來其他人發現 事實證明,把更好的單詞向量或類似的應用到命名實體識別,或者部分詞性標註以及機器翻譯時,並沒有看到任何的改善。
那麼問題是,內在評價多有用,所以當你們繼續深入的時候,你們中的很多人都在他們的專案中努力,你總是想要確保在這些專案之間建立某種聯絡。外在評價基本上是對一個任務真正的評價,這是非常顯而易見的,問題是,這可能需要很長時間,對於新的單詞向量。取Person相關性,而不是核心矩陣的原始計數,我覺得這是最棒的。

現在我想要評估這個詞向量,對機器翻譯是否真的有幫著呢?現在吧文字向量輸入,機器翻譯系統,結果要花一週的時間來訓練。然後得等很長時間,現在還有另外十個旋鈕knobs。在你得到結果之前,這一年已經結束了。你不可能每次在第一個早期的單詞向量上,有微小的進步時就這麼做。
這就是問題所在,這需要花費很長時間,然而大家常常會錯誤地調整,許多不同的子系統,他們把所有東西放在一個完整的系統中,真正的任務 比如 機器翻譯。有些總體上已經有所改善,但現在還不清楚到底是哪一部分做出來改進,也許有兩個部分,其中一個翻譯得很好,另一個翻譯得很差,他們相互抵消,以此類推。
當時用外在評估時,要非常肯定只改變想出的一件事,或者單詞向量的一個方面。如果對整個下游的機器翻譯任務有所改善,那麼相對情況就很好。
因此讓我更加深入詞向量的內在評估。

在這裡插入圖片描述

就是最近發表的Word2vec論文中,其中一個很受歡迎,即單詞向量類比。他們發現驚人的語義和句法類比,是通過這些向量中的餘弦距離捕捉到的。舉個例子,對於女人來說,男人是什麼,國王與另一個詞的關係是什麼,基本上是一個簡單的類比,男人對女人 的類比就像 國王對王后。事實證明,取 女人 向量,減去男人向量, 再加上國王的向量,然後檢視找到最大的餘弦相似性向量。結果顯示,皇后向量實際上是 與這個詞有最大餘弦相似性的向量。
非常吃驚,它適用於許多不用型別的非常直觀的模式,

在這裡插入圖片描述

關於相似性向量,你會得到比如像 先生對夫人, 男人對女人是相似等等

在簡單的歐幾里得減法和加法中,這些餘弦距離最好地捕捉到了他們。所以他們都有相似關係

在這裡插入圖片描述

可以拿公司頭銜向量減去執行長向量加上其他公司向量,就可以得到另一家公司執行長的名字和向量

在這裡插入圖片描述

它不僅適用於語義關係,也適用於句法關係,因此在GloVe視覺化結果中顯示,與之最相近的單詞向糧食slow slower slowest

在這裡插入圖片描述

雖然這是非常直觀的,對於某些人來說,從這裡捕獲到實際語義來看,可能真的很想知道為什麼會發生這種事情,沒有任何數學解釋可以證明為什麼這個問題會失敗。但是直覺上可以稍微理解一些,例如 最高階詞可能以類似的方式出現子啊某些詞的旁邊。

對於之前一些定性的子樣本,其中一些詞向量工作得非常好。
研究一段時間,發現奧迪減去德語就會出現一些瘋狂的術語 比如壽司什麼的。雖然並不是總能說得通他們之間的聯絡。但是其中很多次是非常直觀的。因此 大家想出一個數據集,嘗試去探索它到底多久出現一次,並且是否真的能夠很好工作,所以他們選擇了單詞向量類比法。
在這裡插入圖片描述

當然已有一些問題,當你優化一些度量時,會逐漸地觀察到 相同的城市名稱代表不同城市,不同州也有相同的名字,這在某種程度上取決於語料庫,你正在訓練它是否會被捕獲。對於很多人來說,對他們進行優化,是非常有必要的。

在這裡插入圖片描述

在這裡插入圖片描述

現在 計算相應的單詞向量,調整旋鈕,改變超引數,不是25維,而是50維,然後評估哪個更適合這些類比。

在這裡插入圖片描述

在這裡插入圖片描述

但並不會深入所有的方法,除了skip-gram模型 和 glove模型

2013 14 年發表的論文顯示,GloVe模型是捕獲這些關係的最佳工具。

我們在這裡發現一個很有趣的事情,就是有時候維度越高,實際上無助於更有效地捕獲這些關係。因此千維向量的工作效果比300維向量差。
另一個有趣的觀測結果是, 這是有些令人遺憾的是 對於幾乎每一種深度學習模式都是正確的,但是資料越多越好。
如果你在四百二十億資料集上訓練單詞向量,它將比在六十億標記工作得更好。
在這裡插入圖片描述

我認為Geoffrey三年前在這裡完成了一個非常好和仔細的分析。他分析了我們觀察過的 各種不同的超引數
因此 這也是一種很好的方式,你們可以嘗試模仿他的方法應用在專案裡面。
每當我看到這樣的繪圖,我臉上就會露出大大的微笑。

在這裡插入圖片描述

因為他們是非常不同的訓練方式,一個是一次一個視窗,另一個是先計算好所有的計數,然後處理計數。因此我們儘量去完成得足夠好。對它們進行直接比較的同時去理解為什麼是這樣的。因此我們所做的計時觀測負樣本。
所以請記住 現在已有計數總和和目標函式的skip-gram模型。我們想要壓低它們, 沒有出現在視窗中的概率,
所以這增加訓練時間的一種方法,並且理論上在這個目標上表象更好。通過不斷地迭代來遍歷以及優化 GloVe中共現矩陣的每對單詞向量。不管兩個模型的訓練時長是多久, GloVe模型在評估中的表現更加優異。

在這裡插入圖片描述

在這裡插入圖片描述

我們想要訓練單詞向量,使得向量之間具有很高的相關性,無論是餘弦相似度還是歐式距離。或者你也可以嘗試不同的距離度量,來觀測他們之間的距離。

在這裡插入圖片描述

特取Sweden從餘弦相似度角度來講,可以發現它和很多詞都非常相近,或是有很大的餘弦相似性。

當它們很好地聯絡在一起時,就會認為這些向量正在捕捉人們所具有的相似直覺,直觀地說,如果Sweden有很好的餘弦相似性,並且把它輸入到其他下游系統中,那麼這個系統在捕獲實體方面也會變得更優異。
在這裡插入圖片描述
在這裡插入圖片描述

因此 相似性越高,就越認為這個大向量空間中的向量距離是直觀的(intuitive)。

實際上 內部評價存在巨大的問題,已有不錯的相似性,但這並不能真正改善所關心的目標任務,雖然他們的代價同樣非常昂貴,但最好的評價部分是,那些處於實際任務或至少後續型別下游任務的評估。
其中一個例子就是實體識別,這是一個很好的例項,因為它相對簡單,但是非常實用。可以通過實體命名識別系統來對一堆公司電子郵件進行實體命名。來了解哪個人與什麼公司有什麼關係。他們住哪裡……

我們會觀察到GloVe向量在這些下游任務上再次做的非常非常好。

簡單的單詞分類

在這裡插入圖片描述

我們展示了從非常簡單的共現計數開始到非常稀疏的大向量 和 像word2vec這樣的小密度向量之間的區別

主要好處在於 由於相似的單詞聚在一起,因此我們能夠對其分裂,並且在分類不同型別的詞時,可能看不到訓練資料集。

舉個例子, 因為國家名詞聚類在一起,我們目標就是對位置詞向量進行分類。如果將所有這些國家詞初始化為向量空間的類似部分,那麼能夠更好得進行分類。
事實證明,也需要對向量進行微調。我們已經學習過無監督的目標函式。
這是無監督的,因為沒有對每個輸入提供標籤,只需要大量的單詞向量,利用無監督目標函式來進行學習。

但是實際上在其他任務中不起作用。

情緒分析對於某些單詞向量來說並不是一項很好的下游任務。因為優良程度不同的單詞向量可能會出現在類似的語境中。
對同一部電影的評價也有好壞之分,因此當下遊任務是情緒分析時,可以隨機初始化單詞向量。訓練單詞向量所需要的時間,是非常多的,但不必擔心,在很多情況下,單詞向量對深度學習模式第一步是非常有幫助 的。

再次強調,這也是評估的一部分。
是否應該使用word2vec 或 GloVe模型。對單詞向量進行隨機初始化。

因此,當我們試圖對單詞進行分類時,將使用softmax,
在這裡插入圖片描述

這個等式,但是要對符號進行一點點變換,以便能夠更容易地進行數學推導。這是將要優化的softmax函式。這只是邏輯會過不同的詞。

在很多情況下,會為不同的類別構建矩陣W,舉個例子x是最簡單的形式,即單詞向量。
我們試圖對沒有語境的詞向量,進行分類,以判斷它是否是地區名詞。這並不是非常實用,只是為了教學。
假設存在輸入x 它是一個單詞向量。

分類的目標是判斷是否地區名詞。

舉個例子,給出不同類別單詞向量Swedem 和Norway 對它進行計算然後,需要進行分類的是,Finland Switzerland以及其他的地區名詞。

softmax函式最簡單的輸入引數是2個,但是2個輸入引數通常沒有效果,因此假設有多個不同類,每個類都有一個行向量。y實際上是行數,即擁有特定行,這裡是行向量W_y 與 列向量 x的內積。

和平時一樣,接下來就是歸一部分了,對不同類 ……

一般來說,W是用來分類的, 是C*d維矩陣, d是輸入 C是擁有的類別數。