Skip to content
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
Models code checkin Feb 21, 2019
Scratch Scratch code to convert SQuAD data to CoQA format Mar 3, 2019
Utils code checkin Feb 21, 2019
bert_vocab_files Adding Bert vocab files Feb 28, 2019
.gitignore code checkin Feb 21, 2019 code checkin Feb 21, 2019
LICENSE code checkin Feb 21, 2019
NOTICE.txt code checkin Feb 21, 2019 Update requirement of PyTorch and spacy Apr 19, 2019
conf code checkin Feb 21, 2019 code checkin Feb 21, 2019


This is the official code for the Microsoft's submission of SDNet model to CoQA leaderboard. It is implemented under PyTorch framework. The related paper to cite is:

SDNet: Contextualized Attention-based Deep Network for Conversational Question Answering, by Chenguang Zhu, Michael Zeng and Xuedong Huang, at

For usage of this code, please follow Microsoft Open Source Code of Conduct.

Directory structure:

  • the starter code

  • Models/

    • Base class for trainer
    • Trainer for SDNet, including training and predicting procedures
    • The SDNet network structure
    • Related network layer functions
    • Bert/
      • Customized class to compute BERT contextualized embedding
        •,, From Huggingface's PyTorch implementation of BERT
  • Utils/

    • Process argument configuration file
    • Define constants used
    • preprocess CoQA raw data into intermediate binary/json file, including tokenzation, history preprending
    •, General utility functions used in SDNet
    • Logging time

How to run

Requirement: PyTorch 0.4.1, spaCy 2.0.16. The docker we used is available at dockerhub: Please use v3.0 or v4.0.

  1. Create a folder (e.g. coqa) to contain data and running logs;
  2. Create folder coqa/data to store CoQA raw data: coqa-train-v1.0.json and coqa-dev-v1.0.json;
  3. Copy the file conf from the repo into folder coqa;
  4. If you want to use BERT-Large, download their model into coqa/bert-large-uncased; if you want to use BERT-base, download their model into coqa/bert-base-cased;
  5. Create a folder glove in the same directory of coqa and download GloVe embedding glove.840B.300d.txt into the folder.

Your directory should look like this:

  • coqa/
    • data/
      • coqa-train-v1.0.json
      • coqa-dev-v1.0.json
    • bert-large-uncased/
      • bert-large-uncased-vocab.txt
      • bert_config.json
      • pytorch_model.bin
    • conf
  • glove/
    • glove.840B.300d.txt

Then, execute python train path_to_coqa/conf.

If you run for the first time, will automatically create folders conf~/spacy_intermediate_features~ inside coqa to store intermediate tokenization results, which will take a few hours.

Every time you run the code, a new running folder run_idx will be created inside coqa/conf~, which contains running logs, prediction result on dev set, and best model.


If you have any questions, please contact Chenguang Zhu,

You can’t perform that action at this time.