Character embeddings: primer teknis

Bagaimana sistem character lock benar-benar bekerja di pipeline video AI modern: arsitektur, keputusan desain, mode kegagalan, dan masalah terbuka.

·9 min read·technical

Artikel ini ditujukan untuk para insinyur peneliti, praktisi ML, dan pengembang yang membangun atau mengevaluasi tooling video AI. Jika Anda ingin gambaran non-teknis tentang mengapa konsistensi karakter penting, mulai dengan panduan lengkap.

Di sini kita akan membahas cara kerja sistem character embedding di stack video AI modern: arsitektur, keputusan desain, mode kegagalan, dan masalah terbuka yang belum terpecahkan.

Pernyataan masalah

Diberikan model video generatif M dan karakter C, kita ingin sebuah prosedur sehingga untuk setiap prompt p_i dalam urutan p_1, p_2, , p_n yang merujuk pada C, semua keluaran yang dihasilkan mempertahankan identitas C.

Pendekatan naif memasukkan deskripsi karakter di setiap prompt gagal karena diffusion sampling bersifat stokastik dan prompt mendeskripsikan kategori, bukan identitas. Setiap generasi adalah pengundian dari distribusi karakter valid yang cocok dengan deskripsi tersebut; identitas akan drift di antara pengundian.

Kita butuh cara untuk mengkondisikan keluaran model pada identitas spesifik yang sudah dipelajari, bukan sekadar pada deskripsi.

Arsitektur

Sistem konsistensi karakter modern terdiri dari enam komponen:

1. Feature extraction        — menghasilkan identity embedding dari referensi
2. Storage                   — menyimpan embedding terikat ke character_id
3. Negative prompt synthesis — membangun negative_prompts otomatis dari katalog drift
4. Conditioning injection    — menyuntikkan embedding ke conditioning model
5. Generation                — diffusion sampling dengan model terkondisi
6. Consistency verification  — pengecekan similarity post-hoc, regenerasi jika perlu

Mari bahas satu per satu.

1. Feature extraction

Saat unggah karakter, beberapa model khusus dijalankan terhadap gambar referensi:

Semua ini di-concat (atau digabung lewat attention) menjadi character embedding e_C berdimensi tinggi. Total dimensionalitas biasanya 1500-3000.

Mengapa beberapa model alih-alih satu? Karena identitas memiliki banyak sumbu yang tidak bisa ditangkap secara penuh oleh satu encoder. Face encoder hebat untuk apakah ini wajah yang sama? tapi buta soal proporsi tubuh. Body parser buta soal detail wajah. CLIP bagus untuk penampilan semantik tapi kehilangan identitas halus. Concat memberi cakupan ortogonal.

Trade-off: pipeline ekstraksi yang lebih kompleks berarti compute lebih besar saat upload karakter (~30-90 detik di sebagian sistem). Untuk tooling konsumen masih oke. Untuk pipeline throughput tinggi, embedding bisa di-pre-compute sekali saat upload dan dirujuk saat generasi.

2. Storage

Setiap karakter disimpan sebagai (character_id, embedding_vector, metadata). Metadata mencakup:

Storage biasanya berupa basis data vektor (Pinecone, Qdrant, Weaviate) atau struktur terindeks kustom. Lookup harus cepat di bawah 100ms karena terjadi setiap generasi.

Untuk deployment yang sensitif privasi, embedding dapat disimpan terenkripsi dengan kunci per-tenant. Ekstraksi adalah fungsi one-way (Anda tidak bisa merekonstruksi gambar referensi dari embedding), tetapi memperlakukan embedding sebagai PII adalah default yang tepat untuk sistem yang menangani orang nyata.

3. Negative prompt synthesis

Inilah bagian sistem yang kurang kentara, dan tempat sebagian besar kerja engineering berada.

Praktiknya adalah memelihara katalog mode drift umum jenis kegagalan kategorikal yang teramati pada ribuan generasi. Untuk tiap mode ada fragmen negative_prompt yang menekan kegagalan tersebut.

Contoh dari katalog:

Drift modeFragmen negative prompt
Pergeseran warna mata (cokelat hijau)green eyes, hazel eyes (ketika referensi cokelat)
Penyempitan rahangnarrow jaw, weak chin, soft jawline
Garis rambut mundurhigh hairline, thinning hair, receding hairline
Warna kulit menghangatwarm skin tone, golden complexion (ketika referensi dingin)
Asimetri merambatasymmetric face, uneven features
Pergeseran jarak matawide-set eyes, close-set eyes

