Skip to main content

A Python package for computing inverse entropy in language models

Project description

inventropy

A Python package for computing inverse entropy in language models. This metric helps evaluate the consistency and reliability of language model outputs.

Installation

pip install inventropy

Quick Start

Basic Usage (OpenAI)

import openai
from inventropy import calculate_inv_entropy

# Set your OpenAI API key
openai.api_key = "your-api-key-here"

# Calculate inverse entropy for a question
question = "What is artificial intelligence?"
mean_inv_entropy = calculate_inv_entropy(question)

print(f"Inverse Entropy: {mean_inv_entropy:.4f}")

Advanced Usage: Using Different Embedding Methods

# Fast 
result = calculate_inv_entropy(question, embedding_method="sbert-small")

# Fast
result = calculate_inv_entropy(question, embedding_method="sbert-large")

# Highest quality (slower)
result = calculate_inv_entropy(question, embedding_method="deberta")

Advanced Usage: Custom LLM (e.g., Claude)

You can use any paraphrasing method and language model by providing custom functions:

import anthropic
import re
from inventropy import calculate_inv_entropy

def claude_paraphrase(sentence, num_perturb=9, model="claude-sonnet-4-20250514", **kwargs):
    """Custom paraphrase function using Claude"""
    client = anthropic.Anthropic(api_key="your-anthropic-api-key")
    message = client.messages.create(
        model=model,
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": f"Provide {num_perturb} paraphrases for this sentence: {sentence}\n\nReturn ONLY the paraphrases, one per line."
        }]
    )
    
    text = message.content[0].text
    lines = [line.strip() for line in text.split('\n') if line.strip()]
    
    # Clean: remove numbering
    paraphrases = []
    for line in lines:
        if any(skip in line.lower() for skip in ['here are', 'paraphrase', ':']):
            continue
        cleaned = re.sub(r'^\d+[\.\)]\s*', '', line)
        if cleaned:
            paraphrases.append(cleaned)
    
    return paraphrases[:num_perturb]

def claude_answer(question, num_replication=5, model="claude-sonnet-4-20250514", temperature=0.7, **kwargs):
    """Custom answer function using Claude"""
    client = anthropic.Anthropic(api_key="your-anthropic-api-key")
    responses = []
    for _ in range(num_replication):
        message = client.messages.create(
            model=model,
            max_tokens=100,
            temperature=temperature,
            messages=[{
                "role": "user",
                "content": f"{question} Answer concisely."
            }]
        )
        responses.append(message.content[0].text)
    return responses

# Use custom functions
mean_inv_entropy = calculate_inv_entropy(
    "What is machine learning?",
    paraphrase_func=claude_paraphrase,
    answer_func=claude_answer,
    embedding_method="sbert-large"
)

Parameters

  • original_question (str): The question to analyze
  • num_perturb (int, default=9): Number of paraphrases to generate
  • num_replication (int, default=5): Number of answer samples per question
  • num_bootstrap (int, default=10): Number of bootstrap iterations
  • model (str, default="gpt-3.5-turbo"): LLM model name
  • temperature (float, default=0.7): Sampling temperature when responding answers
  • embedding_method (str, default="sbert-small"): Embedding method
    • "sbert-small": Fast, lightweight (paraphrase-MiniLM-L6-v2)
    • "sbert-large": Better quality (all-mpnet-base-v2)
    • "deberta": Highest quality, slower (DeBERTa-v2-xlarge-mnli)
  • paraphrase_func (callable, optional): Custom paraphrase function
  • answer_func (callable, optional): Custom answer function

What is Inv-Entropy?

Inv-entropy measures the uncertainty of language model outputs. Please look at https://arxiv.org/abs/2506.09684

Requirements

  • Python ≥ 3.8
  • OpenAI API key (or custom LLM API)
  • CUDA-compatible GPU (optional, for faster processing)

Dependencies

All dependencies are automatically installed:

  • openai==0.28.0
  • numpy
  • pandas
  • torch
  • sentence-transformers
  • transformers
  • scipy
  • sentencepiece

Parameter Sensitivity and Comparability

Inv-entropy is scale-dependent on the sampling parameters num_perturb and num_replication. These parameters determine the dimensionality of the similarity matrices used in the computation, thereby affecting the absolute scale of the resulting Inv-entropy values.

For valid comparisons: When evaluating and comparing Inv-entropy across multiple questions, ensure that num_perturb and num_replication remain constant across all measurements.

Citation

If you use this package in your research, please cite:

@article{song2025inv,
  title={Inv-Entropy: A Fully Probabilistic Framework for Uncertainty Quantification in Language Models},
  author={Song, Haoyi and Ji, Ruihan and Shi, Naichen and Lai, Fan and Kontar, Raed Al},
  journal={arXiv preprint arXiv:2506.09684},
  year={2025}
}

License

MIT License - see LICENSE file for details

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues and questions:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inventropy-0.1.0.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inventropy-0.1.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file inventropy-0.1.0.tar.gz.

File metadata

  • Download URL: inventropy-0.1.0.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for inventropy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 67e6e1dcf0dbae077e07db365de3c1de8454535e21e33364b4156f41bbcb3df9
MD5 d41e414e8e486cae848da30bd78dbd82
BLAKE2b-256 146b7f371a4f2daea319ce07f53ecd4c2b6b9b7e80dc0275aeac136e3e642a98

See more details on using hashes here.

File details

Details for the file inventropy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: inventropy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for inventropy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d5f7acc18525c691aae367188fe8dcccc1ba274786b17c8d33b6e1a304445aaf
MD5 c1877e7a7e9fddf94fddd42e48d653f5
BLAKE2b-256 7ba50caec38c71db93241191eaf01e26d346cf386671628a28dce26c6af142e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page