Nodejs binding for fasttext representation and classification.
This is a link to the Facebook fastText. A Library for efficient text classification and representation learning.
- FASTTEXT_VERSION = 12;
- FASTTEXT_FILEFORMAT_MAGIC_INT32 = 793712314;
Using npm:
npm install fasttext --save
According to fasttext.cc. We have a simple classifier for executing prediction models about cooking
from stackexchange questions:
const path = require('path');
const fastText = require('fasttext');
const model = path.resolve(__dirname, './model_cooking.bin');
const classifier = new fastText.Classifier(model);
classifier.predict('Why not put knives in the dishwasher?', 5)
.then((res) => {
if (res.length > 0) {
let tag = res[0].label; // __label__knives
let confidence = res[0].value // 0.8787146210670471
console.log('classify', tag, confidence, res);
} else {
console.log('No matches');
}
});
The model haved trained before with the followings params:
const path = require('path');
const fastText = require('fasttext');
let data = path.resolve(path.join(__dirname, '../data/cooking.train.txt'));
let model = path.resolve(path.join(__dirname, '../data/cooking.model'));
let classifier = new fastText.Classifier();
let options = {
input: data,
output: model,
loss: "softmax",
dim: 200,
bucket: 2000000
}
classifier.train('supervised', options)
.then((res) => {
console.log('model info after training:', res)
// Input <<<<< C:\projects\node-fasttext\test\data\cooking.train.txt
// Output >>>>> C:\projects\node-fasttext\test\data\cooking.model.bin
// Output >>>>> C:\projects\node-fasttext\test\data\cooking.model.vec
});
Or you can train directly from the command line with fasttext builded from official source:
# Training
~/fastText/data$ ./fasttext supervised -input cooking.train -output model_cooking -lr 1.0 -epoch 25 -wordNgrams 2 -bucket 200000 -dim 50 -loss hs
Read 0M words
Number of words: 8952
Number of labels: 735
Progress: 100.0% words/sec/thread: 1687554 lr: 0.000000 loss: 5.247591 eta: 0h0m 4m
# Testing
~/fastText/data$ ./fasttext test model_cooking.bin cooking.valid
N 3000
P@1 0.587
R@1 0.254
Number of examples: 3000
Simple class for searching nearest neighbors:
const path = require('path');
const fastText = require('fasttext');
const model = path.resolve(__dirname, './skipgram.bin');
const query = new fastText.Query(model);
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');
}
});
See Installation Prerequisites.
# install dependencies and tools
npm install
# build node-fasttext from source
npm run build
# run unit-test
npm test
Pull requests and stars are highly welcome.
For bugs and feature requests, please create an issue.