HomeDocumentationAPI ReferenceWhat's NewTutorials
Haystack Homepage

Generator

The Generator reads a set of documents and generates an answer to a question, word by word. While extractive QA highlights the span of text that answers a query, generative QA can return a novel text answer it has composed. This page explains how to use the Generator.

The best current approaches, such as Retriever-Augmented Generation and LFQA, can draw upon both the knowledge it gained during language model pretraining (parametric memory) as well as passages provided to it with a Retriever (non-parametric memory). With the advent of transformer-based retrieval methods such as Dense Passage Retrieval, Retriever and Generator can be trained concurrently from the one loss signal.

Position in a PipelineGenerator is placed after the Retriever and can be used as a substitute to the Reader.
InputDocuments
OutputAnswers
ClassesRAGenerator, Seq2SeqGenerator

Pros

  • More appropriately phrased answers.
  • Able to synthesize information from different texts.
  • Can draw on latent knowledge stored in language model.

Cons

  • Not easy to track what piece of information the generator is basing its response off of.

📘

Tutorial

Build your own generative QA system with RAG and LFQA.

Usage

To initialize a Generator:

from haystack.nodes import RAGenerator

generator = RAGenerator(
    model_name_or_path="facebook/rag-sequence-nq",
    retriever=dpr_retriever,
    top_k=1,
    min_length=2
)

To run a Generator in a pipeline:

from haystack.pipelines import GenerativeQAPipeline

pipeline = GenerativeQAPipeline(generator=generator, retriever=dpr_retriever)
result = pipelines.run(query='What are the best party games for adults?', top_k_retriever=20)

To run a stand-alone Generator:

result = generator.predict(
    query='What are the best party games for adults?',
    documents=[doc1, doc2, doc3...],
    top_k=top_k
)