更新:我用以下代码替换了旧代码:
const fastText = require('fasttext');
const path = require('path');
async function main() {
const model = path.resolve(__dirname, './wiki.en.bin');
const query = new fastText.Query(model);
const ret = await query.nn('word', 5);
console.log(ret);
}
main();
我现在遇到的错误是
模型文件的文件格式错误!
所以现在我想看看它是否与我使用macoS有关。
我正在学习使用node.js,并已从https://fasttext.cc/docs/en/pretrained-vectors.html下载了一个.bin fastText模型。我想用它来对节点做一些nlp的事情。我的问题是我无法加载模型。在许多事情之间,我尝试了以下操作:
const fastText = require('fasttext');
const path = require('path');
var async = require('async');
function first(a){
return new Promise((resolve, reject) => {
exports.model = path.resolve(__dirname, './wiki.en.bin');
console.log("done first");
resolve(a);
});
}
function second(b){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("doing 2nd");
console.log(exports.model);
exports.query = new fastText.Query(exports.model);
console.log("done second");
resolve(b);
}, 10000);
});
}
function third(c){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("Checking that Query is loaded...");
console.log(exports.query);
exports.query.nn('word', 5, (err, res) => {
if (err) {
console.error(err);
} else if (res.length > 0) {
let tag = res[0].label; // letter
let confidence = res[0].value // 0.99992
console.log('Nearest neighbor', tag, confidence, res);
} else {
console.log('No matches');
}
});
console.log("Done");
resolve(c);
}, 10000);
});
}
first('first')
.then(second)
.then(third);
但是,该模型似乎没有加载。该文件确实存在-我从节点中检查了该文件,但是我一直得到一个空模型。这是完整的输出:
先完成
做第二个[PATH] /wiki.en.bin
完成秒
正在检查查询是否已加载...
FasttextQuery {}
[PATH] /fasttext_demo.js:31
exports.query.nn('word', 5, (err, res) => { ^
错误:应该有一个对象
at Timeout.setTimeout [as _onTimeout] (/Users/billymosse/Downloads/dsibot/fasttext_demo.js:31:25) at ontimeout (timers.js:436:11) at tryOnTimeout (timers.js:300:5) at listOnTimeout (timers.js:263:5) at Timer.processTimers (timers.js:223:10)
当尝试使用模型时。实际上,它是空的。
有人可以帮助我理解我的错误吗?或者,也欢迎使用实际加载模型的代码片段。为了有价值,我正在使用macOS。
编辑:请参见顶部的更新。