Voice fingerprint vektörleri (embeddings) — içinde ne var
voyage-3-large ile vektöre dönüştürülmüş, tek vektörde ortalanmış 50 senaryo. Her tasarım kararının arkasındaki akıl yürütme — neden senaryolar, neden 50, neden kosinüs, neden voyage.
Voice fingerprint, kurana kadar basit gibi görünen özelliklerden biridir. Çalışma zamanı sözleşmesi: persona başına bir vektör, sohbet yanıtı başına bir kosinüs uzaklığı. Altındaki şekil daha çok nüans taşır.
Bu yazı 4 tasarım kararının arkasındaki akıl yürütmedir: neden senaryolar, neden 50, neden ortalama, neden voyage-3-large.
Bu yazıda ne anlatılıyor
- Persona belgesi ve senaryo — neden Mask'i doğrudan vektöre çıkarmıyoruz
- 50 senaryo neden — gürültü ve maliyet ödünleşmesi
- Ortalama ve birleştirme (concatenate) — bilgi-zengin ve ucuz
- voyage-3-large neden — çok dilli F1 karşılaştırmaları
- Yakaladığı + yakalamadığı — drift'in kapsamı
Kavram sayfası: Voice fingerprint.
Karar 1: Senaryolar, persona belgesi değil
Naif yaklaşım: persona'nın Mask katmanını doğrudan vektöre çıkar — ses, ton, imza ifadeler. Başarısız, çünkü Mask:
- Performatif çıktı değildir — ne yazıldığı değil
- Reçeteli üstveridir — ne reçete edildiği
"Sıcak ama doğrudan" reçete edilmiş persona her zaman sıcak konuşmaz; o davranışı çağıran durumlarda sıcak konuşur. Reçetenin vektörü gerçek yanıtların vektöründen ayrışır.
Çözüm: persona'yı konuşturuyoruz — 50 farklı bağlamda 50 kez. Vektörler konuşmanın, reçetenin değil. Drift detection konuşmayı konuşmaya karşılaştırır.
Karar 2: 50 senaryo
Aynı persona üzerinde iki fingerprint hesaplaması çalıştır, sonuç vektörlerini karşılaştır:
| Senaryo sayısı | Çalıştırmalar arası kosinüs uzaklığı |
|---|---|
| < 30 | > 0.10 (gürültülü) |
| 30 | < 0.10 |
| 50 | < 0.03 (belirleyici / deterministik kabul edilebilir) |
| 80 | < 0.02 |
80+ varyansı platoya iner. Daha yüksek gidebilirdik; gitmiyoruz, çünkü:
- 50 senaryoda fingerprint üretimi $0.03 ve 60 saniye
- 100 senaryoya çıkarmak maliyeti 2 kata çıkarır, marjinal kararlılık kazancı ihmal edilebilir
50 tatlı noktadır.
Karar 3: Ortalama, birleştirme değil
İki yaklaşım:
Seçenek A — Birleştirme (50×1024 matris)
Senaryo başı aykırı değerleri (outliers) korur. Sorgu zamanı: sohbet yanıtını matrise karşı satır başı en küçük uzaklıkla karşılaştır.
Bilgi yakalama: Yüksek (senaryo başı detay korunur)
Sorgu maliyeti: Yanıt başına 50 kat daha pahalıSeçenek B — Ortalama (1024 vektör)
50 vektör tek vektörde ortalanır. Sorgu zamanı: tek kosinüs uzaklığı.
Bilgi yakalama: Orta (merkezi eğilim korunur, aykırı değerler yumuşar)
Sorgu maliyeti: Tek çağrı, ucuzSohbet = her yanıt skorlanır. Amortisman kazancı seçenek B'de büyük. B seçildi.
Bilgi kaybı düşündüğümüzden az önemli: drift'in tam ölçtüğü şey seste merkezi eğilimdir. Aykırı değerler yumuşatılır; yanıt merkezi eğilime uyuyorsa seste demektir.
Karar 4: voyage-3-large
Etiketli drift veri kümesinde (insanların seste / ses-dışı işaretlediği yanıtlar) 7 vektör modelini karşılaştırdık. Dile göre F1 skoru:
| Model | EN | TR | DE | ES | FR | PT | Genel |
|---|---|---|---|---|---|---|---|
voyage-3-large | 0.91 | 0.89 | 0.90 | 0.88 | 0.90 | 0.87 | 0.89 |
OpenAI text-embedding-3-large | 0.92 | 0.81 | 0.84 | 0.82 | 0.85 | 0.79 | 0.84 |
Cohere embed-multilingual-v3.0 | 0.89 | 0.86 | 0.88 | 0.85 | 0.87 | 0.84 | 0.87 |
Cohere embed-english-v3.0 | 0.93 | 0.62 | 0.68 | 0.65 | 0.71 | 0.59 | 0.70 |
(Örnek F1 değerleri; gerçek kalibrasyon veri kümesi değişir.)
voyage-3-large dil başına degradasyon (bozulma) olmadan en yüksek genel F1'i veriyor. OpenAI yakın (%2 içinde) ama dil geçişine duyarlı — Türkçe konuşan persona, İngilizce konuşan aynı persona ile karşılaştırıldığında daha yüksek drift skorladı, iki yanıt da seste olduğunda bile.
Cohere embed-english-v3.0 sadece EN ölçütlerinde (benchmarks) kazanır, çok dilliye keskin bozulma gösterir.
Yakaladığı
- Kayıt drift'i (register drift) — resmi persona argo (slang) kullanmaya başladı
- Konusal drift (topical drift) — konu değiştiğinde ses değişen karakter (sistem isteminin otoritesi soluyor)
- Sağlayıcı model drift'i — Opus → Sonnet ses yüzeyini değiştirir; drift değişimi yakalar
- Uzun bağlam çürümesi — geçmiş büyüdükçe persona genele (generic) drift eder; skor kademeli tırmanır
Yakalamadığı
- İçerik doğruluğu — mükemmel sesle yanlış cevap
~0.05skorlar - Persona aralığına uyan ton kayması — "stres altında soğuk ol" reçeteli persona stresli senaryoda soğuk konuşur, drift değil, tasarımdır
Yeniden hesaplama
Fingerprint'ler her persona refine'ında yeniden hesaplanır:
| Düzenleme modu (edit mode) | Fingerprint yenilenir mi? |
|---|---|
| Elle düzenleme (üstveri, imza ifade) | ✓ eğer Mask alanıysa |
| Cascade refine (Soul değişir) | ✓ (Mask yeniden üretilir) |
| Refine (Mask üzerinde eksen dönüşümü) | ✓ |
| Lock refine (yalnız Surface) | ✗ (Mask değişmez) |
Elle zorla: POST /v1/personas/{id}/fingerprint/recompute.
Ödünleşme özeti
Voice fingerprint'leme bir mühendislik ödünleşmesidir:
| Karar | Tercih | Sebep |
|---|---|---|
| Ortalama ve birleştirme | Ortalama | Sorgu başı ucuz |
| 50 ve 100 senaryo | 50 | Marjinal gürültü vs 2 kat maliyet |
| Kosinüs ve Öklid | Kosinüs | Büyüklükten bağımsız yön ölçer |
| voyage-3-large ve alternatif | voyage | Çok dilli kararlılık |
Hiçbiri sonsuz değildir. Denetim hattı yeniden kalibrasyon (recalibration) geçişi içerir; yeni bir vektör modeli etiketli F1'i maddi olarak iyileştirirse, geçiş işiyle (migration job) geçeceğiz.