Membangun katalog ini memerlukan data berlabel. Di industri, ~10.000 generasi dari tooling video AI publik (Runway, Pika, Sora, dll.) dilabeli dengan mode drift spesifik yang muncul. Clustering biasanya menghasilkan ~30 mode berbeda yang mencakup ~85% drift teramati.

Untuk setiap generasi, sistem:

  1. Mengambil atribut referensi karakter
  2. Menghitung lawan dari setiap atribut (mis., jika referensi bermata gelap, lawannya mata terang)
  3. Menyusun negative prompt per karakter dengan menggabungkan suppressor drift yang relevan

Hasilnya adalah sinyal conditioning yang jauh lebih kuat dibanding generasi prompt-only.

4. Conditioning injection

Model video berbeda menerima conditioning dengan cara berbeda:

Berdasarkan pengalaman, injection tingkat API jauh lebih efektif daripada berbasis gambar referensi, tetapi sebagian besar API publik tidak membuka akses sedalam itu. Bekerja pada permukaan API yang ada, mengkombinasikan negative prompt yang kuat dengan embedding yang dikodekan sebagai gambar referensi memberi sekitar 80-90% efek injection tingkat API.

Itulah salah satu alasan membangun lapisan konsistensi karakter tetap berarti meski Anda tidak mengontrol model dasarnya ada ruang signifikan pada permukaan conditioning yang sudah dibuka oleh API publik.

5. Generation

Diffusion sampling standar, dengan catatan conditioning kini merupakan kombinasi dari:

Biaya generasi biasanya 1.0-1.2× dari generasi vanilla. Biaya marjinal kecil.

6. Consistency verification

Setelah generasi, kita jalankan model identitas terpisah (biasanya face encoder yang sama seperti pada langkah 1) terhadap keluaran. Kita hitung cosine similarity antara identity embedding keluaran dan embedding referensi awal.

Ambang batas: biasanya 0,85 cosine similarity. Di atas ambang, keluaran diterima. Di bawah ambang, regenerasi diaktifkan dengan conditioning yang lebih ketat (bobot negative prompt lebih tinggi, injection embedding lebih kuat).

Ini menambah ~5-10% biaya generasi rata-rata (kebanyakan shot lolos sekali jalan) dan mencegah kasus drift terburuk sampai ke pengguna.

Apa yang berjalan baik, apa yang tidak

Yang berjalan:

Yang lebih sulit:

Masalah riset terbuka

Jika Anda bekerja di area ini, berikut masalah yang ingin kami lihat terpecahkan:

  1. Invarian untuk form variants. Apa representasi terpelajar yang tepat untuk menangkap struktur wajah yang invarian terhadap identitas sembari memungkinkan transformasi state arbitrer?
  2. Deteksi drift aktif selama sampling. Pengecekan konsistensi saat ini bersifat post-hoc. Bisakah kita mendeteksi drift selama proses diffusion dan mengoreksi di tengah sampling?
  3. Trade-off identitas implisit vs eksplisit. Kapan melatih LoRA kecil per-karakter mengalahkan conditioning berbasis embedding? Di mana batasnya?
  4. Pemodelan interaksi multi-karakter. Bagaimana menangkap bukan hanya dua identitas terkunci, tetapi juga dinamika hubungan mereka sehingga konsisten lintas shot?
  5. Kuantifikasi ketidakpastian identitas. Saat model tak yakin soal identitas, bisakah ia memunculkan ketidakpastian itu alih-alih menghasilkan drift yang percaya diri?

Jika Anda mengerjakan salah satunya dan ingin bertukar pikiran, tim di balik Juying betul-betul tertarik. Hubungi kami.

Saran praktis untuk builder

Jika Anda mempertimbangkan membangun lapisan konsistensi karakter untuk produk Anda sendiri, tiga saran:

1. Mulai dari katalog negative prompt. Ini langkah dengan dampak tertinggi dan biaya terendah. Tidak butuh akses model tingkat API; negative prompt dibuka oleh setiap API publik. Habiskan seminggu melabeli 1000 generasi dan Anda akan punya katalog yang menutupi sebagian besar drift.

2. Jangan remehkan verifikasi post-hoc. Menambahkan loop sederhana regenerate jika similarity < 0,85 menangkap 10% kegagalan terburuk dan secara dramatis menaikkan kualitas yang dirasakan. Ini lompatan kualitas 90/100 95/100 termurah yang ada.

3. Investasikan storage sejak awal. Embedding karakter sebagai aset persisten adalah wawasan arsitektural yang menumpuk bunga. Bangun primitif yang tepat sekali, dan setiap fitur berikutnya (style locks, library adegan, reuse aset) akan meluas secara natural.

Bacaan terkait

Jika Anda membangun di area ini dan ingin ngobrol info@juying.art