Predictive Hacks

Answering Questions with Transformers

nlu

In a previous post, we showed how we could do text summarization with transformers. Here, we will provide you an example, of how we can use transformers for question answering. We will work with the huggingface library. We will work with Google Colab, so the example is reproducible. First, we need to install the libraries:

!pip install transformers
!pip install torch

Now, we are ready to work with the transformers.

Example of Answering Questions

For an AI algorithm to be able to answer questions from an input text, it means that it is able to “understand”, that is why we call it Natural Language Understanding (NLU) and to be able to respond by generating a text, that is why we call it Natural Language Generation (NLG). The process that we will follow for question answering is described in hugging face documentation:

  • Start the BERT model
  • Provide the input text and the required questions
  • Iterate over the questions and build a sequence from the text and the current question, with the correct model-specific separators token type ids and attention masks
  • Pass this sequence through the model. This outputs a range of scores across the entire sequence tokens (question and text), for both the start and end positions.
  • Compute the softmax of the result to get probabilities over the tokens
  • Fetch the tokens from the identified start and stop values, convert those tokens to a string.
  • Print the results

Note that I took the code from the Hugging Face documentation, and I made a change because there was a bug. I changed the:

answer_start_scores, answer_end_scores = model(**inputs)

with:

answer_start_scores, answer_end_scores = model(**inputs)[0], model(**inputs)[1]

In our example, I provide the following input text:

My name is George Pipis and I work as a Data Scientist at Persado. My personal blog is called Predictive Hacks which provides tutorials mainly in R and Python

And I will make the following questions:

  • What is my name?
  • What is George Pipis job?
  • What is the name of the blog?
  • What is the blog about?
  • Where does George work?

Let’s see how well can transformers answer those questions above.

from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch

tokenizer = AutoTokenizer.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
model = AutoModelForQuestionAnswering.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")

text = r"""
My name is George Pipis and I work as a Data Scientist at Persado. 
My personal blog is called Predictive Hacks which provides tutorials mainly in R and Python.

"""

questions = [
    "What is my name?",
    "What is George Pipis job?",
    "What is the name of the blog?",
    "What is the blog about?",
    "Where does George work?"
]

for question in questions:
    inputs = tokenizer.encode_plus(question, text, add_special_tokens=True, return_tensors="pt")
    input_ids = inputs["input_ids"].tolist()[0]

    text_tokens = tokenizer.convert_ids_to_tokens(input_ids)
    answer_start_scores, answer_end_scores = model(**inputs)[0], model(**inputs)[1]

    answer_start = torch.argmax(answer_start_scores)  # Get the most likely beginning of answer with the argmax of the score
    answer_end = torch.argmax(answer_end_scores) + 1  # Get the most likely end of answer with the argmax of the score

    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))

    print(f"Question: {question}")
    print(f"Answer: {answer}\n")
 

Output:

Question: What is my name?
Answer: george pipis

Question: What is George Pipis job?
Answer: data scientist

Question: What is the name of the blog?
Answer: predictive hacks

Question: What is the blog about?
Answer: tutorials

Question: Where does George work?
Answer: persado

Not bad at all! The model was able to provide good answers 🤗

Share This Post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Leave a Comment

Subscribe To Our Newsletter

Get updates and learn from the best

More To Explore

Python

Image Captioning with HuggingFace

Image captioning with AI is a fascinating application of artificial intelligence (AI) that involves generating textual descriptions for images automatically.

Python

Intro to Chatbots with HuggingFace

In this tutorial, we will show you how to use the Transformers library from HuggingFace to build chatbot pipelines. Let’s