Git Product home page Git Product logo

max-question-answering's Introduction

Build Status Website Status

IBM Developer Model Asset Exchange: Question Answering Model

This repository contains code to instantiate and deploy a Question Answering model. Given a body of text (context) about a subject and questions about that subject, the model will answer questions based on the given context.

The model is based on the BERT model. The model files are hosted on IBM Cloud Object Storage. The code in this repository deploys the model as a web service in a Docker container. This repository was developed as part of the IBM Developer Model Asset Exchange and the public API is powered by IBM Cloud.

Model Metadata

Domain Application Industry Framework Training Data Input Data Format
Natural Language Processing Question and Answer General TensorFlow SQuAD 1.1 Text

Note: the SQuAD 1.1 files are no longer on the dataset website but can be found on the Google BERT repo

Benchmark

The predictive performance of the model can be characterized by the benchmark table below.

Note: The performance of a model is not the only significant metric. The level of bias and fairness incorporated in the model are also of high importance. Learn more by reading up on the AI Fairness 360 open source toolkit.

On datasets where the answers given are designed to not be exact matches to a span of text from the given context (MS MARCO), the model does not perform as well, since SQuAD 1.1 is a span-matching task.

SQuAD 1.1 TriviaQA 1.0 for RC MS MARCO
f1 Score 88.7 60.9 40.7
Exact Match 81.5 53.8 9.4

References

Licenses

Component License Link
This repository Apache 2.0 LICENSE
Fine-tuned Model Weights Apache 2.0 LICENSE
Pre-trained Model Weights Apache 2.0 LICENSE
Model Code (3rd party) Apache 2.0 LICENSE
Test samples CC BY-SA 4.0 samples README

Pre-requisites:

  • docker: The Docker command-line interface. Follow the installation instructions for your system.
  • The minimum recommended resources for this model is 2 GiB Memory and 4 CPUs.
  • If you are on x86-64/AMD64, your CPU must support AVX at the minimum.

Deployment Options

Deploy from Quay

To run the docker image, which automatically starts the model serving API, run:

$ docker run -it -p 5000:5000 quay.io/codait/max-question-answering

This will pull a pre-built image from This will pull a pre-built image from the Quay.io container registry (or use an existing image if already cached locally) and run it. (or use an existing image if already cached locally) and run it. If you'd rather checkout and build the model locally you can follow the run locally steps below.

Deploy on Red Hat OpenShift

You can deploy the model-serving microservice on Red Hat OpenShift by following the instructions for the OpenShift web console or the OpenShift Container Platform CLI in this tutorial, specifying codait/max-question-answering as the image name.

Deploy on Kubernetes

You can also deploy the model on Kubernetes using the latest docker image on Quay.

On your Kubernetes cluster, run the following commands:

$ kubectl apply -f https://github.com/IBM/MAX-Question-Answering/raw/master/max-question-answering.yaml

The model will be available internally at port 5000, but can also be accessed externally through the NodePort.

A more elaborate tutorial on how to deploy this MAX model to production on IBM Cloud can be found here.

Run Locally

  1. Build the Model
  2. Deploy the Model
  3. Use the Model
  4. Run the Notebook
  5. Development
  6. Cleanup

1. Build the Model

Clone this repository locally. In a terminal, run the following command:

$ git clone https://github.com/IBM/MAX-Question-Answering.git

Change directory into the repository base folder:

$ cd MAX-Question-Answering

To build the docker image locally, run:

$ docker build -t max-question-answering .

All required model assets will be downloaded during the build process. Note that currently this docker image is CPU only (we will add support for GPU images later).

2. Deploy the Model

To run the docker image, which automatically starts the model serving API, run:

$ docker run -it -p 5000:5000 max-question-answering

3. Use the Model

The API server automatically generates an interactive Swagger documentation page. Go to http://localhost:5000 to load it. From there you can explore the API and also create test requests.

