Character embedding: คู่มือเชิงเทคนิค

ระบบล็อกตัวละครในไปป์ไลน์วิดีโอ AI ยุคใหม่ทำงานอย่างไรจริง ๆ: สถาปัตยกรรม การตัดสินใจออกแบบ โหมดความล้มเหลว และปัญหาที่ยังเปิดอยู่

·9 min read·technical

บทความนี้สำหรับวิศวกร นักวิจัย ผู้ปฏิบัติงาน ML และนักพัฒนาที่กำลังสร้างหรือประเมินเครื่องมือวิดีโอ AI ถ้าอยากได้ภาพรวมที่ไม่เน้นเทคนิคว่าทำไมความสม่ำเสมอของตัวละครจึงสำคัญ ให้เริ่มที่ คู่มือฉบับสมบูรณ์ก่อน

ที่นี่เราจะพาดูว่าระบบ character embedding ใน stack วิดีโอ AI ยุคใหม่ทำงานจริงอย่างไร: สถาปัตยกรรม การตัดสินใจออกแบบ โหมดความล้มเหลว และปัญหาเปิดที่ยังไม่ได้แก้

โจทย์ของปัญหา

เมื่อกำหนดโมเดลวิดีโอแบบ generative M และตัวละคร C เราต้องการกระบวนการที่ทำให้สำหรับ prompt p_i ใด ๆ ในลำดับ p_1, p_2, , p_n ที่อ้างอิงถึง C เอาต์พุตที่สร้างขึ้นทุกชิ้นยังคงรักษาเอกลักษณ์ของ C ไว้

วิธีตรงไปตรงมา ใส่คำอธิบายตัวละครในทุก prompt ใช้ไม่ได้ผล เพราะ diffusion sampling เป็นแบบ สุ่ม และ prompt อธิบายหมวดหมู่ ไม่ใช่เอกลักษณ์ การสร้างแต่ละครั้งเป็นการสุ่มตัวอย่างจากการแจกแจงของตัวละครที่ ถูกต้องทั้งหมดที่ตรงกับคำอธิบายนั้น เอกลักษณ์จึง drift ระหว่างการสุ่มแต่ละครั้ง

เราต้องการวิธีที่จะ conditioning เอาต์พุตของโมเดลให้ติดอยู่กับเอกลักษณ์ที่เรียนรู้มาเป็นการเฉพาะ ไม่ใช่แค่กับคำอธิบาย

สถาปัตยกรรม

ระบบความสม่ำเสมอของตัวละครยุคใหม่ประกอบด้วยหกส่วน:

1. Feature extraction        — สร้าง identity embedding จากภาพอ้างอิง
2. Storage                   — เก็บ embedding ผูกกับ character_id
3. Negative prompt synthesis — สร้าง negative_prompts อัตโนมัติจาก drift catalog
4. Conditioning injection    — แทรก embedding เข้าไปใน conditioning ของโมเดล
5. Generation                — diffusion sampling โดยใช้โมเดลที่ถูก conditioning
6. Consistency verification  — ตรวจ similarity ภายหลัง สร้างใหม่ถ้าจำเป็น

มาดูทีละส่วน

1. Feature extraction

เมื่ออัปโหลดตัวละคร โมเดลเฉพาะทางหลายตัวจะถูกรันกับภาพอ้างอิง:

เวกเตอร์เหล่านี้จะถูก concat (หรือรวมผ่าน attention) เป็น character embedding e_C ที่มีมิติสูง มิติรวมโดยทั่วไปอยู่ที่ 1500-3000

ทำไมต้องใช้หลายโมเดลแทนที่จะใช้ตัวเดียว? เพราะเอกลักษณ์มีหลายแกนที่ไม่มี encoder เดียวจับครอบคลุมได้ ทั้งหมด Face encoder เก่งคำถาม เป็นใบหน้าเดียวกันไหม? แต่มองไม่เห็นสัดส่วนร่างกาย Body parser ไม่เห็นรายละเอียดบนใบหน้า CLIP เก่งภาพรวมเชิงความหมายแต่จะหลุดเอกลักษณ์ละเอียดไป Concat ทำให้ครอบคลุมแบบ orthogonal

Trade-off: pipeline extraction ที่ซับซ้อนขึ้นแปลว่าใช้ compute มากขึ้นตอนอัปโหลด (~30-90 วินาที ในบางระบบ) สำหรับเครื่องมือฝั่งผู้บริโภคยังโอเค สำหรับ pipeline ที่ throughput สูง สามารถ pre-compute embedding เพียงครั้งเดียวตอนอัปโหลดและอ้างอิงตอนสร้าง

2. Storage

