Custom node for the Haystack NLP framework. Using a Natural Language Inference model, it checks whether a lists of Documents/passages entails, contradicts or is neutral with respect to a given statement.
Live Demo: Fact Checking ๐ธ Rocks!
pip install haystack-entailment-checker
from haystack import Document
from haystack_entailment_checker import EntailmentChecker
ec = EntailmentChecker(
model_name_or_path = "microsoft/deberta-v2-xlarge-mnli",
use_gpu = False,
entailment_contradiction_threshold = 0.5)
doc = Document("My cat is lazy")
print(ec.run("My cat is very active", [doc]))
# ({'documents': [...],
# 'aggregate_entailment_info': {'contradiction': 1.0, 'neutral': 0.0, 'entailment': 0.0}}, ...)
from haystack import Document, Pipeline
from haystack.nodes import BM25Retriever
from haystack.document_stores import InMemoryDocumentStore
from haystack_entailment_checker import EntailmentChecker
# INDEXING
# the knowledge base can consist of many documents
docs = [...]
ds = InMemoryDocumentStore(use_bm25=True)
ds.write_documents(docs)
# QUERYING
retriever = BM25Retriever(document_store=ds)
ec = EntailmentChecker()
pipe = Pipeline()
pipe.add_node(component=retriever, name="Retriever", inputs=["Query"])
pipe.add_node(component=ec, name="EntailmentChecker", inputs=["Retriever"])
pipe.run(query="YOUR STATEMENT TO CHECK")
Special thanks goes to @davidberenstein1957, who contributed to the original implementation of this node, in the Fact Checking ๐ธ Rocks! project.