Node.js接口Google Word2Vec工具
這是Google Research開發的Word2Vec工具的node.js接口,用於“有效地實現連續的單詞袋和跳過架構來計算單詞的向量表示”,可用於各種NLP任務。有關Word2Vec項目的更多信息,請諮詢https://code.google.com/p/word2vec/。
當前, node-word2vec僅支持UNIX操作系統。
通過NPM安裝它:
npm install word2vec要在node.js中使用它,需要以下模塊:
var w2v = require ( 'word2vec' ) ;對於某些單詞對單個術語的重要性(例如“巴拉克·奧巴馬”或“紐約”)的應用,應將用於培訓的文本語料庫視為一個單詞),應通過詞2phrases函數進行處理。經常彼此相鄰的單詞將通過下劃線加成,例如“ new”和“ York”一詞,如果彼此關注的話可能會轉換為單個單詞“ new_york”。
在內部,此功能調用Google Word2Vec項目的C命令行應用程序。這使其可以利用多線程並保留原始C代碼的效率。它處理由input文本文檔給出的文本,將輸出寫入文件,並用output給出名稱。
params參數期望JS對象可選包含以下一些鍵和相關值。如果未提供,則使用默認值。
| 鑰匙 | 描述 | 預設值 |
|---|---|---|
| Mincount | 丟棄的單詞少於Mincount時間 | 5 |
| 臨界點 | 確定短語數量,較高的值表示較少的短語 | 100 |
| 偵錯 | 設置調試模式 | 2 |
| 沉默的 | 設置是否應將任何輸出打印到控制台 | 錯誤的 |
成功執行後,調用了提供的callback功能。它收到退出代碼的第一個參數。
此功能調用Google的Word2Vec命令行應用程序,並找到input訓練語料庫中單詞的矢量表示,將結果寫入output文件。然後可以通過loadModel函數將輸出加載到節點中,該功能暴露了幾種與單詞的學習向量表示相互作用的方法。
params參數期望JS對象可選包含以下一些鍵和相關值。對於缺少的人,使用默認值:
| 鑰匙 | 描述 | 預設值 |
|---|---|---|
| 尺寸 | 設置單詞向量的大小 | 100 |
| 窗戶 | 設置單詞之間的最大跳過長度 | 5 |
| 樣本 | 設置單詞出現的閾值。那些在訓練數據中出現較高頻率的人將被隨機下採樣;有用範圍為(0,1e-5) | 1E-3 |
| HS | 1 =使用層次軟件 | 0 |
| 消極的 | 負面例子的數量;共同值為3-10(0 =未使用) | 5 |
| 線程 | 二手線的數量 | 12 |
| 迭代 | 訓練迭代次數 | 5 |
| Mincount | 這將丟棄看起來不到王量時間的單詞 | 5 |
| 阿爾法 | 設定開始學習率 | 跳過0.025,Cbow為0.05 |
| 課程 | 輸出單詞類而不是單詞向量 | 0(矢量寫) |
| 偵錯 | 設置調試模式 | 2 |
| 二進制 | 將結果向量保存在二進制模式下 | 0(OFF) |
| SaveVocab | 詞彙將保存以保存vocab值 | |
| readvocab | 詞彙將從ReadVocab值中讀取,而不是根據培訓數據構建 | |
| Cbow | 使用連續的單詞模型 | 1(使用0用於Skip-Gram模型) |
| 沉默的 | 設置是否應將任何輸出打印到控制台 | 錯誤的 |
成功執行後,調用了提供的callback功能。它收到退出代碼的第一個參數。
這是軟件包的主要功能,該功能將包含單詞的向量表示的保存模型文件加載到內存中。可以使用Word2Vec函數創建這樣的文件。成功加載文件後,觸發了所提供的回調功能,遵循約定的參數有兩個參數: err and model 。如果一切都順利運行並且沒有發生錯誤,則第一個參數應為null 。 model參數是持有所有數據並揭示模型對象部分中解釋的屬性和方法的模型對象。
例子:
w2v . loadModel ( './vectors.txt' , function ( error , model ) {
console . log ( model ) ;
} ) ;樣本輸出:
{
getVectors : [ Function ] ,
distance : [ Function : distance ] ,
analogy : [ Function : analogy ] ,
words : '98331' ,
size : '200'
} 培訓語料庫中的獨特單詞數量。
學到的單詞向量的長度。
計算word1和word2之間的單詞相似性。
例子:
model . similarity ( 'ham' , 'cheese' ) ;樣本輸出:
0.4907762118841032 計算所提供短語(內部轉換為單詞數組的string ,導致短語向量)與詞彙的其他單詞向量之間的餘弦距離。返回的是與所提供短語最高相似性的number單詞。如果不提供number ,默認情況下,將返回40個最高評分單詞。如果該短語中的單詞沒有出現在字典中,則該函數返回null 。在所有其他情況下,在餘弦距離的計算中都會刪除未知單詞。
例子:
model . mostSimilar ( 'switzerland' , 20 ) ;樣本輸出:
[
{ word : 'chur' , dist : 0.6070252929307018 } ,
{ word : 'ticino' , dist : 0.6049085549621765 } ,
{ word : 'bern' , dist : 0.6001648890419077 } ,
{ word : 'cantons' , dist : 0.5822226582323267 } ,
{ word : 'z_rich' , dist : 0.5671853621346818 } ,
{ word : 'iceland_norway' , dist : 0.5651901750812693 } ,
{ word : 'aargau' , dist : 0.5590524831511438 } ,
{ word : 'aarau' , dist : 0.555220055372284 } ,
{ word : 'zurich' , dist : 0.5401119092258485 } ,
{ word : 'berne' , dist : 0.5391358099043649 } ,
{ word : 'zug' , dist : 0.5375590160292268 } ,
{ word : 'swiss_confederation' , dist : 0.5365824598661265 } ,
{ word : 'germany' , dist : 0.5337325187293028 } ,
{ word : 'italy' , dist : 0.5309218588704736 } ,
{ word : 'alsace_lorraine' , dist : 0.5270204106304165 } ,
{ word : 'belgium_denmark' , dist : 0.5247942780963807 } ,
{ word : 'sweden_finland' , dist : 0.5241634037188426 } ,
{ word : 'canton' , dist : 0.5212495170066538 } ,
{ word : 'anterselva' , dist : 0.5186651140386938 } ,
{ word : 'belgium' , dist : 0.5150383129735169 }
] 對於像man king這樣的關係中的兩個單詞,此功能試圖找到與所提供的word相似的術語。如果不提供number ,默認情況下,返回40個得分的結果。
例子:
model . analogy ( 'woman' , [ 'man' , 'king' ] , 10 ) ;樣本輸出:
[
{ word : 'queen' , dist : 0.5607083309028658 } ,
{ word : 'queen_consort' , dist : 0.510974781496456 } ,
{ word : 'crowned_king' , dist : 0.5060923120115347 } ,
{ word : 'isabella' , dist : 0.49319425034513376 } ,
{ word : 'matilda' , dist : 0.4931204901924969 } ,
{ word : 'dagmar' , dist : 0.4910608716969606 } ,
{ word : 'sibylla' , dist : 0.4832698899279795 } ,
{ word : 'died_childless' , dist : 0.47957251302898396 } ,
{ word : 'charles_viii' , dist : 0.4775804990655765 } ,
{ word : 'melisende' , dist : 0.47663194967001704 }
] 返回輸入word的學習向量表示。如果詞彙中不存在word ,則該函數返回null 。
例子:
model . getVector ( 'king' ) ;樣本輸出:
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} 返回所提供的單詞的學習向量表示。如果單詞不確定,即喚起該函數而不會傳遞任何論點,它將返回所有學到的單詞的向量。返回的值是array對象,是類WordVec的實例。
例子:
model . getVectors ( [ 'king' , 'queen' , 'boy' , 'girl' ] ) ;樣本輸出:
[
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} ,
{
word : 'queen' ,
values : [
0.014399041122817985 ,
- 0.000026896638109750347 ,
0.20398248693190596 ,
...
- 0.05329081648586445 ,
- 0.012556868376422963
]
} ,
{
word : 'girl' ,
values : [
- 0.1247347144692245 ,
0.03834108759049417 ,
- 0.022911846734360187 ,
...
- 0.0798994867922872 ,
- 0.11387393949666696
]
} ,
{
word : 'boy' ,
values : [
- 0.05436531234037158 ,
0.008874993957578164 ,
- 0.06711992414442335 ,
...
0.05673998568026764 ,
- 0.04885347925837509
]
}
] 返回具有最接近矢量表示的單詞,符合輸入vec 。該函數期望單詞向量,要么是構造函數WordVector的實例,要么是長度size的數字值數組。它返回詞彙中的單詞,其向量與所提供的輸入向量之間的距離最低。
例子:
model . getNearestWord ( model . getVector ( 'empire' ) ) ;樣本輸出:
{ word : 'empire' , dist : 1.0000000000000002 } 返回其向量表示最接近輸入vec的單詞。該函數的第一個參數期望一個單詞向量,即構造函數WordVector的實例或長度size的數量值數組。第二個number是可選的,並指定返回的單詞的數量。如果未提供,則使用默認值10 。
例子:
model . getNearestWords ( model . getVector ( 'man' ) , 3 )樣本輸出:
[
{ word : 'man' , dist : 1.0000000000000002 } ,
{ word : 'woman' , dist : 0.5731114915085445 } ,
{ word : 'boy' , dist : 0.49110060323870924 }
] 詞彙中的單詞。
該單詞的學習向量表示,長度size的數組。
將輸入wordVector的向量添加到矢量.values值中。
將輸入wordVector的向量減去向量.values值。
通過命令npm test運行測試
用命令克隆git存儲庫
$ git clone https://github.com/Planeshifter/node-word2vec.git更改為項目目錄並通過
$ cd node-word2vec
$ make --directory=srcApache V2。