日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

秒懂词向量Word2vec的本质

發布時間:2025/7/25 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秒懂词向量Word2vec的本质 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


[NLP] 秒懂詞向量Word2vec的本質 穆文 4 個月前

轉自我的公眾號: 『數據挖掘機養成記』


1. 引子

大家好
我叫數據挖掘機
皇家布魯斯特大學肄業
我喝最烈的果粒橙,鉆最深的牛角尖
——執著如我

今天我要揭開Word2vec的神秘面紗
直窺其本質

相信我,這絕對是你看到的
最淺白易懂的 Word2vec 中文總結

(蛤?你問我為啥有這個底氣?
且看下面,我的踩坑血淚史。。。)

2. Word2vec參考資料總結

(以下都是我踩過的坑,建議先跳過本節,閱讀正文部分,讀完全文回頭再來看)

先大概說下我深挖 word2vec 的過程:先是按照慣例,看了 Mikolov 關于 Word2vec 的兩篇原始論文,然而發現看完依然是一頭霧水,似懂非懂,主要原因是這兩篇文章省略了太多理論背景和推導細節;然后翻出 Bengio 03年那篇JMLR和 Ronan 11年那篇JMLR,看完對語言模型、用CNN處理NLP任務有所了解,但依然無法完全吃透 word2vec;這時候我開始大量閱讀中英文博客,其中 北漂浪子 的一篇閱讀量很多的博客吸引了我的注意,里面非常系統地講解了 Word2vec 的前因后果,最難得的是深入剖析了代碼的實現細節,看完之后細節方面了解了很多,不過還是覺得有些迷霧;終于,我在 quora 上看到有人推薦 Xin Rong 的那篇英文paper,看完之后只覺醍醐灌頂,酣暢淋漓,相見恨晚,成為我首推的 Word2vec 參考資料。下面我將詳細列出我閱讀過的所有 Word2vec 相關的參考資料,并給出評價

  • Mikolov 兩篇原論文:
  • 『Distributed Representations of Sentences and Documents』
    • 在前人基礎上提出更精簡的語言模型(language model)框架并用于生成詞向量,這個框架就是 Word2vec
  • 『Efficient estimation of word representations in vector space』
    • 專門講訓練 Word2vec 中的兩個trick:hierarchical softmax 和 negative sampling
  • 優點:Word2vec 開山之作,兩篇論文均值得一讀
  • 缺點:只見樹木,不見森林和樹葉,讀完不得要義。這里『森林』指 word2vec 模型的理論基礎——即 以神經網絡形式表示的語言模型,『樹葉』指具體的神經網絡形式、理論推導、hierarchical softmax 的實現細節等等
  • 北漂浪子的博客:『深度學習word2vec 筆記之基礎篇』
    • 優點:非常系統,結合源碼剖析,語言平實易懂
    • 缺點:太啰嗦,有點抓不住精髓
  • Yoav Goldberg 的論文:『word2vec Explained- Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method』
    • 優點:對 negative-sampling 的公式推導非常完備
    • 缺點:不夠全面,而且都是公式,沒有圖示,略顯干枯
  • Xin Rong 的論文:『word2vec Parameter Learning Explained』:
    • !重點推薦!
    • 理論完備由淺入深非常好懂,且直擊要害,既有 high-level 的 intuition 的解釋,也有細節的推導過程
    • 一定要看這篇paper!一定要看這篇paper!一定要看這篇paper!
  • 來斯惟的博士論文『基于神經網絡的詞和文檔語義向量表示方法研究』以及他的博客(網名:licstar)
    • 可以作為更深入全面的擴展閱讀,這里不僅僅有 word2vec,而是把詞嵌入的所有主流方法通通梳理了一遍
  • 幾位大牛在知乎的回答:『word2vec 相比之前的 Word Embedding 方法好在什么地方?』
    • 劉知遠、邱錫鵬、李韶華等知名學者從不同角度發表對 Word2vec 的看法,非常值得一看
  • Sebastian 的博客:『On word embeddings - Part 2: Approximating the Softmax』
    • 詳細講解了 softmax 的近似方法,Word2vec 的 hierarchical softmax 只是其中一種
  • 3. 正文

    你會在本文看到:

  • 提綱挈領地講解 word2vec 的理論精髓
  • 學會用gensim訓練詞向量,并尋找相似詞
  • 你不會在本文看到

  • 神經網絡訓練過程的推導
  • hierarchical softmax/negative sampling 等 trick 的理論和實現細節
  • 3.1. 什么是 Word2vec?

    在聊 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 尋找相似詞:

    • 對于一句話:『她們 夸 吳彥祖 帥 到 沒朋友』,如果輸入 x 是『吳彥祖』,那么 y 可以是『她們』、『夸』、『帥』、『沒朋友』這些詞
    • 現有另一句話:『她們 夸 我 帥 到 沒朋友』,如果輸入 x 是『我』,那么不難發現,這里的上下文 y 跟上面一句話一樣
    • 從而 f(吳彥祖) = f(我) = y,所以大數據告訴我們:我 = 吳彥祖(完美的結論)

    3.2. Skip-gram 和 CBOW 模型

    上面我們提到了語言模型

    • 如果是用一個詞語作為輸入,來預測它周圍的上下文,那這個模型叫做『Skip-gram 模型』
    • 而如果是拿一個詞語的上下文作為輸入,來預測這個詞語本身,則是 『CBOW 模型』

    3.2.1 Skip-gram 和 CBOW 的簡單情形

    我們先來看個最簡單的例子。上面說到, 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 形式的表示。

    3.2.2. Skip-gram 更一般的情形

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


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

    如果你想深入探究這些模型是如何并聯、 cost function 的形式怎樣,不妨仔細閱讀參考資料4. 在此我們不展開。

    3.2.3 CBOW 更一般的情形

    跟 Skip-gram 相似,只不過:

    Skip-gram 是預測一個詞的上下文,而 CBOW 是用上下文預測這個詞

    網絡結構如下


    更 Skip-gram 的模型并聯不同,這里是輸入變成了多個單詞,所以要對輸入處理下(一般是求和然后平均),輸出的 cost function 不變,在此依然不展開,建議你閱讀參考資料4.

    3.3. Word2vec 的訓練trick

    相信很多初次踩坑的同學,會跟我一樣陷入 Mikolov 那篇論文(參考資料1.)里提到的 hierarchical softmax 和 negative sampling 里不能自拔,但其實,它們并不是 Word2vec 的精髓,只是它的訓練技巧,但也不是它獨有的訓練技巧。 Hierarchical softmax 只是 softmax 的一種近似形式(詳見參考資料7.),而 negative sampling 也是從其他方法借鑒而來。

    為什么要用訓練技巧呢? 如我們剛提到的,Word2vec 本質上是一個語言模型,它的輸出節點數是 V 個,對應了 V 個詞語,本質上是一個多分類問題,但實際當中,詞語的個數非常非常多,會給計算造成很大困難,所以需要用技巧來加速訓練。

    這里我總結了一下這兩個 trick 的本質,有助于大家更好地理解,在此也不做過多展開,有興趣的同學可以深入閱讀參考資料1.~7.

    • hierarchical softmax
      • 本質是把 N 分類問題變成 log(N)次二分類
    • negative sampling
      • 本質是預測總體類別的一個子集

    3.4. 擴展

    很多時候,當我們面對林林總總的模型、方法時,我們總希望總結出一些本質的、共性的東西,以構建我們的知識體系,比如我在前作『分類和回歸的本質』里,原創性地梳理了分類模型和回歸模型的本質聯系,比如在詞嵌入領域,除了 Word2vec之外,還有基于共現矩陣分解的 GloVe 等等詞嵌入方法。

    深入進去我們會發現,神經網絡形式表示的模型(如 Word2vec),跟共現矩陣分解模型(如 GloVe),有理論上的相通性,這里我推薦大家閱讀參考資料5. ——來斯惟博士在它的博士論文附錄部分,證明了 Skip-gram 模型和 GloVe 的 cost fucntion 本質上是一樣的。是不是一個很有意思的結論? 所以在實際應用當中,這兩者的差別并不算很大,尤其在很多 high-level 的 NLP 任務(如句子表示、命名體識別、文檔表示)當中,經常把詞向量作為原始輸入,而到了 high-level 層面,差別就更小了。

    鑒于詞語是 NLP 里最細粒度的表達,所以詞向量的應用很廣泛,既可以執行詞語層面的任務,也可以作為很多模型的輸入,執行 high-level 如句子、文檔層面的任務,包括但不限于:

    • 計算相似度
      • 尋找相似詞
      • 信息檢索
    • 作為 SVM/LSTM 等模型的輸入
      • 中文分詞
      • 命名體識別
    • 句子表示
      • 情感分析
    • 文檔表示
      • 文檔主題判別

    4. 實戰

    上面講了這么多理論細節,其實在真正應用的時候,只需要調用 Gensim (一個 Python 第三方庫)的接口就可以。但對理論的探究仍然有必要,你能更好地知道參數的意義、模型結果受哪些因素影響,以及舉一反三地應用到其他問題當中,甚至更改源碼以實現自己定制化的需求。

    這里我們將使用 Gensim 和 NLTK 這兩個庫,來完成對生物領域的相似詞挖掘,將涉及:

    • 解讀 Gensim 里 Word2vec 模型的參數含義
    • 基于相應語料訓練 Word2vec 模型,并評估結果
    • 對模型結果調優

    語料我已經放出來了,可以關注我的公眾號『數據挖掘機養成記』,并回復 Sherlocked 獲取語料,包含5000行生物醫學領域相關文獻的摘要(英文)


    我將在下一篇文章里詳細講解實戰步驟,敬請關注本人公眾號。友情建議:請先自行安裝 Gensim 和 NLTK 兩個庫,并建議使用 jupyter notebook 作為代碼運行環境


    歡迎各路大神猛烈拍磚,共同交流


    ====評論區答疑節選====

    Q1. gensim 和 google的 word2vec 里面并沒有用到onehot encoder,而是初始化的時候直接為每個詞隨機生成一個N維的向量,并且把這個N維向量作為模型參數學習;所以word2vec結構中不存在文章圖中顯示的將V維映射到N維的隱藏層。

    A1. 其實,本質是一樣的,加上 one-hot encoder 層,是為了方便理解,因為這里的 N 維隨機向量,就可以理解為是 V 維 one-hot encoder 輸入層到 N 維隱層的權重,或者說隱層的輸出(因為隱層是線性的)。每個 one-hot encoder 里值是 1 的那個位置,對應的 V 個權重被激活,其實就是『從一個V*N的隨機詞向量矩陣里,抽取某一行』。學習 N 維向量的過程,也就是優化 one-hot encoder 層到隱含層權重的過程

    Q2. hierarchical softmax 獲取詞向量的方式和原先的其實基本完全不一樣,我初始化輸入的也不是一個onehot,同時我是直接通過優化輸入向量的形式來獲取詞向量?如果用了hierarchical 結構我應該就沒有輸出向量了吧?


    A2. 初始化輸入依然可以理解為是 one-hot,同上面的回答;確實是只能優化輸入向量,沒有輸出向量了。具體原因,我們可以梳理一下不用 hierarchical (即原始的 softmax) 的情形:

    隱含層輸出一個 N 維向量 x, 每個x 被一個 N 維權重 w 連接到輸出節點上,有 V 個這樣的輸出節點,就有 V 個權重 w,再套用 softmax 的公式,變成 V 分類問題。這里的類別就是詞表里的 V 個詞,所以一個詞就對應了一個權重 w,從而可以用 w 作為該詞的詞向量,即文中的輸出詞向量。

    PS. 這里的 softmax 其實多了一個『自由度』,因為 V 分類只需要 V-1 個權重即可

    我們再看看 hierarchical softmax 的情形:

    隱含層輸出一個 N 維向量 x, 但這里要預測的目標輸出詞,不再是用 one-hot 形式表示,而是用 huffman tree 的編碼,所以跟上面 V 個權重同時存在的原始 softmax 不一樣, 這里 x 可以理解為先接一個輸出節點,即只有一個權重 w1 ,輸出節點輸出 1/1+exp(-w*x),變成一個二分類的 LR,輸出一個概率值 P1,然后根據目標詞的 huffman tree 編碼,將 x 再輸出到下一個 LR,對應權重 w2,輸出 P2,總共遇到的 LR 個數(或者說權重個數)跟 huffman tree 編碼長度一致,大概有 log(V) 個,最后將這 log(V) 個 P 相乘,得到屬于目標詞的概率。但注意因為只有 log(V) 個權重 w 了,所以跟 V 個詞并不是一一對應關系,就不能用 w 表征某個詞,從而失去了詞向量的意義

    PS. 但我個人理解,這 log(V) 個權重的組合,可以表示某一個詞。因為 huffman tree 構建的時候,可以理解成是一個不斷『二分』的過程,不斷二分到只剩一個詞為止。而每一次二分,都有一個 LR 權重,這個權重可以表征該類詞,所以這些權重拼接在一起,就表示了『二分』這個過程,以及最后分到的這個詞的『輸出詞向量』。

    我舉個例子:

    假設現在總共有 (A,B,C)三個詞,huffman tree 這么構建:
    第一次二分: (A,B), (C)
    假如我們用的 LR 是二分類 softmax 的情形(比常見 LR 多了一個自由度),這樣 LR 就有倆權重,權重 w1_1 是屬于 (A,B) 這一類的,w1_2 是屬于 (C) 的, 而 C 已經到最后一個了,所以 C 可以表示為 w1_2

    第二次二分: (A), (B)
    假設權重分別對應 w2_1 和 w2_2,那么 A 就可以表示為 [w1_1, w2_1], B 可以表示為 [w1_1, w2_2]

    這樣, A,B,C 每個詞都有了一個唯一表示的詞向量(此時他們長度不一樣,不過可以用 padding 的思路,即在最后補0)

    當然了,一般沒人這么干。。。開個腦洞而已

    Q3. 待續

    「歡迎打賞支持24K純原創」 贊賞 還沒有人贊賞,快來當第一個贊賞的人吧! 自然語言處理機器學習人工智能 169 收藏 分享 舉報 文章被以下專欄收錄
    • 數據挖掘機養成記

      歡迎來到我的 Mind Palace

      進入專欄
    37 條評論 寫下你的評論...
    取消 評論 jiangxihj 能不能專業點,還用 jupyter notebook 4 個月前 贊 舉報 HTLiu 哈哈 看的思路一樣,先兩篇論文,再xinrong的,再萊斯維大神,再代碼,再實踐。還有一個非常好的中文資源,Word2vec數學原理詳解,與xinrong從倆角度出發講解的,不過總體思路差不多 4 個月前 贊 舉報 查看對話 穆文(作者)回復HTLiu

    多謝補充,我想起來我本地還有這個的 pdf 版本,確實講的很仔細

    4 個月前 贊 舉報 方麗汶 老師教我們的也是用Xin RONG的,滿是懷念 4 個月前 贊 舉報 查看對話 Atwood回復jiangxihj

    那你用什么了

    4 個月前 贊 舉報 查看對話 穆文(作者)回復jiangxihj 說的沒錯,jupyter notebook 更適合做交互式的演示,寫工程性項目的話,還是推薦 IDE,比如 Pycharm,或者用 sublime+anaconda插件 4 個月前 贊 舉報 查看對話 李亞軍回復jiangxihj 不能忍,這么歧視 Jupyter Notebook?不用他就是專業了? 4 個月前 贊 舉報 math love 秒? 4 個月前 贊 舉報 一笑百里無云飄 專業請教下,這個w2v和“輸入一句話x,輸出一句話y”之間跨過了哪些知識?給個鏈接,謝謝 4 個月前 贊 舉報 查看對話 穆文(作者)回復一笑百里無云飄

    你是指,我文中提到的,language model?

    4 個月前 贊 舉報 12 3 4 下一頁 推薦閱讀
    • 意識流——寫在第n次卸載王者榮耀之后

      前言引子元動力小議『折騰』心流自控接納自己遠離誘惑觀察者角度正確的積累后記Bonus前言最…查看全文

      穆文 1 個月前 發表于數據挖掘機養成記
    • 如何應對境外敵對勢力?——來自立陶宛克格勃的證據

      情報和安全部門,神秘而可怖。內心再好奇,恐怕也不想親身進去走一遭。當代的情況自然是無法…查看全文

      Manolo 8 天前 編輯精選
    • 炎炎夏日,只要會煮米飯,也能迅速端出一桌菜!

      本文僅限知乎與「艾格吃飽了」。夏天太熱不想開火,有油鍋恐懼癥,有沒有辦法端出一桌菜?其…查看全文

      沒事干研究院 13 天前 編輯精選
    • 那些吉他琴橋你不知道的事

      原聲吉他看似結構十分簡單,所有的部件也沒多少,為什么會有如此大的聲音差異,到底這些不同…查看全文

      大洪 22 天前 編輯精選
    {"debug":false,"apiRoot":"","paySDK":"https://pay.zhihu.com/api/js","wechatConfigAPI":"/api/wechat/jssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":"2|7f8a7960|49bd1c504eeb480452b34b554ea74d574bba54011eb9414d1dbd1a011beb1b554ae84951|1501662414","X-UDID":null,"Authorization":"oauthc3cef7c66a1843f8b3a9e6a1e3160e20"}} {"database":{"Post":{"26306795":{"title":"[NLP]秒懂詞向量Word2vec的本 質","author":"DataTerminatorX","content":"<p><b><i>轉自我的 公眾號: 『數據挖掘機養成記』</i></b></p>\n<br><h2>1. 引子</h2>\n<p>大家好<br>我叫數據挖掘機<br>皇家布魯斯特大學肄 業<br>我喝最烈的果粒橙,鉆最深的牛角尖<br>——執著如我</p>\n<p>今天我要揭 開<strong>Word2vec</strong>的神秘面紗<br>直窺其本質< /p>\n<blockquote><p>相信我,這絕對是你看到的<br>最淺白易懂的 Word2vec中文總結</p>\n</blockquote>\n<p>(蛤?你問我為啥有這個底氣?<br>且看 下面,我的踩坑血淚史。。。)</p>\n<h2>2. Word2vec參考資料總結</h2>\n<p>(<strong><em>以下都是我踩過的坑,建 議先跳過本節,閱讀正文部分,讀完全文回頭再來看</em></strong>)</p>\n<p>先 大概說下我深挖 word2vec 的過程:先是按照慣例,看了 Mikolov 關于 Word2vec 的兩篇原始論文,然而發現看完依然是一頭霧水,似懂非懂,主要原因是這兩篇文章省略了太多理論背景和推導細節;然后翻出 Bengio 03年那篇JMLR和 Ronan 11年那篇JMLR,看完對語言模型、用CNN處理NLP任務有所了解,但依然無法完全吃透 word2vec;這時候我開始大量閱讀中英文博客,其中 北漂浪子 的一篇閱讀量很多的博客吸引了我的注意,里面非常系統地講解了 Word2vec 的前因后果,最難得的是深入剖析了代碼的實現細節,看完之后細節方面了解了很多,不過還是覺得有些迷霧;終于,我在 quora 上看到有人推薦 XinRong 的那篇英文paper,看完之后只覺醍醐灌頂,酣暢淋漓,相見恨晚,成為我首推的 Word2vec 參考資料。下面我將詳細列出我閱讀過的所有 Word2vec 相關的參考資料,并給出評價</p>\n<ol><li>Mikolov 兩篇原論文:<ol><li>『Distributed Representations of Sentences and Documents』<ul><li>在前人基礎上提出更精簡的語言模型(language model)框架并用于生成詞向量,這個框架就是 Word2vec</li>\n</ul></li>\n<li>『Efficient estimation of word representations in vector space』<ul><li>專門講訓練 Word2vec 中的兩個trick:hierarchical softmax 和negative sampling</li>\n</ul></li>\n<li>優點:Word2vec 開山之作,兩篇論文均值得一讀</li>\n<li>缺點:只見樹木,不見森林和樹葉,讀完不得要義。這里『森林』指 word2vec 模型的理論基礎——即 以神經網絡形式表示的語言模型,『樹葉』指具體的神經網絡形式、理論推導、hierarchical softmax 的實現細節等等</li>\n</ol></li>\n<li>北漂浪子的博客:『深度學習 word2vec 筆記之基礎篇』<ul><li>優點:非常系統,結合源碼剖析,語言平實易懂</li>\n<li>缺 點:太啰嗦,有點抓不住精髓</li>\n</ul></li>\n<li>Yoav Goldberg 的論文:『word2vec Explained- Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method』<ul><li>優點:對 negative-sampling 的公式推導非常完備</li>\n<li>缺點:不夠全面,而且都是公式,沒有圖示,略顯干枯</li> \n</ul></li>\n<li>Xin Rong 的論文:『word2vec Parameter Learning Explained』:<ul><li><strong>!重點推薦!</strong>< /li>\n<li>理論完備由淺入深非常好懂,且直擊要害,既有 high-level 的 intuition 的解釋,也有細節的推導過程</li>\n<li>一定要看這篇paper!一定要看這篇paper!一定要看這篇 paper!</li>\n</ul></li>\n<li>來斯惟的博士論文『基于神經網絡的詞和文 檔語義向量表示方法研究』以及他的博客(網名:licstar)<ul><li>可以作為更深入全面的擴展閱讀,這里不僅僅有 word2vec,而是把詞嵌入的所有主流方法通通梳理了一遍</li>\n</ul></li> \n<li>幾位大牛在知乎的<a href=\"https://www.zhihu.com/question/53011711\" data-editable=\"true\" data-title=\"回答\">回答</a>:『word2vec 相比之前的 Word Embedding 方法好在什么地方?』<ul><li>劉知遠、邱錫鵬、李韶華等知名學者從不同角度發表對 Word2vec 的看法,非常值得一看</li>\n</ul></li>\n<li>Sebastian 的博客:『On word embeddings - Part 2: Approximating the Softmax』<ul><li>詳細講解了 softmax 的近似方法,Word2vec 的 hierarchical softmax 只是其中一種</li>\n</ul></li>\n</ol><h2>3. 正文</h2>\n<blockquote><p>你會在本文看到:</p> \n<ol><li>提綱挈領地講解 word2vec 的理論精髓</li>\n<li>學會用gensim訓練詞向量,并尋找相似詞</li>\n< /ol><p>你不會在本文看到</p>\n<ol><li>神經網絡訓練過程的推導< /li>\n<li>hierarchical softmax/negative sampling 等 trick 的理論和實現細節</li>\n</ol></blockquote>\n<h3>3.1. 什么是 Word2vec?</h3>\n<p>在聊 Word2vec 之前,先聊聊 NLP (自然語言處理)。NLP 里面,最細粒度的是 詞語,詞語組成句子,句子再組成段落、篇章、文檔。所以處理 NLP 的問題,首先就要拿詞語開刀。</p>\n<p>舉個簡單例子,判斷一個詞的詞性,是動詞還是名詞。用機器學習的思路,我們有一 系列樣本(x,y),這里 x 是詞語,y 是它們的詞性,我們要構建 f(x)-&gt;y 的映射,但這里的數學模型 f(比如神經網絡、SVM)只接受數值型輸入,而 NLP 里的詞語,是人類的抽象總結,是符號形式的(比如中文、英文、拉丁文等等),所以需要把他們轉換成數值形式,或者說——嵌入到一個數學空間里,這種嵌入方 式,就叫詞嵌入(word embedding),而 Word2vec,就是詞嵌入( word embedding) 的一種</p>\n<p>我在前作『都是套路: 從上帝視角看透時間序列和數據挖掘』提到,大部分的有監督機器學習模型,都可以歸結 為:</p>\n<blockquote><p>f(x)-&gt;y</p>\n< /blockquote>\n<p>在 NLP 中,把 x 看做一個句子里的一個詞語,y 是這個詞語的上下文詞語,那么這里的 f,便是 NLP 中經常出現的『語言模型』(language model),這個模型的目的,就是判斷 (x,y) 這個樣本,是否符合自然語言的法則,更通俗點說就是:詞語x和詞語y放在一起,是不是人話。</p>\n<p>Word2vec正是來源于這個思想,但它的最終目的,不是要把 f 訓練得多么完美,而是只關心模型訓練完后的副產物——模型參數(這里特指神經網絡的權重),并將這些參數,作為輸入 x 的某種向量化的表示,這個向量便叫做——詞向量(這里看不懂沒關系,下一節我們詳細剖析)。</p>\n<p>我們來看個例子, 如何用 Word2vec 尋找相似詞:</p>\n<ul><li>對于一句話:『她們 夸 吳彥祖 帥 到 沒朋友』,如果輸入 x 是『吳彥祖』,那么 y 可以是『她們』、『夸』、『帥』、『沒朋友』這些詞</li>\n<li>現有另一句話:『她們 夸 我 帥 到 沒朋友』,如果輸入 x 是『我』,那么不難發現,這里的上下文 y 跟上面一句話一樣</li>\n<li>從而 f(吳彥祖) = f(我) = y,所以大數據告訴我們:我 = 吳彥祖(完美的結論)</li>\n</ul><h3>3.2. Skip-gram 和 CBOW 模型</h3>\n<p>上面我們提到了語言模型</p>\n<ul><li>如果是用一 個詞語作為輸入,來預測它周圍的上下文,那這個模型叫做『Skip-gram 模型』</li>\n<li>而如果是拿一個詞語的上下文作為輸入,來預測這個詞語本身,則是 『CBOW 模型』</li>\n</ul><h4>3.2.1 Skip-gram 和 CBOW 的簡單情形</h4>\n<p>我們先來看個最簡單的例子。上面說到, y 是 x 的上下文,所以 y 只取上下文里一個詞語的時候,語言模型就變成:</p>\n<blockquote><p>用當前詞 x 預測它的下一個詞 y</p>\n</blockquote>\n<p>但如上面所說,一般的數學模型只接受數值型輸入,這里的 x 該怎么表示呢? 顯然不能用 Word2vec,因為這是我們訓練完模型的產物,現在我們想要的是 x 的一個原始輸入形式。</p>\n<p>答案是:<strong>one-hot encoder</strong></p>\n<p>所謂 one-hot encoder,其思想跟特征工程里處理類別變量的 one-hot 一樣(參考我的前作『數據挖掘比賽通用框架』、『深挖One-hot和Dummy背后的玄機』)。本質上是用一個只含一個 1、其他都是 0 的向量來唯一表示詞語。</p>\n<p>我舉個例子,假設全世界所有的詞語總共有 V 個,這 V 個詞語有自己的先后順序,假設『吳彥祖』這個詞是第1個詞,『我』這個單詞是第2個詞,那么『吳彥祖』就可以表示為一個 V 維全零向量、把第1個位置的0變成1,而『我』同樣表示為 V 維全零向量、把第2個位置的0變成1。這樣,每個詞語都可以找到屬于自己的唯一表示。</p>\n<p>OK,那我們接下來就可 以看看 Skip-gram 的網絡結構了,x 就是上面提到的 one-hot encoder 形式的輸入,y 是在這 V 個詞上輸出的概率,我們希望跟真實的 y 的 one-hot encoder 一樣。<br></p>\n<img src=\"v2-a1a73c063b32036429fbd8f1ef59034b.png\" data-rawwidth=\"682\" data-rawheight=\"388\"><br><p>首先說明一點:<b>隱層的激活函數其實是線 性的</b>,相當于沒做任何處理(這也是 Word2vec 簡化之前語言模型的獨到之處),我們要訓練這個神經網絡,用<strong>反向傳播算法</strong>,本質上 是<em>鏈式求導</em>,在此不展開說明了,<br></p>\n<p>當模型訓練 完后,最后得到的其實是<strong>神經網絡的權重</strong>,比如現在輸入一個 x 的 one-hot encoder: [1,0,0,…,0],對應剛說的那個詞語『吳彥祖』,則在輸入層到隱含層的權重里,只有對應 1 這個位置的權重被激活,這些權重的個數,跟隱含層節點數是一致的,從而這些權重組成一個向量 vx 來表示x,而因為每個詞語的 one-hot encoder 里面 1 的位置是不同的,所以,這個向量 vx 就可以用來唯一表示 x。</p>\n<p><strong><em>注意:上面這段話說的就是 Word2vec 的精髓!!</em></strong></p>\n<p>此外,我們剛說了,輸出 y 也是用 V 個節點表示的,對應V個詞語,所以其實,我們把輸出節點置成 [1,0,0,…,0],它也能表示『吳彥祖』這個單詞,但是激活的是隱含層到輸出層的權重,這些權重的個數,跟隱含層一樣,也可以組成一個向量 vy,跟上面提到的 vx 維度一樣,并且可以看做是<strong>詞語『吳彥祖』的另一種詞向量</strong>。而這兩種詞向量 vx 和 vy,正是 Mikolov 在論文里所提到的,『輸入向量』和『輸出向量』,一般我們用『輸入向量』。</p>\n<p>需要提到一點的是,這個詞向量的維 度(與隱含層節點數一致)一般情況下要遠遠小于詞語總數 V 的大小,所以 Word2vec 本質上是一種<strong>降維</strong>操作——把詞語從 one-hot encoder 形式的表示降維到 Word2vec 形式的表示。</p>\n<h3>3.2.2. Skip-gram 更一般的情形</h3>\n<p>上面討論的是最簡單情形,即 y 只有一個詞,當 y 有多個詞時,網絡結構如下:<br><img src=\"v2-ca81e19caa378cee6d4ba6d867f4fc7c.png\" data-rawwidth=\"540\" data-rawheight=\"617\"><br></p>\n<blockquote><p& gt;可以看成是 單個x-&gt;單個y 模型的并聯,cost function 是單個 cost function 的累加(取log之后)</p>\n</blockquote>\n<p>如果你想深入探究這些模型是如何并聯、 cost function 的形式怎樣,不妨仔細閱讀參考資料4. 在此我們不展開。</p>\n<h3>3.2.3 CBOW 更一般的情形</h3>\n<p>跟 Skip-gram 相似,只不過:</p>\n<blockquote><p>Skip-gram 是預測一個詞的上下文,而 CBOW 是用上下文預測這個詞</p>\n</blockquote>\n<p>網絡結構如下<br>< /p><img src=\"v2-d1ca2547dfb91bf6a26c60782a26aa02.png\" data-rawwidth=\"518\" data-rawheight=\"646\"><br><p>更 Skip-gram 的模型并聯不同,這里是輸入變成了多個單詞,所以要對輸入處理下(一般是求和然后平均),輸出的 cost function 不變,在此依然不展開,建議你閱讀參考資料4.</p>\n<h3>3.3. Word2vec 的訓練trick</h3>\n<p>相信很多初次踩坑的同學,會跟我一樣陷入 Mikolov 那篇論文(參考資料1.)里提到的 hierarchical softmax 和 negative sampling 里不能自拔,但其實,它們并不是 Word2vec 的精髓,只是它的訓練技巧,但也不是它獨有的訓練技巧。 Hierarchical softmax只是 softmax 的一種近似形式(詳見參考資料7.),而 negative sampling 也是從其他方法借鑒而來。</p>\n<p>為什么要用訓練技巧呢? 如我們剛提到的,Word2vec 本質上是一個語言模型,它的輸出節點數是 V 個,對應了 V 個詞語,本質上是一個多分類問題,但實際當中,詞語的個數非常非常多,會給計算造成很大困難,所以需要用技巧來加速訓 練。</p>\n<p>這里我總結了一下這兩個 trick 的本質,有助于大家更好地理解,在此也不做過多展開,有興趣的同學可以深入閱讀參考資料 1.~7.</p>\n<ul><li>hierarchical softmax<ul><li>本質是把 N 分類問題變成 log(N)次二分類</li>\n</ul></li>\n<li>negative sampling<ul><li>本質是預測總體類別的一個子集</li>\n</ul>< /li>\n</ul><h3>3.4. 擴展</h3>\n<p>很多時候,當我們面對林林總總的模型、方法時,我們總希望總結出一些本質的、共性的東西,以構建我們的 知識體系,比如我在前作『分類和回歸的本質』里,原創性地梳理了分類模型和回歸模型的本質聯系,比如在詞嵌入領域,除了 Word2vec之外,還有基于共現矩陣分解的 GloVe 等等詞嵌入方法。</p>\n<p>深入進去我們會發現,神經網絡形式表示的模型(如 Word2vec),跟共現矩陣分解模型(如 GloVe),有理論上的相通性,這里我推薦大家閱讀參考資料5. ——來斯惟博士在它的博士論文附錄部分,證明了 Skip-gram 模型和 GloVe 的 cost fucntion 本質上是一樣的。是不是一個很有意思的結論? 所以在實際應用當中,這兩者的差別并不算很大,尤其在很多 high-level 的 NLP 任務(如句子表示、命名體識別、文檔表示)當中,經常把詞向量作為原始輸入,而到了 high-level 層面,差別就更小了。</p>\n<p>鑒于詞語是 NLP 里最細粒度的表達,所以詞向量的應用很廣泛,既可以執行詞語層面的任務,也可以作為很多模型的輸入,執行 high-level 如句子、文檔層面的任務,包括但不限于:</p>\n<ul><li>計算相似 度<ul><li>尋找相似詞</li>\n<li>信息檢索</li>\n< /ul></li>\n<li>作為 SVM/LSTM 等模型的輸入<ul><li>中文分詞</li>\n<li>命名體識別</li> \n</ul></li>\n<li>句子表示<ul><li>情感分析< /li>\n</ul></li>\n<li>文檔表示<ul><li>文檔主題判 別</li>\n</ul></li>\n</ul><h2>4. 實戰</h2>\n<p>上面講了這么多理論細節,其實在真正應用的時候,只需要調用 Gensim (一個 Python 第三方庫)的接口就可以。但對理論的探究仍然有必要,你能更好地知道參數的意義、模型結果受哪些因素影響,以及舉一反三地應用到其他問題當中,甚至更改源 碼以實現自己定制化的需求。</p>\n<p>這里我們將使用 Gensim 和 NLTK 這兩個庫,來完成對生物領域的相似詞挖掘,將涉及:</p>\n<ul><li>解讀 Gensim 里 Word2vec 模型的參數含義</li>\n<li>基于相應語料訓練 Word2vec 模型,并評估結果</li>\n<li>對模型結果調優</li>\n</ul><p>語 料我已經放出來了,可以關注我的公眾號『數據挖掘機養成記』,并回復 Sherlocked 獲取語料,包含5000行生物醫學領域相關文獻的摘要(英文)</p><br><p>我將在下一篇文章里詳細講解實 戰步驟,敬請關注本人公眾號。友情建議:請先自行安裝 Gensim 和 NLTK 兩個庫,并建議使用 jupyter notebook 作為代碼運行環境</p><br><p><i><b>歡迎各路大神猛烈拍磚,共同交 流</b></i></p><br><p>====評論區答疑節選====</p& gt;<p>Q1. gensim 和 google的 word2vec 里面并沒有用到onehot encoder,而是初始化的時候直接為每個詞隨機生成一個N維的向量,并且把這個N維向量作為模型參數學習;所以word2vec結構中不存在文章圖中 顯示的將V維映射到N維的隱藏層。</p><p>A1. 其實,本質是一樣的,加上 one-hot encoder 層,是為了方便理解,因為這里的 N 維隨機向量,就可以理解為是 V 維 one-hot encoder 輸入層到 N 維隱層的權重,或者說隱層的輸出(因為隱層是線性的)。每個 one-hot encoder 里值是 1 的那個位置,對應的 V 個權重被激活,其實就是『從一個V*N的隨機詞向量矩陣里,抽取某一行』。學習 N 維向量的過程,也就是優化 one-hot encoder 層到隱含層權重的過程</p><p>Q2. hierarchical softmax 獲取詞向量的方式和原先的其實基本完全不一樣,我初始化輸入的也不是一個onehot,同時我是直接通過優化輸入向量的形式來獲取詞向量?如果用了 hierarchical 結構我應該就沒有輸出向量了吧?<br></p><br><p>A2. 初始化輸入依然可以理解為是 one-hot,同上面的回答;確實是只能優化輸入向量,沒有輸出向量了。具體原因,我們可以梳理一下不用 hierarchical (即原始的 softmax) 的情形:</p><blockquote>隱含層輸出一個 N 維向量 x, 每個x 被一個 N 維權重 w 連接到輸出節點上,有 V 個這樣的輸出節點,就有 V 個權重 w,再套用 softmax 的公式,變成 V 分類問題。這里的類別就是詞表里的 V 個詞,所以一個詞就對應了一個權重 w,從而可以用 w 作為該詞的詞向量,即文中的輸出詞向量。<br><br>PS. 這里的 softmax 其實多了一個『自由度』,因為 V 分類只需要 V-1 個權重即可</blockquote><p>我們再看看 hierarchical softmax 的情形:</p><blockquote>隱含層輸出一個 N 維向量 x, 但這里要預測的目標輸出詞,不再是用 one-hot 形式表示,而是用 huffman tree 的編碼,所以跟上面 V 個權重同時存在的原始 softmax 不一樣, 這里 x 可以理解為先接一個輸出節點,即只有一個權重 w1 ,輸出節點輸出 1/1+exp(-w*x),變成一個二分類的 LR,輸出一個概率值 P1,然后根據目標詞的 huffman tree 編碼,將 x 再輸出到下一個 LR,對應權重 w2,輸出 P2,總共遇到的 LR 個數(或者說權重個數)跟 huffman tree 編碼長度一致,大概有 log(V) 個,最后將這 log(V) 個 P 相乘,得到屬于目標詞的概率。但注意因為只有 log(V) 個權重 w 了,所以跟 V 個詞并不是一一對應關系,就不能用 w 表征某個詞,從而失去了詞向量的意義<br><br>PS. 但我個人理解,這 log(V) 個權重的組合,可以表示某一個詞。因為 huffman tree 構建的時候,可以理解成是一個不斷『二分』的過程,不斷二分到只剩一個詞為止。而每一次二分,都有一個 LR 權重,這個權重可以表征該類詞,所以這些權重拼接在一起,就表示了『二分』這個過程,以及最后分到的這個詞的『輸出詞向 量』。<br><br>我舉個例子:<br><br>假設現在總共有 (A,B,C)三個詞,huffman tree 這么構建:<br>第一次二分: (A,B), (C)<br>假如我們用的LR 是二分類 softmax 的情形(比常見 LR 多了一個自由度),這樣 LR 就有倆權重,權重 w1_1 是屬于 (A,B) 這一類的,w1_2 是屬于 (C) 的, 而 C 已經到最后一個了,所以 C 可以表示為 w1_2<br><br>第二次二分: (A), (B)<br>假設權重分別對應 w2_1 和 w2_2,那么A 就可以表示為 [w1_1, w2_1], B 可以表示為 [w1_1, w2_2]<br><br>這樣, A,B,C 每個詞都有了一個唯一表示的詞向量(此時他們長度不一樣,不過可以用 padding 的思路,即在最后補0)<br><br>當然了,一般沒人這么干。。。開個腦洞而 已</blockquote><br><br><p>Q3. 待 續</p>","updated":"2017-04-11T13:07:12.000Z","canComment":false,"commentPermission":"anyone","commentCount":37,"likeCount":169,"state":"published","isLiked":false,"slug":"26306795","isTitleImageFullScreen":false,"rating":"none","sourceUrl":"","publishedTime":"2017-04-11T21:07:12+08:00","links": {"comments":"/api/posts/26306795/comments"},"url":"/p /26306795","titleImage":"https://pic4.zhimg.com/v2- a1a73c063b32036429fbd8f1ef59034b_r.png","summary":"","href":"/api/posts /26306795","meta": {"previous":null,"next":null},"snapshotUrl":"","commentsCount":37,"likesCount":169},"27728292": {"title":"意識流——寫在第n次卸載王者榮耀之 后","author":"DataTerminatorX","content":"<a href=\"#_2\" data-editable=\"true\" data-title=\"前言\">前言</a><a href=\"#_3\" data-editable=\"true\" data-title=\"引子\">引子</a><a href=\"#_4\" data-editable=\"true\" data-title=\"元動力\">元動力</a><a href=\"#_5\" data-editable=\"true\" data-title=\"小議『折騰』\">小議『折騰』</a><a href=\"#_6\" data-editable=\"true\" data-title=\"心流\">心流</a><a href=\"#_7\" data-editable=\"true\" data-title=\"自控\">自控</a><a href=\"#_8\" data-editable=\"true\" data-title=\"接納自己\">接納自己</a><a href=\"#_9\" data-editable=\"true\" data-title=\"遠離誘惑\">遠離誘惑</a><a href=\"#_10\" data-editable=\"true\" data-title=\"觀察者角度\">觀察者角度</a><a href=\"#_11\" data-editable=\"true\" data-title=\"正確的積累\">正確的積累</a><a href=\"#_12\" data-editable=\"true\" data-title=\"后記\">后記</a><a href=\"#bonus\" data-editable=\"true\" data-title=\"Bonus\">Bonus</a><h2>前言</h2>\n<p& gt;最近在探究技術問題的同時,不免思考些形而上的東西。畢竟埋頭做事的同時,也要抬頭看路,這是技術人員必須學會的。但思考來思考去,也只是些碎片化 的觀點,比較淺顯,不成體系。在這里跟大家分享一下,我會盡量按照一定的邏輯梳理我的觀點,并且結合我的實踐,給出可行性建 議。</p>\n<p>首先聲明,我絕非要像人生導師般灌輸雞湯(那是李開復們、卡耐基們的使命),以我的資質遠不夠格,只是想 通過我的公眾號平臺,跟大家分享觀點,產生共鳴或者觀點碰撞最好,<strong>歡迎留言</strong>< /p>\n<p>另外我也是受到很多大神觀點的啟發,比如很早之前我推薦過劉未鵬的『暗時間』、Brown的『學會提問——批判性思維 指南』,以及網上諸多高質量回答(如 黃白小貓、肥肥貓、科學家種太陽等知名答主),還有身邊對我產生重要影響的朋友,所 以:</p>\n<blockquote><p><strong>本文受眾< /strong>:<br>跟我一樣不時會迷茫、會慵懶、會放縱自己,希望能改變當前生活和工作狀態的朋友< /p>\n</blockquote>\n<h2>引子</h2>\n<p>說起來慚愧,在奔三 的路上已走了一半了,卻還經常會沉迷游戲美劇,會由著性子做事情,會鉆牛角尖。相信像我這樣的朋友,不在少數(看每天深夜時分 王者榮耀的好友在線數就知道了…)。當屏幕關掉的那一刻,不知是否突然會感覺到,空虛和慌張?</p>\n<p>而你我的身邊, 可能都會有這樣的同事/同學:他們每天高效地學習、工作,把時間安排得井井有條,每天都有提升,并會階段性產生質變——比如paper一篇接一篇、項目突 破性進展、快速升職加薪、創業公司上市、生活質量提升… 人生仿佛開掛。</p>\n<p>你很羨慕,很向往,于是你開始模仿,開始看成功學給自己打雞血,開始學習各種花式時間管理方法 ——卻發現不得要領——why? ——因為雞湯永遠是泛泛而談,知乎live大多是收割智商稅。因為它們不會去了解你,了解你的性格,了解你的背景和資源,了解你的優缺點,了解你的智商、 能力上限,但這不怪他們——了解你的人,永遠只有你自己。</p>\n<h2>元動力</h2> \n<p>劉未鵬提到過一個觀點,叫『元認知』,我把這個概念移植到本文,叫『<strong>元動 力</strong>』。顧名思義,元動力是一切動力的基礎,沒有元動力,其他都是扯淡。</p>\n<p>而這個 元動力,我認為就是</p>\n<blockquote><p>你想成為怎樣的人</p>\n< /blockquote>\n<p>是不是非常沒創意?多么爛俗的一個問題——屢屢見于各類雞湯、成功學。但,他們都沒有給出,你真正 想要的答案,對么?</p>\n<p>對這個問題,你可能會給出非常多維的回答:</p> \n<ul><li>我想在事業上有成就,賺大錢,娶個秀外慧中的姑娘,走上人生巔峰</li> \n<li>我想平平淡淡安安穩穩過日子,買個房子慢慢還貸,娶個老婆經濟適用,退休后下棋打牌,跟三五老友不時走 動。</li>\n</ul><p>但我覺得,這些回答賦予了人生太多意義——要知道,人生本無意義(參見前作『寫 在入職一周年』),人生只是一種經歷。所以對于這個問題,我個人把它等價轉換 成:</p>\n<blockquote><p>你是否愿意折騰人生</p>\n< /blockquote>\n<img src=\"v2-0995ed7f0723af70c2099ee1c461a2db.jpg\"data-rawwidth=\"500\" data-rawheight=\"276\"><br><p>——依然很寬泛,有雞湯的嫌疑。但至此,我們已經大大簡化 問題,cut掉很多維度(事業、賺錢、娶妻生子、買房…),只留下唯一一個維度——是否愿意折騰</p>\n<p>先不急著回答 這個問題。前段時間在知乎上看到一個熱門問題——『是不是大部分男性到了 40 歲,活著特沒意思?』——滿屏的答案看著讓人絕望,原來大多數人到中年,都已泯然眾人平庸無奇。 其實也在意料之中,我們不妨去觀察下我們的父輩,90后的父輩基本分布在45~55歲的區間,去看看他們的人生經歷是怎樣的——從自己最親近的人身上,往 往能感受到強烈的情感代入和性格、背景上的共性,能更直觀地找到我們的答案——你是想活成父輩的樣子,還是想走一條不同的路?——當然,除此外,你還得結 合你自己的性格、人生大背景,來尋找這個問題的答案。</p>\n<p>至于我為什么要極度簡化這個問題?因為,維度太廣,就相 當于給你的人生設立了太多目標,這不現實——就如前作『寫在入職一周年』所說,設定目標時,要選好主干,刪減枝干,認準了走下 去。</p>\n<p>一旦你回答完這個問題,那恭喜你,你就有了『元動力』,從而:</p> \n<blockquote><p>如果選擇折騰,那你以后的人生選擇,要盡量去豐富自己的經歷;如果選擇穩定,那你每次的人生 選擇,都要最小化自己承受的風險。</p>\n</blockquote>\n<p>愿意折騰與甘心穩定,客觀講并 沒有高下之分,重要的是你能接納自己這樣的想法,認同自己就是想成為這樣的人。 當然,本文更多地是為前者準備的,畢竟他們,才是人類中的nobelman(沒錯,我是社會達爾文主義者)</p>\n<img src=\"v2-427993b88c7521051abe22604f8fb860.jpg\" data-rawwidth=\"183\" data-rawheight=\"179\"><br><p>所以,接下來你人生的每時每刻,都要被這股元動力驅使。如 果失去了元動力,一切都是扯淡,你就形同走尸,隨波逐流。至于怎么保持元動力——無解,就好比數學里的公理,就這么存在著,一旦沒了,整個體系就瓦解 了。</p>\n<h3>小議『折騰』</h3>\n<p>這里我專門擴展下『折騰』的外延,畢竟短短 兩個字無法概括其精髓。我認為人生的『折騰』不是簡單地改變現狀,人為制造 hard 模式,而是合理評估和利用自己手頭的資源,為階段性目標躍進。 比如讀研讀博,不應該是隨個大流覺得將來也許會有用,而是基于你目前了解到的信息,認定這個研究方向是你感興趣的,或者對將來找工作有幫助的;比如跳槽, 不應該是賭氣地覺得呆了不爽拍拍屁股走人,而是要能讓自己的競爭力、不可替代性 上一個臺階;再如前幾年很火的創業熱潮,不應該是一時腦熱一腔熱血要實現財富自由大步快上,而是在這個領域有了深厚的資源積累,對自己的公司的定位、做什 么樣的產品,有清晰認知,也能承擔失敗的風險,想真正做點事情。</p>\n<p>但每一次折騰,或者說每一次選擇,都帶有很多 不確定性,所以要最大化保證確定性的部分在你能handle的范圍內(比如明知這個選擇需要雄厚的政治資源做依托,那平民出身的你就不要硬上了),然后去 坦然接受不確定性,并且留一個 plan B 作為退路。</p>\n<h2>心流</h2>\n<p>如果說『元動力』大致勾勒出了你人生的主干路 徑,那如何一直沿著這條主干前行而不跑偏,則是另一個話題。這種『一直沿著主干前行不跑偏』的狀態,我借用劉未鵬提到的、其實是心理學里的概念,叫做—— 『<strong>心流</strong>』</p>\n<img src=\"v2-ad44d86d0c5a19a58419a1e670cbd732.jpg\" data-rawwidth=\"300\" data-rawheight=\"165\"><br><p>回到開頭描述的,那些人生開掛的大神。在我身邊就有這樣的 同事和朋友,我也有幸觀察過交流過,我發現,雖然他們的性格背景各異,但他們都有一個共性——保持著良好的工作生活狀態,形成一種慣性,即便外界有小擾動 (如回家帶孩子、開無聊的會議、日常應酬),依然能迅速回到主線。這種狀態,就是『心流』。我曾經也有過這樣的體驗,就仿佛自己的思維沉浸在深海里,縱使 海上時不時來一陣暴風雨,思維依然巋然不動,穩定潛行。</p>\n<p>為了避免變成雞湯,我需要進一步發問< /p>\n<blockquote><p>如何保持這種持續不斷的心流狀態呢?</p>\n< /blockquote>\n<p>個人認為就兩點</p> \n<blockquote><ol><li>專注</li>\n<li>階段性正反饋 </li>\n</ol></blockquote>\n<p>具體方式因人而異、因行業而已,說幾個 我自己實踐過的做法吧,為了保持專注,我會把手機扔一邊,回想我今天要搞明白的問題,然后帶著問題有針對性地去搜相關paper和博客(這樣就避免自己漫 無目的地逛知乎),搜到之后打印想看的paper,盡量搞明白理論細節,慢慢沉浸在這個領域里。但僅停留在專注的程度還不夠,專注只是前戲,并不能給你 high的感覺,只有當你運行出一段代碼得到結果、改進一個算法、獨立推導出一個公式時,你才能真正high起來,大腦會給自己分泌多巴胺作為獎勵,讓你 繼續專注、正反饋、專注,形成良性循環。但是要注意兩 點</p>\n<blockquote><ol><li>不要把反饋時間拖得太久,否則會慢慢喪失動 力,所以強調『階段性』</li>\n<li>不要high完后投入到其他無聊事情上,而是開啟新的挑戰,持續找high 點</li>\n</ol></blockquote>\n<p>然而問題來了,玩王者榮耀也能讓我們 保持專注(全身心地投入戰斗)和階段性反饋(收割人頭、晉升段位、榮膺mvp),那為何我們大部分人關上手機只有疲憊和空虛,沒有滿足感 呢?</p>\n<p>我想了想,大概是因為——『自控』</p>\n<br><h2>自 控</h2>\n<p>再次覺得慚愧,這么大把年紀了,還在糾結這種低級話題。但無奈,這就是現實——這個社會上,很多人包括我 自己,都有『巨嬰』的傾向,心智的成熟度、對自我的掌控,跟不上年齡的增長。</p>\n<p>所以我必須要再次思考這個問題, 拿玩游戲舉例,為什么我們專注過、high過,卻沒有心流體驗,沒有滿足感和充實感呢?—— 因為,它拉低了你high的閾值,擊垮了你的自控能力。</p>\n<p>之前在知乎上看到過一種說法,出處忘了,大意 是</p>\n<blockquote><p>任何不需要太多努力就能獲得快感的事物,都容易讓人上癮< /p>\n</blockquote>\n<p>這句話非常直接,極端情況就是——毒品,看過很多戒毒者分享自己的親身經 歷,很多類型的毒品通過讓你的機體分泌多巴胺,來直接獲得精神上的愉悅感,覺得自己是 king of the world,而一旦這個愉悅感過了,你回到真實世界,發現自己其實是個大寫的 LOSER,怎甘心回到現實呢?——所以吸毒人員復吸率接近100%就不難理解了。被戲稱為『精神鴉片』的游戲亦然,對于我們大部分非職業玩家來說,我們 玩游戲只是消遣,并不需要投入很多腦力體力去深度思考分析,所以看上去的『專注』,不過是表象而已,但獲得的反饋,比如擊殺的人頭數、閃瞎眼的段位星星、 朋友圈的排名等,卻是狡猾的游戲設計者實打實地呈現給你的。而多輪游戲過后,你終于疲憊了,于是你內心默默吐槽,怒己不爭——靠,小爺連這點自制力都沒 有!進而自我懷疑、甚至滑向棄療的深淵。</p>\n<p>所以為了不讓自己輕易上癮,你一定要控記住你記幾,努力提高high 的閾值,避免游戲結束后的寂寞,身體一抖后的空虛。</p>\n<img src=\"v2-e54d82f4f5bf327bd9df12fb99f32faa.jpg\" data-rawwidth=\"690\" data-rawheight=\"690\"><br><p>聽起來很雞湯是不是?所以我必須進一步發問</p& gt;\n<blockquote><p>如何控制自己?</p>\n</blockquote> \n<p>我個人結合自身經歷,總結了三點循序漸進的可執行方案</p> \n<blockquote><ol><li>接納自己</li>\n<li>遠離誘 惑</li>\n<li>觀察者角度</li>\n</ol></blockquote> \n<h3>接納自己</h3>\n<p>我從不認為『自控』是刻意強迫自己不去做什么,因為這有違人性,也不長 久,因為你沒真正想明白。</p>\n<p>所以,你首先要認識和接納自己?;氐轿覀冎v的『元動力』,如果你選擇折騰人生,對自 己高要求,那顯然,沉迷游戲,既耗費時間,又沒實質收獲,是在浪費你的生命。但如果你就是想平平淡淡過日子,或者說,玩游戲不會讓你覺得空虛,而是有趣, 那很好——自己開心就好。所以說到底,接納自己的弱點,同時接納自己的野心。</p>\n<img src=\"v2-01e821324207b36e37a7fa361c9fa21b.jpg\" data-rawwidth=\"600\" data-rawheight=\"517\"><br><p>接納自己還包括,不要給自己太多的壓力和負擔,放縱過就過 去了,接受自己有過這樣經歷的現實,而且也不能一刀切,比如難得跟好朋友開黑一次,這樣的經歷以后不一定會有,那這就值得去做。這里又牽扯到一 個<strong>未來遺憾最小化理論</strong>,不過不在本意識流的討論范圍內,就不展開了。< /p>\n<h3>遠離誘惑</h3>\n<p>套句爛俗的話:凝視深淵的人,必將被深淵所凝視。我擅自解讀 下就是,如果你總是在跟你很難拒絕的誘惑做斗爭,那你遲早會陷進去(比如本人已卸載n次王者榮耀)。所 以:</p>\n<blockquote><p>永遠不要高估自己的控制力</p>\n< /blockquote>\n<p>懶惰、貪婪、縱欲等等,七宗罪也好,三毒也罷,都是人性,很少有人能對抗本性變成弗洛伊德所說的 『超我』。所以不要把自己想的太牛逼,在沒有形成自控的慣性前,盡量遠離那些容易上癮的事物,最好能再給自己定一些底線——比如不在工作時間玩游戲、不輕 易欺瞞朋友、不出軌等等,堅守住自己設定的底線,不給它們滋生的環境。</p>\n<p>另外給一個切實可行的小建議,就是定一 些獎勵機制,比如寫完這個算法跑出結果,再獎勵自己看一部電影,否則就繼續攻破難題,從而慢慢形成抵制誘惑的慣 性。</p>\n<h3>觀察者角度</h3>\n<p>這是我獨創的一個概念。解釋一下,就是當你做 一件跟你主干背離的事情時(比如無目的地上網、陌陌上撩妹、沉迷打游戲、yp、泡吧、吸毒…),你的內心其實是有點抗拒的,但強大的慣性和脆弱的人性讓你 身體變得很誠實。所以,當你的內心哪怕有一絲猶豫和抗拒時,千萬努力用力奮力提醒自己,讓自己抽身成一個<strong>觀察 者</strong>——即 從一個旁觀者的角度,看待你現在的行為,并推測這個旁觀者的心理活動。比如你看到一個在上班時間狂刷微博淘寶的人,你會吐槽一句,真是個混日子的水貨! 你看到一個長相平庸的猥瑣男在陌陌上撩妹撩得樂不可支時,你內心充滿了鄙視;你看到兩個空虛寂寞的肉體在沒有任何感情維系的情況下啪啪啪時,你仿佛看到了 大街上隨處野合的流浪狗。。。 </p>\n<img src=\"v2-22c6382a5eea490d27563a99ebe08316.jpg\" data-rawwidth=\"600\" data-rawheight=\"553\"><br><p>這個概念很像我前段時間看過的一部還不錯的國產劇情片 ——&lt;記憶大師&gt;,其中有個『首次去除記憶』的橋段——并不是真的把你的記憶銷毀,而是剝離你作為當事人在這段回憶里所產生 的情感,以一個旁觀者的角度來看待這一切,你就沒有了主觀上的喜怒哀樂,而是很客觀冷靜地看著這一切。</p>\n<p>這里也 一樣,我認為,我們之所以會對某種事物上癮,是因為它讓我們得到滿足感,從而沉浸在自我的世界,放大了主觀情感,所以適時抽身出來,以一個旁觀者的角度, 客觀理性地看待自己,看到的將不再是自我的世界。</p>\n<p>當然,毫無疑問,這些需要刻意練習,而練習的動力,主要就是 來自『元動力』</p>\n<h2>正確的積累</h2>\n<p>好,有了元動力,有了自制力,形成 了心流,然后呢?又回到雞湯的套路?只要不停地努力,加倍地努力,就一定會有所收獲,不虛此生?——當然是扯淡。世間不如意之事,十之八九,努力沒收獲的 事情多了去了,這套理論只適合搞傳銷的。</p>\n<p>所以,培養出自制力和良好的心流狀態,只是保證了人生路上的馬力,在 具體操作層面,還要想清楚努力的方向。知乎上黃白小貓舉過一個學英語的例子,大意是,說很多人花大量時間去背單詞,根本沒想清楚目的是什么,會不會用到, 這種努力是白折騰。我非常贊同,這也就是我開頭說的,『埋頭做事,抬頭看路』,得時刻推演,推演現在做的事情,能否對未來產生有效影響,或者說,未來有個 目標,反推現在要做哪些儲備。</p>\n<p>所以,努力說白了就是進行資源的積累,而我們得時刻復盤自己的經歷,結合當前自 身情況和外部環境,看看哪些是無用的資源,哪些是有效的資源。這方面我有些零碎的觀點,稍作個總 結</p>\n<blockquote><ol><li>時間最寶貴,避免低回報高耗時的行為(比如大 學生兼職發傳單),必要時候以金錢換時間,而不是以時間換金錢</li>\n<li>勿投入太多精力在超出自己理解能力的非理性 群體行為(如全民炒股,萬眾創業,福島核電事故瘋狂買鹽,瘋狂炒房)</li>\n<li>Matter what really matters. 這是我在 Ted 聽一個哈德遜航班事故幸存者演講反復提到的,就不翻譯了</li>\n<li>自己深愛的至親、愛人、子女,是可以無條件付出大 量金錢、時間、精力的</li>\n<li>人生起步階段,應該多在自己擅長的領域深耕,用爛俗的話叫『投資自己』< /li>\n<li>基于上一點,不要迷信什么『人脈』,不用刻意攀附level比你高的人,反面例子請參考芮成鋼同學。< /li>\n</ol></blockquote>\n<p>以上是我給大家分享的一點人生經驗。< /p>\n<img src=\"v2-37874bc7b05581642d277561f844f685.jpg\" data-rawwidth=\"480\" data-rawheight=\"480\"><br><p>順便,我想了想<strong>自己寫公眾號 的動機</strong>,雖然更新不頻繁,但其實前前后后已經投入了非常多的精力,我沒真正想過它能給我帶來什么,也許,分享我的觀點、技 術文章,對我而言,本身就是一種純粹的快樂吧,或者用本文的話說就是——折騰人生,豐富經歷。</p>\n<h2>后記< /h2>\n<p>近一年來,腦海里一直在盤旋這些觀點,或完善或推倒。三個月前『寫在入職一周年』一文里,我分享過一些,但并不深 入,今天終于好好展開了,一字一字地寫下這些觀點。也許以我的年齡和文筆,這些話顯得稚嫩和說教,甚至口口聲聲說杜絕雞湯,但還是有雞湯的嫌疑。但無所 謂,這就是成長。有意識地思考,總比渾渾噩噩或惶惶不可終日要好。如果能給大家帶來一點啟發,也算是做了一點微小的 貢…</p>\n<br>","updated":"2017-07-06T05:58:50.000Z","canComment":false,"commentPermission":"anyone","commentCount":11,"likeCount":13,"state":"published","isLiked":false,"slug":"27728292","isTitleImageFullScreen":false,"rating":"none","sourceUrl":"","publishedTime":"2017-07-06T13:58:50+08:00","links": {"comments":"/api/posts/27728292/comments"},"url":"/p /27728292","titleImage":"https://pic3.zhimg.com /v2-1654ee477b6081ddc26eb836a698936e_r.jpg","summary":"","href":"/api /posts/27728292","meta": {"previous":null,"next":null},"snapshotUrl":"","commentsCount":11,"likesCount":13}},"User": {"DataTerminatorX":{"isFollowed":false,"name":"穆文","headline":"老和山渣碩下山, 剛摸到DM的門, 給Jack馬搬過磚, 給三石打過雜, 現在教機器說話","avatarUrl":"https://pic2.zhimg.com /v2-7e6a8fac68529b7c0856d6bd7d8c16b1_s.jpg","isFollowing":false,"type":"people","slug":"DataTerminatorX","bio":" 自由意志, 公眾號:數據挖掘機養成 記","hash":"c7cdf56b61d269758b8ddcc8c212a6d5","uid":28142592851968,"isOrg":false,"description":" 老和山渣碩下山, 剛摸到DM的門, 給Jack馬搬過磚, 給三石打過雜, 現在教機器說話","profileUrl":"https://www.zhihu.com/people /DataTerminatorX","avatar": {"id":"v2-7e6a8fac68529b7c0856d6bd7d8c16b1","template":"https://pic2.zhimg.com /{id}_{size}.jpg"},"isOrgWhiteList":false}},"Comment":{},"favlists": {}},"me":{},"global":{},"columns":{"DataMiner-X":{"pins": [],"followersCount":541,"creator":{"bio":"自由意志, 公眾號:數據挖掘機養成 記","isFollowing":false,"hash":"c7cdf56b61d269758b8ddcc8c212a6d5","uid":28142592851968,"isOrg":false,"slug":"DataTerminatorX","isFollowed":false,"description":" 老和山渣碩下山, 剛摸到DM的門, 給Jack馬搬過磚, 給三石打過雜, 現在教機器說話","name":"穆文","profileUrl":"https://www.zhihu.com/people /DataTerminatorX","avatar": {"id":"v2-7e6a8fac68529b7c0856d6bd7d8c16b1","template":"https://pic2.zhimg.com /{id}_{size}.jpg"},"isOrgWhiteList":false},"topics":[{"url":"https: //www.zhihu.com/topic/19559450","id":"19559450","name":"機器學習"}, {"url":"https://www.zhihu.com/topic/19553534","id":"19553534","name":"數據 挖掘"},{"url":"https://www.zhihu.com/topic /19552832","id":"19552832","name":"Python"}],"activateState":"activated","href":" /api/columns/DataMiner- X","acceptSubmission":true,"firstTime":false,"postTopics": [{"postsCount":1,"id":350,"name":"人工智能"}, {"postsCount":1,"id":1546,"name":"人生"}, {"postsCount":1,"id":3084,"name":"機器學習"}, {"postsCount":1,"id":3279,"name":"自然語言處理"}, {"postsCount":1,"id":163534,"name":"王者榮耀"}],"pendingName":"","avatar": {"id":"v2-7a3874bffded4f3cd86047890905dddd","template":"https://pic2.zhimg.com/{id}_{size}.jpg"},"canManage":false,"description":"select『優質文章』 from 公眾號『數據挖掘機養成記』","pendingTopics": [],"nameCanEditUntil":0,"reason":"","banUntil":0,"slug":"DataMiner- X","name":"數據挖掘機養成記","url":"/DataMiner-X","intro":"歡迎來到我的 Mind Palace","topicsCanEditUntil":0,"activateAuthorRequested":"none","commentPermission":"anyone","following":false,"postsCount":2,"canPost":false,"FULLINFO":true}},"columnPosts":{"DataMiner-X":{"entity":["27728292","26306795"]}},"columnSettings":{"colomnAuthor":[],"uploadAvatarDetails":""},"postComments":{},"postReviewComments":{"comments":[],"newComments":[],"hasMore":true},"favlistsByUser":{},"favlistRelations":{},"promotions":{},"switches":{"couldAddVideo":false},"draft":{"titleImage":"","titleImageSize":{},"isTitleImageFullScreen":false,"canTitleImageFullScreen":false,"title":"","titleImageUploading":false,"error":"","content":"","draftLoading":false,"globalLoading":false,"pendingVideo":{"resource":null,"error":null}},"drafts":{"draftsList":[]},"config":{"userNotBindPhoneTipString":{}},"recommendPosts":{"articleRecommendations":[],"columnRecommendations":[]},"env":{"isAppView":false,"appViewConfig":{"content_padding_top":128,"content_padding_bottom":56,"content_padding_left":16,"content_padding_right":16,"title_font_size":22,"body_font_size":16,"is_dark_theme":false,"can_auto_load_image":true,"app_info":"OS=iOS"},"isApp":false},"sys":{}} 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的秒懂词向量Word2vec的本质的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。