tejzz4589's picture
may be final
f1cdb6f
Raw
History Blame Contribute Delete
3.04 kB
"""
Main Module.
Command-line interface for the Hybrid LLM Hallucination Detection System.
"""
import argparse
from datasets import load_dataset
from analyzer import HallucinationAnalyzer
def main():
"""Main entry point for the hallucination detection system."""
parser = argparse.ArgumentParser(
description="Hybrid LLM Hallucination Detection System"
)
parser.add_argument(
"--prompt",
type=str,
default=None,
help="Optional single prompt to analyze (if not using full dataset)",
)
parser.add_argument(
"--use-dataset",
action="store_true",
help="Run evaluation on the TruthfulQA validation set",
)
parser.add_argument(
"--num-responses",
type=int,
default=5,
help="Number of responses to generate (default: 5)",
)
parser.add_argument(
"--max-length",
type=int,
default=50,
help="Maximum generation length (default: 50)",
)
parser.add_argument(
"--temperature",
type=float,
default=0.8,
help="Sampling temperature (default: 0.8)",
)
parser.add_argument(
"--model",
type=str,
default="gpt2",
help="GPT-2 model variant (default: gpt2)",
)
parser.add_argument(
"--alpha",
type=float,
default=0.6,
help="Weight for internal risk in final score (default: 0.6)",
)
parser.add_argument(
"--beta",
type=float,
default=0.4,
help="Weight for external risk in final score (default: 0.4)",
)
parser.add_argument(
"--semantic-threshold",
type=float,
default=0.80,
help="Min cosine similarity to match a TruthfulQA question (default: 0.80)",
)
args = parser.parse_args()
analyzer = HallucinationAnalyzer(
model_name=args.model,
semantic_threshold=args.semantic_threshold,
)
if args.use_dataset:
dataset = load_dataset("truthful_qa", "generation")
data = dataset["validation"]
for example in data:
question = example["question"]
print("\n" + "=" * 30)
print(f"Question: {question}")
print("=" * 30)
results = analyzer.analyze(
prompt=question,
num_responses=args.num_responses,
max_length=args.max_length,
temperature=args.temperature,
alpha=args.alpha,
beta=args.beta,
)
analyzer.print_summary(results)
elif args.prompt:
results = analyzer.analyze(
prompt=args.prompt,
num_responses=args.num_responses,
max_length=args.max_length,
temperature=args.temperature,
alpha=args.alpha,
beta=args.beta,
)
analyzer.print_summary(results)
else:
print("Provide --prompt or --use-dataset")
if __name__ == "__main__":
main()