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。