Use the model/predict endpoint to upload a test json file (you can use/alter the files from the samples folder) and get answers to the questions from the API.

Sample input:

{
  "paragraphs": [
    {
      "context": "John lives in Brussels and works for the EU",
      "questions": [
        "Where does John Live?",
        "What does John do?",
        "What is his name?"
      ]
    },
    {
      "context": "Jane lives in Paris and works for the UN",
      "questions": [
        "Where does Jane Live?",
        "What does Jane do?"
      ]
    }
  ]
}

Example of getting answers from the API

You can also test it on the command line, for example:

$ curl -X POST "http://localhost:5000/model/predict" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"paragraphs\": [{ \"context\": \"John lives in Brussels and works for the EU\", \"questions\": [\"Where does John Live?\",\"What does John do?\",\"What is his name?\" ]},{ \"context\": \"Jane lives in Paris and works for the UN\", \"questions\": [\"Where does Jane Live?\",\"What does Jane do?\" ]}]}"

You should see a JSON response like that below:

{
  "status": "ok",
  "predictions": [
    [
      "Brussels",
      "works for the EU",
      "John"
    ],
    [
      "Paris",
      "works for the UN"
    ]
  ]
}

4. Run the Notebook

The demo notebook walks through how to use the model to run inference on a text file or on text in-memory. By default, the notebook uses the hosted demo instance, but you can use a locally running instance as well. Note the demo requires jupyter, pprint, json and requests.

Run the following command from the model repo base folder, in a new terminal window:

$ jupyter notebook

This will start the notebook server. You can launch the demo notebook by clicking on samples/demo.ipynb.

5. Development

To run the Flask API app in debug mode, edit config.py to set DEBUG = True under the application settings. You will then need to rebuild the docker image (see step 1).

6. Cleanup

To stop the Docker container, type CTRL + C in your terminal.

Train this Model on Watson Machine Learning

This model supports training from scratch on a custom dataset. Please follow the steps listed under the training README to retrain the model on Watson Machine Learning, a deep learning as a service offering of IBM Cloud.

Resources and Contributions

If you are interested in contributing to the Model Asset Exchange project or have any queries, please follow the instructions here.

max-question-answering's People

Contributors

bdwyer2 avatar dependabot[bot] avatar kmh4321 avatar ptitzler avatar xuhdev avatar yil532 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

max-question-answering's Issues

Deployment on Red Hat OpenShift fails

During startup the following error is logged:

Traceback (most recent call last):
  File "app.py", line 18, in <module>
    from api import ModelMetadataAPI, ModelPredictAPI
  File "/workspace/api/__init__.py", line 18, in <module>
    from .predict import ModelPredictAPI  # noqa
  File "/workspace/api/predict.py", line 64, in <module>
    class ModelPredictAPI(PredictAPI):
  File "/workspace/api/predict.py", line 66, in ModelPredictAPI
    model_wrapper = ModelWrapper()
  File "/workspace/core/model.py", line 57, in __init__
    vocab_file='assets/vocab.txt', do_lower_case=True)
  File "/workspace/core/tokenization.py", line 151, in __init__
    self.vocab = load_vocab(vocab_file)
  File "/workspace/core/tokenization.py", line 113, in load_vocab
    token = convert_to_unicode(reader.readline())
  File "/opt/conda/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py", line 183, in readline
    self._preread_check()
  File "/opt/conda/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py", line 85, in _preread_check
    compat.as_bytes(self.__name), 1024 * 512, status)
  File "/opt/conda/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 528, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.PermissionDeniedError: assets/vocab.txt; Permission denied

Permissions:

