Nodejs binding for fasttext representation and classification.
MIT License npm version downloads Travis Appveyor
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.