ตัวละครแต่ละตัวถูกเก็บในรูป (character_id, embedding_vector, metadata) ส่วน metadata รวมถึง:

Storage มักเป็น vector database (Pinecone, Qdrant, Weaviate) หรือโครงสร้างที่ทำดัชนีเอง การ lookup ต้องเร็ว ต่ำกว่า 100ms เพราะเกิดทุกครั้งที่สร้าง

สำหรับ deployment ที่อ่อนไหวเรื่องความเป็นส่วนตัว สามารถเก็บ embedding แบบเข้ารหัสด้วยกุญแจรายเทแนนต์ Extraction เป็นฟังก์ชันทางเดียว (สร้างภาพอ้างอิงกลับมาจาก embedding ไม่ได้) แต่การถือ embedding เป็น PII คือดีฟอลต์ที่เหมาะสมสำหรับระบบที่จัดการกับบุคคลจริง

3. Negative prompt synthesis

นี่คือส่วนที่ไม่ชัดเจนของระบบและเป็นที่ที่งานวิศวกรรมส่วนใหญ่กระจุกตัวอยู่

ในวงการมีการดูแล catalog ของ drift mode ที่พบบ่อย ประเภทความล้มเหลวเชิงหมวดหมู่ที่สังเกตได้จาก การสร้างหลักพันถึงหลักหมื่นครั้ง สำหรับแต่ละโหมดจะมีชิ้นส่วน negative_prompt ที่ใช้กดทับ ความล้มเหลวนั้น

ตัวอย่างจาก catalog:

Drift modeชิ้นส่วน negative prompt
สีตาเลื่อน (น้ำตาล เขียว)green eyes, hazel eyes (เมื่ออ้างอิงเป็นน้ำตาล)
เส้นกรามแคบลงnarrow jaw, weak chin, soft jawline
แนวผมร่นถอยhigh hairline, thinning hair, receding hairline
โทนผิวอุ่นขึ้นwarm skin tone, golden complexion (เมื่ออ้างอิงเป็นโทนเย็น)
ความไม่สมมาตรลามออกasymmetric face, uneven features
ระยะตาเลื่อนwide-set eyes, close-set eyes

การสร้าง catalog นี้ต้องอาศัยข้อมูลที่ติดฉลาก ในวงการมีการติดฉลากการสร้าง ~10,000 ครั้งจาก เครื่องมือวิดีโอ AI สาธารณะ (Runway, Pika, Sora ฯลฯ) ด้วย drift mode ที่ปรากฏ การ cluster มัก ได้โหมดที่ต่างกัน ~30 โหมดครอบคลุม drift ที่สังเกตได้ ~85%

สำหรับการสร้างแต่ละครั้ง ระบบจะ:

  1. ดึงคุณลักษณะอ้างอิงของตัวละคร
  2. คำนวณ สิ่งตรงข้าม ของแต่ละคุณลักษณะ (เช่น ถ้าอ้างอิงตาคล้ำ สิ่งตรงข้ามคือตาสีอ่อน)
  3. ประกอบ negative prompt เฉพาะตัวละครโดยรวม drift suppressor ที่เกี่ยวข้อง

ผลลัพธ์คือสัญญาณ conditioning ที่แรงกว่าการสร้างแบบ prompt-only ล้วนมาก

4. Conditioning injection

โมเดลวิดีโอแต่ละชนิดรับ conditioning ต่างกัน:

จากประสบการณ์ injection ระดับ API มีประสิทธิภาพสูงกว่าวิธีอิงภาพอ้างอิงมาก แต่ API สาธารณะส่วนใหญ่ ไม่เปิดให้เข้าถึงระดับนั้น เมื่อทำงานบนพื้นที่ API ที่มีอยู่ การรวม negative prompt ที่แรงกับ embedding ที่ถูก encode เป็นภาพอ้างอิง จะให้ผลใกล้เคียงประมาณ 80-90% ของ injection ระดับ API

นี่คือเหตุผลส่วนหนึ่งว่าทำไมการสร้างเลเยอร์ความสม่ำเสมอของตัวละครจึงมีความหมาย แม้ไม่ได้ควบคุม โมเดลพื้นฐาน พื้นที่ conditioning ที่ API สาธารณะเปิดให้แล้วยังมีช่องให้ทำได้อีกมาก

5. Generation

Diffusion sampling มาตรฐาน ต่างที่ conditioning ตอนนี้คือผสมของ:

ค่าใช้จ่ายในการสร้างโดยทั่วไปอยู่ที่ 1.0-1.2× ของการสร้างแบบธรรมดา ค่าใช้จ่ายส่วนเพิ่มเล็กน้อย

