fastText和word2vec:精度计算代码中的NaN

时间:2017-07-14 18:41:12

标签: c nlp word2vec fasttext

我从fastText Github存储库页面下载了预先训练好的英语维基百科矢量文件(wiki.en.vec),我尝试计算语法和语义类比任务的准确性,如Mikolov的word2vec论文中的第一篇所述,如下所示:

我通过简单地make建立了word2vec存储库。

我跑了./compute-accuracy wiki.en.vec 0 < questions-words.txt,即我将预训练的矢量文件从word2vec传递到计算精度二进制文件,并且阈值为0,以便考虑整个词汇表,而不是默认将其限制为30000 ,我还使用questions-words.txt发送精度计算数据集<,因为我注意到代码从stdin读取数据集。

作为回应,我只是得到了一堆像下面这样的NaN。即使我将阈值更改为30000或其他任何内容,这也不会改变。

>capital-common-countries:
ACCURACY TOP1: 0.00 % (0 / 1)
Total accuracy: -nan % Semantic accuracy: -nan % Syntactic accuracy: -nan %

有人可以解释为什么英语预训练的矢量似乎不能与word2vec的精确度计算代码一起使用吗?我看了一下compute-accuracy.c,看起来它看起来好像需要标准的矢量文件格式约定,我也看了wiki.en.vec,看起来好像是按照标准惯例格式化了。

此外,在fastText论文中,提出了使用fastText向量的类比精确度,并且本文引用了Mikolov的word2vec论文 - 显然,使用了相同的数据集,并且可能使用相同的word2vec compute-accuracy.c文件来获得所呈现的数字。那么有人可以解释一下出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

compute-accuracy是否适用于本地训练的载体? (也就是说,您的设置是否正常工作而不添加Facebook源向量的额外变量。)

如果是这样,那么使用“计算机精确度”的本地训练矢量集看起来与Facebook下载文件的格式/编码相同吗?

如果我理解正确,.vec文件是文本格式。在word2vec.c存储库中使用compute-accuracy可执行文件的示例表示将 binary -format向量作为参数传递。参见:

https://github.com/tmikolov/word2vec/blob/master/demo-word-accuracy.sh#L7