$ ls -al
total 92
drwxr-xr-x. 1 root root 4096 Sep 13 07:24 .
drwxr-xr-x. 1 root root 4096 Sep 18 12:52 ..
-rw-r--r--. 1 root root 15 Sep 13 07:16 .dockerignore
-rw-r--r--. 1 root root 1197 Sep 13 07:16 .gitignore
-rw-r--r--. 1 root root 912 Sep 13 07:16 .travis.yml
-rw-r--r--. 1 root root 1650 Sep 13 07:16 Dockerfile
-rw-r--r--. 1 root root 11357 Sep 13 07:16 LICENSE
-rw-r--r--. 1 root root 812 May 29 00:32 README.md
drwxr-xr-x. 2 root root 4096 Sep 13 07:16 api
-rw-r--r--. 1 root root 878 Sep 13 07:16 app.py
drwxr-xr-x. 1 501 staff 4096 Sep 13 07:21 assets
-rw-r--r--. 1 root root 955 Sep 13 07:16 config.py
drwxr-xr-x. 2 root root 4096 Sep 13 07:16 core
drwxr-xr-x. 2 root root 4096 Sep 13 07:16 docs
-rw-r--r--. 1 root root 1221 Sep 13 07:16 max-question-answering.yaml
-rw-r--r--. 1 root root 23 Sep 13 07:16 requirements-test.txt
-rw-r--r--. 1 root root 45 Sep 13 07:16 requirements.txt
drwxr-xr-x. 2 root root 4096 Sep 13 07:16 samples
-rw-r--r--. 1 root root 677 Sep 13 07:16 sha512sums.txt
drwxr-xr-x. 2 root root 4096 Sep 13 07:16 tests
$ cd assets
$ ls -al
total 248
drwxr-xr-x. 1 501 staff 4096 Sep 13 07:21 .
drwxr-xr-x. 1 root root 4096 Sep 13 07:24 ..
-rwxr-xr-x. 1 501 staff 213 Sep 13 01:41 ._max_qa_model
-rw-------. 1 501 staff 350 Sep 13 01:39 ._vocab.txt
drwxr-xr-x. 3 501 staff 4096 Sep 13 07:21 max_qa_model
-rw-------. 1 501 staff 231508 Sep 13 01:39 vocab.txt


ERROR

Hi @kocolosk @rmg @xuhdev @jjasghar @MLnick ,
I had clone this repository and run this command sudo docker run -it -p 5000:5000 codait/max-question-answering i had got display a page in the web browser like

webbrowser_image

In post section i am getting the response through swagger and i am getting the result..

but http://localhost:5000/model/predict its not working its showing an error message like

error_message

now i want to display in separate page and i want it as separate API.
and also can you explain the process of execution from starting..

Thanks and Regards,
Manikantha Sekhar...

Sample notebook review

Suggestions for improvements:

  • Add a link to the GH repo where the notebook is stored. as is, the context where this notebook came from is lost (e.g. if one loads the notebook into a Watson Studio project).
  • As is, the notebook won't run in the cloud because the input data files are assumed to reside in the local file system.
  • In section "Run inference on a sample file" we should describe the input data structure. As is we are assuming that the reader is familiar with what the different properties are used for. For example, in the following cell we "preview [a] paragraph" yet access a property named context.
 # Preview paragraph
 pp.pprint(input_to_model['paragraphs'][0]['context'])

Requesting for Selector Training and Reformulator Training Checkpoints

Hi ,

This is Manikantha , actually I am using ActiveQA Github repository to generate questions and answers actually right now i am looking for a checkpoints for Selector Training and Reformulator Training ( Pre-Trained Models ), actually i was unable to download from the ActiveQA Readme.md file so could you please send that files if are having..

Stay Safe and Stay Home..

Thanks and Regards,
Manikantha Sekhar,
[email protected]
+91 8099906827.

Support max-training-framework 0.1.1

Starting with version 0.1.1, setup_max_model_training is only looking for training data files in the data subdirectory. We therefore need to

  • move sample_training_data/sample-train.json to sample_training_data/data/sample-train.json
  • change the model training code to load training data from ${DATA_DIR}/data
  • update the documentation
    before this model can utilize 0.1.1.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.