6. Consistency verification

หลังสร้างเสร็จ จะรันโมเดล identity แยกต่างหาก (โดยปกติคือ face encoder ตัวเดียวกับขั้นตอน 1) กับ เอาต์พุต คำนวณ cosine similarity ระหว่าง identity embedding ของเอาต์พุตกับ embedding อ้างอิงเดิม

เกณฑ์: โดยทั่วไป 0.85 cosine similarity เหนือเกณฑ์ถือว่าผ่าน ต่ำกว่าเกณฑ์ก็ทริกเกอร์การสร้างใหม่ด้วย conditioning ที่เข้มขึ้น (น้ำหนัก negative prompt มากขึ้น injection embedding แรงขึ้น)

ขั้นนี้เพิ่มต้นทุนการสร้างเฉลี่ย ~5-10% (ช็อตส่วนใหญ่ผ่านในรอบแรก) และกันกรณี drift ที่แย่ที่สุดไม่ให้ ถึงผู้ใช้

อะไรใช้ได้ดี อะไรยังยาก

ที่ใช้ได้ดี:

ที่ยากกว่า:

ปัญหาวิจัยที่ยังเปิดอยู่

ถ้าคุณทำงานในพื้นที่นี้ นี่คือปัญหาที่อยากเห็นได้รับการแก้:

  1. Invariant สำหรับ form variants ตัวแทนที่เรียนรู้แบบใดที่จับโครงสร้างใบหน้าซึ่งไม่แปรผันตามเอกลักษณ์ พร้อมยอมให้เกิดการแปลงสภาพใด ๆ ได้?
  2. การตรวจ drift แบบ active ระหว่าง sampling การตรวจความสม่ำเสมอตอนนี้ทำหลังเสร็จ จะตรวจ drift ระหว่างกระบวนการ diffusion และแก้กลางทาง sampling ได้ไหม?
  3. Trade-off ระหว่าง implicit กับ explicit identity เมื่อใดการเทรน LoRA เล็ก ๆ ต่อตัวละครจึงดีกว่าการ conditioning ด้วย embedding? เส้นแบ่งอยู่ตรงไหน?
  4. การโมเดลปฏิสัมพันธ์ของหลายตัวละคร ทำอย่างไรให้จับได้ไม่เพียงสองเอกลักษณ์ที่ล็อก แต่รวมถึงพลวัตของความสัมพันธ์ของพวกเขาเพื่อให้คงเส้นข้ามช็อต?
  5. การวัดความไม่แน่นอนของเอกลักษณ์ เมื่อโมเดลไม่มั่นใจในเอกลักษณ์ ให้สามารถบอกความไม่มั่นใจนั้นแทนการสร้าง drift อย่างมั่นใจ ได้ไหม?

ถ้าคุณกำลังทำเรื่องเหล่านี้และอยากแลกเปลี่ยน ทีมเบื้องหลัง Juying สนใจอย่างจริงใจ ติดต่อเราได้

คำแนะนำเชิงปฏิบัติสำหรับ builder

ถ้าคุณกำลังคิดสร้างเลเยอร์ความสม่ำเสมอของตัวละครให้ผลิตภัณฑ์ของตัวเอง สามคำแนะนำ:

1. เริ่มจาก catalog ของ negative prompt นี่คือหมัดที่ผลกระทบสูงสุดต้นทุนต่ำสุด ไม่ต้องเข้าถึงระดับ API ก็ได้ Negative prompt มีในทุก API สาธารณะ ใช้เวลาหนึ่งสัปดาห์ติดฉลากการสร้าง 1000 ครั้ง คุณจะมี catalog ครอบคลุม drift ส่วนใหญ่

2. อย่าประเมินค่า verification ภายหลังต่ำเกินไป เพิ่มลูปง่าย ๆ ว่า สร้างใหม่ถ้า similarity < 0.85 จะจับ 10% ที่แย่ที่สุดและยกระดับคุณภาพที่รับรู้ได้อย่างชัดเจน เป็นการอัปคุณภาพจาก 90/100 เป็น 95/100 ที่ถูกที่สุดที่หาได้

3. ลงทุนใน storage ตั้งแต่ต้น การมอง character embedding เป็นทรัพย์สินที่คงทนคือมุมมองเชิงสถาปัตยกรรมที่ดอกผลทบต้น สร้าง primitive ที่ถูกต้องครั้งเดียว ฟีเจอร์ในอนาคต (style locks, scene libraries, asset reuse) จะขยายออกอย่างเป็นธรรมชาติ

อ่านเพิ่มเติม

ถ้าคุณกำลังสร้างในพื้นที่นี้และอยากคุย info@juying.art