Text Generation
Transformers
Safetensors
GGUF
English
qwen2
quantum-ml
hybrid-quantum-classical
quantum-kernel
research
quantum-computing
nisq
qiskit
quantum-circuits
vibe-thinker
physics-inspired-ml
quantum-enhanced
hybrid-ai
1.5b
small-model
efficient-ai
reasoning
chemistry
physics
text-generation-inference
conversational
File size: 14,961 Bytes
41ab1ac |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 |
"""
Quantum-VibeThinker Hybrid Model - Proof of Concept
====================================================
Гибридная квантово-классическая модель для анализа текста
Архитектура:
1. VibeThinker-1.5B → извлечение embeddings
2. PCA сжатие → 4D для квантового слоя
3. Квантовое ядро → вычисление похожести
4. SVM классификатор → финальное решение
Требования:
- MacBook Pro M4 (16GB RAM)
- transformers, torch, qiskit, sklearn
"""
import numpy as np
import torch
import time
import json
from pathlib import Path
print("="*70)
print("🧠 QUANTUM-VIBTHINKER HYBRID MODEL")
print("="*70)
print("\n💻 Платформа: MacBook Pro M4")
print("🔬 Режим: Proof of Concept\n")
# ===== ШАГ 1: ПРОВЕРКА ОКРУЖЕНИЯ =====
print("="*70)
print("ШАГ 1/8: ПРОВЕРКА ОКРУЖЕНИЯ")
print("="*70)
# Проверка устройства
if torch.backends.mps.is_available():
device = torch.device("mps") # M4 GPU
print("✅ Metal Performance Shaders доступен (M4 GPU)")
elif torch.cuda.is_available():
device = torch.device("cuda")
print("✅ CUDA доступен")
else:
device = torch.device("cpu")
print("⚠️ Используем CPU")
print(f"🎯 Устройство: {device}")
# ===== ШАГ 2: ЗАГРУЗКА VIBTHINKER =====
print("\n" + "="*70)
print("ШАГ 2/8: ЗАГРУЗКА VIBTHINKER-1.5B")
print("="*70)
try:
from transformers import AutoModel, AutoTokenizer
print("📥 Загрузка модели (может занять 1-2 минуты)...")
start = time.time()
model_name = "WeiboAI/VibeThinker-1.5B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(
model_name,
torch_dtype=torch.float16 # FP16 для экономии памяти на M4
)
model.to(device)
model.eval()
load_time = time.time() - start
print(f"✅ VibeThinker загружен за {load_time:.1f} сек")
print(f"📊 Параметры: ~1.5B")
print(f"💾 Память: ~3GB на M4")
except Exception as e:
print(f"❌ Ошибка загрузки VibeThinker: {e}")
print("\n💡 Установите: pip install transformers torch")
exit(1)
# ===== ШАГ 3: ПОДГОТОВКА ДАННЫХ =====
print("\n" + "="*70)
print("ШАГ 3/8: ПОДГОТОВКА ТЕСТОВЫХ ДАННЫХ")
print("="*70)
# Датасет для sentiment analysis
texts_train = [
"I absolutely love quantum computing! It's amazing!",
"This is the worst experience ever, terrible.",
"Quantum neural networks are fascinating and powerful.",
"I hate bugs in my code, so frustrating!",
"The future of AI is quantum, incredible potential!",
"This product is garbage, waste of money.",
"Machine learning combined with quantum is brilliant!",
"Awful customer service, never coming back."
]
labels_train = [1, 0, 1, 0, 1, 0, 1, 0] # 1=positive, 0=negative
texts_test = [
"Quantum algorithms are revolutionary!",
"This is horrible, I'm disappointed.",
"Amazing breakthrough in quantum ML!",
"Terrible quality, very bad."
]
labels_test = [1, 0, 1, 0]
print(f"✅ Обучающая выборка: {len(texts_train)} образцов")
print(f"✅ Тестовая выборка: {len(texts_test)} образцов")
print(f"\nПримеры:")
for i in range(2):
label = "😊 Positive" if labels_train[i] == 1 else "😞 Negative"
print(f" {label}: '{texts_train[i][:50]}...'")
# ===== ШАГ 4: ИЗВЛЕЧЕНИЕ EMBEDDINGS =====
print("\n" + "="*70)
print("ШАГ 4/8: ИЗВЛЕЧЕНИЕ EMBEDDINGS ЧЕРЕЗ VIBTHINKER")
print("="*70)
def get_embeddings(texts, model, tokenizer, device):
"""Извлекает embeddings из VibeThinker"""
embeddings = []
print(f"🔄 Обработка {len(texts)} текстов...")
start = time.time()
with torch.no_grad():
for i, text in enumerate(texts):
# Токенизация
inputs = tokenizer(
text,
return_tensors="pt",
padding=True,
truncation=True,
max_length=128
).to(device)
# Прогон через модель
outputs = model(**inputs)
# Усреднение по токенам
embedding = outputs.last_hidden_state.mean(dim=1).cpu().numpy()[0]
embeddings.append(embedding)
if (i + 1) % 4 == 0:
print(f" Обработано: {i + 1}/{len(texts)}")
elapsed = time.time() - start
print(f"✅ Готово за {elapsed:.1f} сек ({elapsed/len(texts):.2f} сек/текст)")
return np.array(embeddings)
# Извлечение embeddings
X_train_emb = get_embeddings(texts_train, model, tokenizer, device)
X_test_emb = get_embeddings(texts_test, model, tokenizer, device)
print(f"\n📊 Размерность embeddings: {X_train_emb.shape[1]}D")
print(f" Train: {X_train_emb.shape}")
print(f" Test: {X_test_emb.shape}")
# ===== ШАГ 5: СЖАТИЕ ДО 4D ДЛЯ КВАНТОВОГО СЛОЯ =====
print("\n" + "="*70)
print("ШАГ 5/8: СЖАТИЕ РАЗМЕРНОСТИ (PCA)")
print("="*70)
from sklearn.decomposition import PCA
# Сжимаем до 4D для 2-кубитной QNN
pca = PCA(n_components=4)
X_train_4d = pca.fit_transform(X_train_emb)
X_test_4d = pca.transform(X_test_emb)
print(f"✅ Сжатие: {X_train_emb.shape[1]}D → 4D")
print(f"📊 Объяснённая дисперсия: {pca.explained_variance_ratio_.sum():.1%}")
print(f" Компоненты: {pca.explained_variance_ratio_}")
# Нормализация для квантовых гейтов [0, 2π]
X_train_norm = (X_train_4d - X_train_4d.min()) / (X_train_4d.max() - X_train_4d.min()) * 2 * np.pi
X_test_norm = (X_test_4d - X_train_4d.min()) / (X_train_4d.max() - X_train_4d.min()) * 2 * np.pi
print(f"✅ Нормализация: [0, 2π] для квантовых углов")
# ===== ШАГ 6: КВАНТОВОЕ ЯДРО =====
print("\n" + "="*70)
print("ШАГ 6/8: ВЫЧИСЛЕНИЕ КВАНТОВОГО ЯДРА")
print("="*70)
from qiskit import QuantumCircuit
from qiskit.circuit import ParameterVector
from qiskit.primitives import StatevectorSampler
def quantum_kernel(X1, X2):
"""
Вычисляет квантовую матрицу ядра
Использует 2-кубитную схему с запутыванием
"""
n1, n2 = len(X1), len(X2)
kernel_matrix = np.zeros((n1, n2))
# Создаём схему
input_params = ParameterVector('x', 4)
qc = QuantumCircuit(2)
# Кодирование данных
qc.ry(input_params[0], 0)
qc.ry(input_params[1], 1)
# Запутывание
qc.cx(0, 1)
# Вариационный слой
qc.ry(input_params[2], 0)
qc.ry(input_params[3], 1)
# Ещё запутывание
qc.cx(1, 0)
qc.measure_all()
sampler = StatevectorSampler()
print(f"🔄 Вычисление {n1}×{n2} = {n1*n2} элементов матрицы...")
start = time.time()
for i in range(n1):
for j in range(n2):
# Создаём overlap circuit
qc1 = qc.assign_parameters({
input_params[0]: X1[i][0],
input_params[1]: X1[i][1],
input_params[2]: X1[i][2],
input_params[3]: X1[i][3]
})
qc2 = qc.assign_parameters({
input_params[0]: X2[j][0],
input_params[1]: X2[j][1],
input_params[2]: X2[j][2],
input_params[3]: X2[j][3]
})
# Overlap = вероятность измерить |00>
result1 = sampler.run([qc1], shots=500).result()
counts1 = result1[0].data.meas.get_counts()
result2 = sampler.run([qc2], shots=500).result()
counts2 = result2[0].data.meas.get_counts()
# Фиделити через dot product распределений
fidelity = sum(np.sqrt(counts1.get(k, 0) * counts2.get(k, 0))
for k in set(counts1) | set(counts2)) / 500
kernel_matrix[i, j] = fidelity
elapsed = time.time() - start
print(f"✅ Квантовое ядро вычислено за {elapsed:.1f} сек")
return kernel_matrix
# Вычисление матриц ядра
print("\n📊 Вычисление K_train...")
K_train = quantum_kernel(X_train_norm, X_train_norm)
print("\n📊 Вычисление K_test...")
K_test = quantum_kernel(X_test_norm, X_train_norm)
print(f"\n✅ Матрицы квантового ядра готовы!")
print(f" K_train: {K_train.shape}")
print(f" K_test: {K_test.shape}")
print(f" Среднее значение: {K_train.mean():.3f}")
# ===== ШАГ 7: ОБУЧЕНИЕ И ТЕСТИРОВАНИЕ =====
print("\n" + "="*70)
print("ШАГ 7/8: ОБУЧЕНИЕ ГИБРИДНОЙ МОДЕЛИ")
print("="*70)
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report
# Baseline: Классический SVM на embeddings
print("\n1️⃣ BASELINE: VibeThinker + Linear SVM")
svm_baseline = SVC(kernel='linear')
svm_baseline.fit(X_train_emb, labels_train)
pred_baseline = svm_baseline.predict(X_test_emb)
acc_baseline = accuracy_score(labels_test, pred_baseline)
print(f" Точность: {acc_baseline:.1%}")
# Hybrid: Квантовое ядро
print("\n2️⃣ HYBRID: VibeThinker + Quantum Kernel + SVM")
svm_quantum = SVC(kernel='precomputed')
svm_quantum.fit(K_train, labels_train)
pred_quantum = svm_quantum.predict(K_test)
acc_quantum = accuracy_score(labels_test, pred_quantum)
print(f" Точность: {acc_quantum:.1%}")
# Сравнение
print("\n" + "="*70)
print("📊 СРАВНЕНИЕ МОДЕЛЕЙ")
print("="*70)
print(f"Baseline (Classical): {acc_baseline:.1%}")
print(f"Hybrid (Quantum): {acc_quantum:.1%}")
improvement = (acc_quantum - acc_baseline) * 100
if improvement > 0:
print(f"🎉 Квантовая модель лучше на {improvement:+.1f}%!")
elif improvement < 0:
print(f"⚖️ Классическая модель лучше на {-improvement:.1f}%")
else:
print(f"⚖️ Одинаковая точность")
# Детальный отчёт
print("\n📋 Детальный отчёт (Quantum Hybrid):")
print(classification_report(labels_test, pred_quantum,
target_names=['Negative', 'Positive']))
# ===== ШАГ 8: ВИЗУАЛИЗАЦИЯ И СОХРАНЕНИЕ =====
print("\n" + "="*70)
print("ШАГ 8/8: ВИЗУАЛИЗАЦИЯ И СОХРАНЕНИЕ")
print("="*70)
import matplotlib.pyplot as plt
# График 1: Сравнение точности
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# 1. Точность моделей
models = ['Classical\n(Baseline)', 'Quantum\n(Hybrid)']
accuracies = [acc_baseline, acc_quantum]
colors = ['blue', 'red']
axes[0].bar(models, accuracies, color=colors, alpha=0.7)
axes[0].set_ylabel('Accuracy')
axes[0].set_ylim([0, 1])
axes[0].set_title('Model Comparison')
axes[0].grid(True, alpha=0.3)
# 2. Квантовая матрица ядра
im = axes[1].imshow(K_train, cmap='hot', aspect='auto')
axes[1].set_title('Quantum Kernel Matrix')
axes[1].set_xlabel('Sample j')
axes[1].set_ylabel('Sample i')
plt.colorbar(im, ax=axes[1])
# 3. Предсказания
x_pos = np.arange(len(labels_test))
axes[2].scatter(x_pos, labels_test, c='blue', s=200, alpha=0.5,
marker='o', label='True')
axes[2].scatter(x_pos, pred_quantum, c='red', s=100,
marker='x', label='Predicted')
axes[2].set_title('Predictions (Quantum Hybrid)')
axes[2].set_xlabel('Test Sample')
axes[2].set_ylabel('Class')
axes[2].set_yticks([0, 1])
axes[2].set_yticklabels(['Negative', 'Positive'])
axes[2].legend()
axes[2].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('quantum_vibthinker_results.png', dpi=150, bbox_inches='tight')
print("✅ График сохранён: quantum_vibthinker_results.png")
# Сохранение результатов
results = {
'model': 'Quantum-VibeThinker Hybrid',
'platform': 'MacBook Pro M4',
'vibthinker_model': model_name,
'quantum_qubits': 2,
'embedding_dim': X_train_emb.shape[1],
'compressed_dim': 4,
'accuracy_baseline': float(acc_baseline),
'accuracy_quantum': float(acc_quantum),
'improvement': float(improvement),
'train_samples': len(texts_train),
'test_samples': len(texts_test),
'predictions': {
'true_labels': labels_test,
'quantum_predictions': pred_quantum.tolist(),
'baseline_predictions': pred_baseline.tolist()
}
}
with open('quantum_vibthinker_results.json', 'w') as f:
json.dump(results, f, indent=2)
print("✅ Результаты сохранены: quantum_vibthinker_results.json")
# Сохранение матриц ядра
np.save('K_train_quantum.npy', K_train)
np.save('K_test_quantum.npy', K_test)
print("✅ Квантовые ядра сохранены: K_*.npy")
# ===== ФИНАЛЬНЫЙ ОТЧЁТ =====
print("\n" + "="*70)
print("🎉 PROOF OF CONCEPT ЗАВЕРШЁН!")
print("="*70)
print("\n📊 ИТОГИ:")
print(f" ✅ VibeThinker-1.5B загружен на M4")
print(f" ✅ Embeddings извлечены ({X_train_emb.shape[1]}D)")
print(f" ✅ Квантовое ядро вычислено (2 кубита)")
print(f" ✅ Гибридная модель обучена")
print(f" ✅ Точность: {acc_quantum:.1%}")
print(f"\n💾 СОХРАНЕНО:")
print(f" - quantum_vibthinker_results.png (визуализация)")
print(f" - quantum_vibthinker_results.json (метрики)")
print(f" - K_train_quantum.npy (матрица ядра)")
print(f" - K_test_quantum.npy (матрица ядра)")
print(f"\n🚀 СЛЕДУЮЩИЕ ШАГИ:")
print(f" 1. Увеличить количество данных")
print(f" 2. Попробовать разные квантовые схемы")
print(f" 3. Добавить больше кубитов (3-4)")
print(f" 4. Оптимизировать параметры квантового слоя")
print(f" 5. Сравнить с другими базовыми моделями")
print("\n" + "="*70)
print("✨ Ваша первая Quantum-Classical Hybrid модель готова!")
print("="*70)
|