|
|
import streamlit as st |
|
|
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification |
|
|
import wikipediaapi |
|
|
|
|
|
|
|
|
model = AutoModelForSequenceClassification.from_pretrained( |
|
|
"vectara/hallucination_evaluation_model", trust_remote_code=True |
|
|
) |
|
|
tokenizer = AutoTokenizer.from_pretrained('google/flan-t5-base') |
|
|
classifier = pipeline( |
|
|
"text-classification", |
|
|
model=model, |
|
|
tokenizer=tokenizer, |
|
|
trust_remote_code=True |
|
|
) |
|
|
|
|
|
|
|
|
def generate_premise_wikipedia(query): |
|
|
""" |
|
|
Retrieves the most relevant Wikipedia summary as a premise for the given query. |
|
|
""" |
|
|
wiki_wiki = wikipediaapi.Wikipedia('en') |
|
|
search_results = wiki_wiki.page(query) |
|
|
|
|
|
if search_results.exists(): |
|
|
|
|
|
return search_results.summary |
|
|
else: |
|
|
return "No relevant information found on Wikipedia." |
|
|
|
|
|
|
|
|
st.title("Hallucination Detection App") |
|
|
st.write("Enter a query, and the app will check if it is hallucinated or factual using Wikipedia as a factual source.") |
|
|
|
|
|
|
|
|
query = st.text_input("Enter your query:") |
|
|
|
|
|
if query: |
|
|
|
|
|
premise = generate_premise_wikipedia(query) |
|
|
|
|
|
if premise != "No relevant information found on Wikipedia.": |
|
|
|
|
|
prompt = f"<pad> Determine if the hypothesis is true given the premise?\n\nPremise: {premise}\n\nHypothesis: {query}" |
|
|
result = classifier([prompt], top_k=None)[0][0] |
|
|
|
|
|
|
|
|
st.write(f"**Premise (from Wikipedia):** {premise}") |
|
|
st.write(f"**Hypothesis:** {query}") |
|
|
st.write(f"**Result:** {result['label']} (Confidence: {result['score']:.2f})") |
|
|
else: |
|
|
st.write("**Premise:** No relevant information found on Wikipedia.") |
|
|
|