Skip to content

A JavaScript ES6 implementation of a maximum-entropy classifier for natural language processing

Notifications You must be signed in to change notification settings

sgbalogh/js-maxent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

js-maxent

A JavaScript (ES6) implementation of a proof-of-concept maximum-entropy (MaxEnt) classifier. When trained on a set of examples, it learns feature weights for classifying inputs with a predicted label (e.g. "Chicago, Illinois" => "place").

This implementation is based on a more complex Java architecture found in an assignment from Statistical Natural Language Processing Fall 2017 at NYU's Courant Institute.

The library is lightweight enough to use stored weights to classify –– or even run the perceptron to train –– from the DOM.

TODOs:

  • Create an averaged-perceptron trainer
  • Create, or adapt, a BFGS gradient descent trainer

Sample invocation:

const maxent = require("./maxent.js")
const fs = require("fs")

t = new maxent.Translator()

var training = JSON.parse(fs.readFileSync("./data/train.json")).map( (elem) => { return new maxent.LabeledDatum(elem[1],elem[0])})
var encoded_training = training.map( (elem) => { return new maxent.EncodedDatum(elem,t) })

// Randomize the order of the training data
const shuffleArray = arr => arr.sort(() => Math.random() - 0.5)
encoded_training = shuffleArray(encoded_training)

// Learn weights with the simple perceptron
var cw = maxent.Perceptron.train(t, encoded_training, 1)

// Create a classifier using the weight array and the translator
var classifier = new maxent.Classifier(cw, t)

Now you can interact with the classifier like so:

console.log(classifier.predict("Chicago, Illinois"))
// This should print 'place'

console.log(classifier.scores("Chicago, Illinois"))
// This should print an array of log probabilities for the labels

About

A JavaScript ES6 implementation of a maximum-entropy classifier for natural language processing

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published