Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Deep neural models for core NLP tasks based on Pytorch(version 2)

This is the code we used in the following papers

End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF

Xuezhe Ma, Eduard Hovy

ACL 2016

Neural Probabilistic Model for Non-projective MST Parsing

Xuezhe Ma, Eduard Hovy


Stack-Pointer Networks for Dependency Parsing

Xuezhe Ma, Zecong Hu, Jingzhou Liu, Nanyun Peng, Graham Neubig and Eduard Hovy

ACL 2018

It also includes the re-implementation of the Stanford Deep BiAffine Parser:

Deep Biaffine Attention for Neural Dependency Parsing

Timothy Dozat, Christopher D. Manning

ICLR 2017


  1. Upgraded the code to support PyTorch 1.3 and Python 3.6
  2. Re-factored code to better organization
  3. Implemented the batch version of Stack-Pointer Parser decoding algorithm, about 50 times faster!


Python 3.6, PyTorch >=1.3.1, Gensim >= 0.12.0

Data format

For the data format used in our implementation, please read this issue.

Running the experiments

First to the experiments folder:

cd experiments

Sequence labeling

To train a CRF POS tagger of PTB WSJ corpus,


where the arguments for train/dev/test data, together with the pretrained word embedding should be setup.

To train a NER model on CoNLL-2003 English data set,


Dependency Parsing

To train a Stack-Pointer parser, simply run


Remeber to setup the paths for data and embeddings.

To train a Deep BiAffine parser, simply run


Again, remember to setup the paths for data and embeddings.

To train a Neural MST parser,