BERT學習過程記錄1 Word2vec

2021-09-24 19:20:17 字數 2841 閱讀 5546

資料**自知乎,僅作摘錄之用

在聊 word2vec 之前,先聊聊 nlp (自然語言處理)。nlp 裡面,最細粒度的是 詞語,詞語組成句子,句子再組成段落、篇章、文件。所以處理 nlp 的問題,首先就要拿詞語開刀。

舉個簡單例子,判斷乙個詞的詞性,是動詞還是名詞。用機器學習的思路,我們有一系列樣本(x,y),這裡 x 是詞語,y 是它們的詞性,我們要構建 f(x)->y 的對映,但這裡的數學模型 f(比如神經網路、svm)只接受數值型輸入,而 nlp 裡的詞語,是人類的抽象總結,是符號形式的(比如中文、英文、拉丁文等等),所以需要把他們轉換成數值形式,或者說——嵌入到乙個數學空間裡,這種嵌入方式,就叫詞嵌入(word embedding),而 word2vec,就是詞嵌入( word embedding) 的一種

我在前作『都是套路: 從上帝視角看透時間序列和資料探勘』提到,大部分的有監督機器學習模型,都可以歸結為:

f(x)->y

在 nlp 中,把 x 看做乙個句子裡的乙個詞語,y 是這個詞語的上下文詞語,那麼這裡的 f,便是 nlp 中經常出現的『語言模型』(language model),這個模型的目的,就是判斷 (x,y) 這個樣本,是否符合自然語言的法則,更通俗點說就是:詞語x和詞語y放在一起,是不是人話。

word2vec 正是**於這個思想,但它的最終目的,不是要把 f 訓練得多麼完美,而是只關心模型訓練完後的副產物——模型引數(這裡特指神經網路的權重),並將這些引數,作為輸入 x 的某種向量化的表示,這個向量便叫做——詞向量(這裡看不懂沒關係,下一節我們詳細剖析)。

我們來看個例子,如何用 word2vec 尋找相似詞:

上面我們提到了語言模型

我們先來看個最簡單的例子。上面說到, y 是 x 的上下文,所以 y 只取上下文裡乙個詞語的時候,語言模型就變成:

用當前詞 x **它的下乙個詞 y

但如上面所說,一般的數學模型只接受數值型輸入,這裡的 x 該怎麼表示呢? 顯然不能用 word2vec,因為這是我們訓練完模型的產物,現在我們想要的是 x 的乙個原始輸入形式。

答案是:one-hot encoder

所謂 one-hot encoder,其思想跟特徵工程裡處理類別變數的 one-hot 一樣(參考我的前作『資料探勘比賽通用框架』、『深挖one-hot和dummy背後的玄機』)。本質上是用乙個只含乙個 1、其他都是 0 的向量來唯一表示詞語。

我舉個例子,假設全世界所有的詞語總共有 v 個,這 v 個詞語有自己的先後順序,假設『吳彥祖』這個詞是第1個詞,『我』這個單詞是第2個詞,那麼『吳彥祖』就可以表示為乙個 v 維全零向量、把第1個位置的0變成1,而『我』同樣表示為 v 維全零向量、把第2個位置的0變成1。這樣,每個詞語都可以找到屬於自己的唯一表示。

ok,那我們接下來就可以看看 skip-gram 的網路結構了,x 就是上面提到的 one-hot encoder 形式的輸入,y 是在這 v 個詞上輸出的概率,我們希望跟真實的 y 的 one-hot encoder 一樣。

首先說明一點:隱層的啟用函式其實是線性的,相當於沒做任何處理(這也是 word2vec 簡化之前語言模型的獨到之處),我們要訓練這個神經網路,用反向傳播演算法,本質上是鏈式求導,在此不展開說明了,

當模型訓練完後,最後得到的其實是神經網路的權重,比如現在輸入乙個 x 的 one-hot encoder: [1,0,0,…,0],對應剛說的那個詞語『吳彥祖』,則在輸入層到隱含層的權重裡,只有對應 1 這個位置的權重被啟用,這些權重的個數,跟隱含層節點數是一致的,從而這些權重組成乙個向量 vx 來表示x,而因為每個詞語的 one-hot encoder 裡面 1 的位置是不同的,所以,這個向量 vx 就可以用來唯一表示 x。

注意:上面這段話說的就是 word2vec 的精髓!!

此外,我們剛說了,輸出 y 也是用 v 個節點表示的,對應v個詞語,所以其實,我們把輸出節點置成 [1,0,0,…,0],它也能表示『吳彥祖』這個單詞,但是啟用的是隱含層到輸出層的權重,這些權重的個數,跟隱含層一樣,也可以組成乙個向量 vy,跟上面提到的 vx 維度一樣,並且可以看做是詞語『吳彥祖』的另一種詞向量。而這兩種詞向量 vx 和 vy,正是 mikolov 在**裡所提到的,『輸入向量』和『輸出向量』,一般我們用『輸入向量』。

需要提到一點的是,這個詞向量的維度(與隱含層節點數一致)一般情況下要遠遠小於詞語總數 v 的大小,所以 word2vec 本質上是一種降維操作——把詞語從 one-hot encoder 形式的表示降維到 word2vec 形式的表示。

上面討論的是最簡單情形,即 x只有乙個詞,當 y 有多個詞時,網路結構如下:

可以看成是 單個x->單個y 模型的併聯,cost function 是單個 cost function 的累加(取log之後)

跟 skip-gram 相似,只不過:

skip-gram 是**乙個詞的上下文,而 cbow 是用上下文**這個詞

網路結構如下

更 skip-gram 的模型併聯不同,這裡是輸入變成了多個單詞,所以要對輸入處理下(一般是求和然後平均),輸出的 cost function 不變,在此依然不展開

第九周(1) Word郵件合併2

第九周 1 word郵件合併2 教學時間 2013 4 22 教學課時 2教案序號 15教學目標 1 進一步掌握郵件合併的技巧和方法。2 利用郵件合併製作准考證。3 掌握在同一頁生成多個記錄的方法。教學過程 複習提問 1 郵件合併時出現小數點誤差 怎麼解決?2 如何利用郵件合併完成 批量生成 新課 ...

vue學習過程記錄 1

下面指令測試電腦有木有 node,npm vue c users node v v8.11.2 c users npm v 5.6.0 c users npm v usage npm where is one of access,adduser,bin,bugs,c,cache,completion...

記錄學習ABAP過程 1

拼接語法 concatenate 變數1 變數2into 文字1 in character mode 預設拼接引數 separated by 拼接分隔符 resyecting blanks.保留字串以外的其他空格 拆分語法 split 文字1 at into 變數1 變數2文字1 in charac...