Node_FastText
带监督的文本分类算法FastText
安装
npm install node_fasttext
使用
const fastText = require("node_fasttext");
const FastText = new fastText();
const options = {
"input" : "./train.txt",
"output" : "./model",
"loss" : "softmax",
"dim" : 200,
"bucket" : 2000000
}
FastText.train("supervised" , options ).then( res => {
console.log(res);
})
API
模型训练 FastText.train( type , options )
详细配置参数查看官方 配置文档
/**
* loadModel
* @param String type 模型类型 [supervised | cbow | skipgram]
* @param Object options 配置参数
* @return Promise 返回模型信息
*/
FastText.train("supervised" ,{
"input" : "./train.txt",
"output" : "./model",
}).then( res => {
console.log(res);
// { bucket: 2000000,
// dim: 100,
// epoch: 5,
// label: '__label__',
// label_count: 2,
// loss: 'ns',
// lr: 0.05,
// lrUpdateRate: 100,
// maxn: 6,
// minCount: 5,
// minCountLabel: 0,
// minn: 3,
// model: 'cbow',
// neg: 5,
// pretrainedVectors: '',
// t: 0.0001,
// thread: 12,
// token_count: 1209,
// verbose: 2,
// wordNgrams: 1,
// word_count: 27,
// ws: 5 }
})
测试分类 FastText.test( testFile , k )
必须先加载 supervised 模型,详细请查看官方 文档
/**
* nn
* @param String testFile 待测试分类的文件
* @param Number k 精度和查全率,默认值为 1
* @return Promise
*/
FastText.test( "./test.txt" , 2 ).then( res => {
console.log(res)
// { 'Number of examples': 68, 'P@3': 0.333333, 'R@3': 1 }
})
压缩模型 FastText.quantize( options )
必须先训练模型,output 文件名必须与原模型名相同, 详细请查看官方 配置文档
/**
* quantize
* @param Object options 配置参数
* @return Promise 返回模型信息
*/
FastText.quantize({
"input" : "./train.txt",
"output" : "./model",
}).then( res => {
console.log(res)
})
加载模型 FastText.loadModel( file )
/**
* loadModel
* @param String file 模型文件路径
* @return Promise 返回模型信息
*/
FastText.loadModel("./model.bin").then( res => {
console.log(res);
})
文本分类 FastText.predict( text , k )
模型必须是 supervised,详细请查看官方 文档
/**
* predict
* @param String text 文本内容
* @param Number k 按相似度降序排列,返回 n 个分类,默认值为 1
* @return Promise
*/
FastText.predict("This is Band of Outsiders on Twitter" , 2 ).then( res => {
console.log(res);
// [ { label: '__label__BAND', value: 0.49999999904767284 },
// { label: '__label__ORGANIZATION', value: 0.49804691366168485 } ]
})
相似词查询 FastText.nn( word , k )
模型必须是 cbow 或 skipgram,详细请查看官方 文档
/**
* nn
* @param String word 词
* @param Number k 按相似度降序排列,返回 n 个相似的词,默认值为 1
* @return Promise
*/
FastText.nn( "word" , 2 ).then( res => {
console.log(res)
// [ { word: 'The', value: 1.3640304837694894 },
// { word: 'you', value: 1.2910933389370642 } ]
})
计算两个词语的语义距离 FastText.similarity( what , with )
模型必须是 cbow 或 skipgram
/**
* similarity
* @param String what 一个词
* @param String with 另一个词
* @return Promise 余弦距离
*/
FastText.analogies( "山东", "江苏" ).then( res => {
console.log(res)
// 0.81871825
})
词语类比查询 FastText.analogies( words , k )
模型必须是 cbow 或 skipgram,详细请查看官方 文档
/**
* analogies
* @param Array words 词语,必须为3个词语
* @param Number k 按相似度降序排列,语义距离最近 n 个相似的词,默认值为 1
* @return Promise
*/
FastText.analogies( ["berlin","germany","france"] , 2 ).then( res => {
console.log(res)
// [ { word: 'paris', value: 0.768954 },
// { word: 'louveciennes', value: 0.765569 } ]
})
获取向量 FastText.getVector( text )
/**
* getVector
* @param String text 词语或句子
* @return Promise
*/
FastText.getVector( "paris").then( res => {
console.log(res)
// { text: 'paris', value: [
// -0.49160531163215637,
// 0.08759436011314392,
// 0.12446501106023788,
// -0.21982385218143463,
// ...
// -0.2687559723854065
// ]},
})