- word2vec 官網
- word2vec的本質是在自然語言詞條數據集與計算機浮點數據集之間建立雙射關系。
- word2vec建立的數據集最厲害的一點是,將自然語言詞條數據集內部的推理過程,映射到了計算機浮點數據集內部的數值運算。我個人感覺理解這個數據映射方式是理解AI大語言模型的關鍵。
官網有以下描述:例如向量運算 vector(‘Paris’) - vector(‘France’) + vector(‘Italy’) 導致向量非常接近 vector(‘Rome’),而 vector(‘king’) - vector(‘man’) + vector(‘woman’) 接近 vector(‘queen’)[3, 1]。
- word2vec開源版本只是映射算法的一個基本實現,效果受限于訓練數據集和算法本身。有些難以表達的知識,實際很難數據化,例如中醫模糊的辨證方法、蘇東坡的藝術感。這是一個需要持續研究的基礎方向。
- google word2vec官網的代碼似乎已經不能訪問了,github上還可以檢索到。原版拷貝可能是這個:tmikolov/word2vec
- word2vec主要實現兩個算法:the Continuous Bag-of-Words (CBOW) and the Skip-gram model (SG)
- word2vec readme內容翻譯如下
https://github.com/tmikolov/word2vec/blob/master/README.txt
給定一個文本語料庫,word2vec 工具使用連續詞袋或 Skip-Gram 神經網絡架構為詞匯表中的每個單詞學習一個向量。用戶應指定以下內容:
- 所需的向量維數
- Skip-Gram 或連續詞袋模型的上下文窗口大小
- 訓練算法:分層 softmax 和/或 負采樣
- 對頻繁詞進行下采樣的閾值
- 要使用的線程數
- 輸出詞向量文件的格式(文本或二進制)
通常,其他超參數(例如學習率)不需要針對不同的訓練集進行調整。
腳本 demo-word.sh 從網絡下載一個小型(100MB)文本語料庫,并訓練一個小型詞向量模型。訓練完成后,用戶可以交互式探索單詞的相似性。
有關腳本的更多信息,請訪問 https://code.google.com/p/word2vec/
-
word2vec示例數據下載:wget http://mattmahoney.net/dc/text8.zip -O text8.gz
-
forked from tmikolov/word2vec 得到 https://github.com/swordll80/word2vec
-
在本地 C:\code目錄下啟動git命令行,執行git clone https://github.com/swordll80/word2vec.git
-
在 PowerShell中執行cmake生成vs的sln等文件
此sln文件實際是基于CMakeLists.txt文件生成的。
-
或者直接使用CMakeLists.txt
-
在win11下編譯時,需要linux的pthreads,下載pthreads-win32自己編譯也可以實現在win11下使用linux pthreads接口。用我編譯好的pthreads可能也可以,如果不行,那就是編譯環境差別太大。
-
修改少量代碼后,就可以在win11 vs2022環境下編譯word2vec
也可以直接從https://github.com/swordll80/word2vec下載后debug win版本。
實際也可以在linux 虛擬機等環境測試原版代碼。
-
運行word2vec進行訓練,運行distance進行推理
參考demo-word.sh文件(別的文件用的不同測試數據,可以先不管)
./word2vec.exe -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15
./distance.exe vectors.bin 測試計算單詞的距離
word2vec的幫助信息如下:
./word-analogy.exe vectors.bin 三詞測試效果,參考demo-analogy.sh 文件
word2phrase用于短語訓練,參考demo-phrases.sh -
Python interface to Google word2vec
-
影響單詞向量的質量: * 訓練數據的數量和質量 * 向量的大小 * 訓練算法
-
./compute-accuracy vectors.bin 30000 < questions-words.txt 用于測試詞向量質量。同理,demo-phrase-accuracy.sh用于測試短語質量。
-
demo-classes.sh 與Word clustering 單詞聚類有關
-
架構:Skip-gram(較慢,更適合不常見的單詞)與 CBOW(快速)
-
訓練算法:分層 SoftMax(更適合不經常使用的單詞)與負采樣(更適合頻繁的單詞,更適合低維向量)
-
高頻詞的子采樣:可以提高大型數據集的準確性和速度(有用的值在 1e-3 到 1e-5 范圍內)
-
單詞 Vectors 的維度:通常越多越好,但并非總是如此
-
上下文(窗口)大小:對于 skip-gram,通常在 10 左右,對于 CBOW,通常在 5 左右
-
代碼注釋,單步調試等后續補充。