1.0.0 • Published 6 years ago
fasttext v1.0.0
node-fasttext
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;
Installation
Using npm:
npm install fasttext --save
fastText Classifier
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: 3000Nearest neighbor
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');
    }
});Build from source
See Installation Prerequisites.
# install dependencies and tools
npm install
# build node-fasttext from source
npm run build
# run unit-test
npm testContributing
Pull requests and stars are highly welcome.
For bugs and feature requests, please create an issue.