|
|
--- |
|
|
license: apache-2.0 |
|
|
language: |
|
|
- en |
|
|
library_name: transformers |
|
|
tags: |
|
|
- quantum |
|
|
- confidence-estimation |
|
|
- uncertainty |
|
|
- pennylane |
|
|
- gpt-oss |
|
|
- hallucination-detection |
|
|
pipeline_tag: text-classification |
|
|
--- |
|
|
|
|
|
<div align="center"> |
|
|
|
|
|
# Q-GPT |
|
|
|
|
|
 |
|
|
|
|
|
### Quantum-Enhanced Confidence Estimation for Language Models |
|
|
|
|
|
[](https://pennylane.ai/) |
|
|
[](https://pytorch.org/) |
|
|
[](https://www.apache.org/licenses/LICENSE-2.0) |
|
|
|
|
|
**Know when your LLM is confident β and when it's guessing.** |
|
|
|
|
|
</div> |
|
|
|
|
|
--- |
|
|
|
|
|
## π― What is Q-GPT? |
|
|
|
|
|
Q-GPT is a **quantum neural network head** that attaches to any language model and estimates how confident the model is in its response. It helps you detect when the model might be "hallucinating" or making up information. |
|
|
|
|
|
### The Problem |
|
|
|
|
|
Large Language Models (LLMs) always produce fluent text β even when they don't know the answer. They sound confident even when they're wrong. This makes it hard to trust their outputs in critical applications. |
|
|
|
|
|
### The Solution |
|
|
|
|
|
Q-GPT analyzes the internal hidden states of the model using a **variational quantum circuit**. Quantum computing naturally captures complex patterns and uncertainties that classical networks might miss. The result: a confidence score that tells you whether to trust the response. |
|
|
|
|
|
--- |
|
|
|
|
|
## π§ How It Works |
|
|
|
|
|
``` |
|
|
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
|
|
β Q-GPT Architecture β |
|
|
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ |
|
|
β β |
|
|
β LLM Hidden States Quantum Circuit β |
|
|
β [2880 dimensions] [4 qubits] β |
|
|
β β β β |
|
|
β βΌ β β |
|
|
β βββββββββββββββ β β |
|
|
β β Compress β βββββββββββββββββββΊ β β |
|
|
β β to 4 dims β β β |
|
|
β βββββββββββββββ βΌ β |
|
|
β βββββββββββββββββββ β |
|
|
β β RY RZ β β |
|
|
β β β β β Layer 1 β |
|
|
β β Rot βββ CNOT β β |
|
|
β βββββββββββββββββββ€ β |
|
|
β β Rot βββ CNOT β Layer 2 β |
|
|
β βββββββββββββββββββ€ β |
|
|
β β Rot βββ CNOT β Layer 3 β |
|
|
β βββββββββββββββββββ β |
|
|
β β β |
|
|
β βΌ β |
|
|
β βββββββββββββββββββ β |
|
|
β β Measure β¨Zβ© β β |
|
|
β β on each qubit β β |
|
|
β βββββββββββββββββββ β |
|
|
β β β |
|
|
β βΌ β |
|
|
β βββββββββββββββββββ β |
|
|
β β Confidence β β |
|
|
β β 0.0 β 1.0 β β |
|
|
β βββββββββββββββββββ β |
|
|
β β |
|
|
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
|
|
``` |
|
|
|
|
|
### Step by Step: |
|
|
|
|
|
1. **Extract Hidden States** β When the LLM generates a response, we capture its internal representation (hidden states from the last layer). |
|
|
|
|
|
2. **Compress** β The high-dimensional hidden states (2880 dimensions for GPT-OSS) are compressed to 4 values using a small neural network. |
|
|
|
|
|
3. **Quantum Encoding** β These 4 values are encoded into quantum states using rotation gates (RY, RZ). Each value controls the angle of rotation for one qubit. |
|
|
|
|
|
4. **Variational Layers** β The qubits pass through multiple layers of: |
|
|
- **Rotation gates** (trainable parameters that learn patterns) |
|
|
- **CNOT gates** (create entanglement between qubits) |
|
|
|
|
|
5. **Measurement** β We measure the expectation value β¨Zβ© of each qubit, giving us 4 numbers between -1 and +1. |
|
|
|
|
|
6. **Confidence Output** β A final layer converts these measurements into a confidence score (0-1) and an uncertainty estimate. |
|
|
|
|
|
### Why Quantum? |
|
|
|
|
|
- **Entanglement** captures complex correlations in the data that classical networks struggle with |
|
|
- **Superposition** allows exploring multiple states simultaneously |
|
|
- **Inherent probabilistic nature** naturally represents uncertainty |
|
|
- **Compact representation** β 4 qubits can represent 16-dimensional state space |
|
|
|
|
|
--- |
|
|
|
|
|
## π What You Get |
|
|
|
|
|
| Output | Description | |
|
|
|--------|-------------| |
|
|
| `confidence` | Score from 0.0 to 1.0 β how sure the model is | |
|
|
| `uncertainty` | Quantum-derived uncertainty measure | |
|
|
| `should_refuse` | Boolean β True if confidence < 0.3 (model should decline to answer) | |
|
|
| `confidence_label` | Human-readable: "very high", "high", "moderate", "low", "very low" | |
|
|
|
|
|
--- |
|
|
|
|
|
## π» Usage |
|
|
|
|
|
### Installation |
|
|
|
|
|
```bash |
|
|
pip install pennylane torch transformers |
|
|
``` |
|
|
|
|
|
### Quick Start |
|
|
|
|
|
```python |
|
|
from quantum_head import load_qgpt |
|
|
|
|
|
# Load model with quantum head |
|
|
model, tokenizer = load_qgpt("squ11z1/gpt-oss-9b-reasoning") |
|
|
|
|
|
# Prepare input |
|
|
prompt = "What is the capital of France?" |
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
|
|
|
|
|
# Generate with confidence |
|
|
outputs = model.generate_with_confidence( |
|
|
inputs.input_ids, |
|
|
max_new_tokens=50 |
|
|
) |
|
|
|
|
|
# Check results |
|
|
print(f"Response: {tokenizer.decode(outputs['sequences'][0])}") |
|
|
print(f"Confidence: {outputs['confidence_label']}") # "high" |
|
|
print(f"Should refuse: {outputs['should_refuse']}") # False |
|
|
``` |
|
|
|
|
|
### Using Just the Quantum Head |
|
|
|
|
|
```python |
|
|
from quantum_head import QuantumHead |
|
|
import torch |
|
|
|
|
|
# Create quantum head for your model's hidden size |
|
|
head = QuantumHead(hidden_size=2880) |
|
|
|
|
|
# Get hidden states from your model |
|
|
# hidden_states shape: [batch_size, hidden_size] |
|
|
hidden_states = torch.randn(1, 2880) |
|
|
|
|
|
# Get confidence |
|
|
output = head(hidden_states) |
|
|
print(f"Confidence: {output['confidence'].item():.2%}") |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π Training the Quantum Head |
|
|
|
|
|
The quantum head can be trained on examples where you know if the model was correct: |
|
|
|
|
|
```python |
|
|
from train import train_quantum_head |
|
|
|
|
|
train_quantum_head( |
|
|
model_name="squ11z1/gpt-oss-9b-reasoning", |
|
|
train_data_path="train_data.jsonl", # {text, confidence, is_correct} |
|
|
epochs=3, |
|
|
) |
|
|
``` |
|
|
|
|
|
Training data format (JSONL): |
|
|
```json |
|
|
{"text": "What is 2+2? The answer is 4.", "confidence": 0.95, "is_correct": true} |
|
|
{"text": "The moon is made of cheese.", "confidence": 0.2, "is_correct": false} |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π Files |
|
|
|
|
|
| File | Description | |
|
|
|------|-------------| |
|
|
| `quantum_head.py` | Main implementation (QuantumHead, QGPT, load_qgpt) | |
|
|
| `train.py` | Training script for the quantum head | |
|
|
| `__init__.py` | Package initialization | |
|
|
|
|
|
--- |
|
|
|
|
|
## π¬ Technical Details |
|
|
|
|
|
| Parameter | Value | |
|
|
|-----------|-------| |
|
|
| Qubits | 4 | |
|
|
| Variational Layers | 3 | |
|
|
| Trainable Parameters | ~2,000 (quantum) + ~200,000 (classical) | |
|
|
| Framework | PennyLane + PyTorch | |
|
|
| Fallback | Classical approximation if PennyLane unavailable | |
|
|
|
|
|
--- |
|
|
|
|
|
## β οΈ Limitations |
|
|
|
|
|
- **Not perfect** β Confidence estimation is inherently uncertain |
|
|
- **Training data dependent** β Quality depends on training examples |
|
|
- **Simulation** β Currently runs on quantum simulator, not real hardware |
|
|
- **Latency** β Adds ~10-50ms per inference (quantum circuit execution) |
|
|
|
|
|
--- |
|
|
|
|
|
## π Citation |
|
|
|
|
|
```bibtex |
|
|
@misc{qgpt2026, |
|
|
title={Q-GPT: Quantum-Enhanced Confidence Estimation for Language Models}, |
|
|
author={squ11z1}, |
|
|
year={2026}, |
|
|
url={https://huggingface.co/squ11z1/Q-GPT} |
|
|
} |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π Acknowledgments |
|
|
|
|
|
- [PennyLane](https://pennylane.ai/) β Quantum ML framework |
|
|
- [GPT-OSS](https://huggingface.co/squ11z1/gpt-oss-9b-reasoning) β Base model |
|
|
|
|
|
--- |
|
|
|
|
|
<div align="center"> |
|
|
|
|
|
**Pro Mundi Vita** |
|
|
|
|
|
</div> |
|
|
|