VietVoice.AI — Diarization Plan
Câu hỏi cần trả lời
Làm sao để VietVoice.AI phân biệt được:
- người nói 1
- người nói 2
mà không làm app phức tạp quá sớm, không đội cost vô lý, và không phá workflow hiện tại.
1. Hiện trạng
Code hiện tại trong transcriber.py dùng faster-whisper và chỉ trả về:
textdurationlanguagesegmentstheo thời gian
Hiện không có speaker diarization. Tức là app biết đoạn nào bắt đầu/kết thúc lúc nào, nhưng không biết ai đang nói.
2. Ba đường khả thi
Option A — API diarization cho riêng use case 2 người (khuyến nghị)
Dùng provider có sẵn speaker diarization khi user chọn mode kiểu:
- phỏng vấn 2 người
- recruiter interview
- call 2 speaker
Provider phù hợp nhất hiện tại
AssemblyAI
- Pre-recorded STT official pricing page có model bắt đầu từ $0.15/giờ
- Speaker diarization add-on: $0.02/giờ
- Tổng rough: $0.17/giờ
- Quy đổi thô: khoảng 74 VND/phút
Vì sao nên chọn
- rẻ nhất trong các phương án có speaker labeling sẵn
- file-based async, khá hợp workflow upload file của mình
- ít engineering risk hơn tự host diarization
- không cần GPU riêng
Điểm yếu
- phụ thuộc vendor
- quality speaker attribution phải test với audio Việt thực tế
- cần route riêng cho job có diarization
Verdict
Đây là phương án “ít ngu nhất” nếu muốn ra tính năng nhanh.
Option B — Deepgram diarization
- Nova-3 monolingual: $0.0077/phút
- Speaker diarization: $0.0020/phút
- Tổng rough: $0.0097/phút
- Quy đổi thô: khoảng 252 VND/phút
Ưu điểm
- mature voice infra
- diarization rõ ràng, streaming cũng mạnh
Nhược điểm
- đắt hơn AssemblyAI rất nhiều cho bài file upload
- không đáng nếu target hiện tại là creator / interviewer / recruiter ở bài cost-sensitive
Verdict
Dùng được, nhưng không phải đường khôn nhất cho mình.
Option C — Tự ghép pyannote + current transcript pipeline
Shape kỹ thuật
- giữ
faster-whisperđể transcript - thêm
pyannote.audiođể diarization - rồi tự reconcile transcript segments với speaker segments
Ưu điểm
- chủ động hơn
- có thể tối ưu sâu về sau
- không khoá vào một vendor duy nhất
Nhược điểm
- implementation phức tạp hơn hẳn
- cần xử lý alignment giữa ASR segment và speaker segment
- khó debug hơn nhiều
- nếu không có GPU riêng ổn định, trải nghiệm sẽ khá chua
- open-source route tiết kiệm tiền runtime nhưng tăng mạnh chi phí công tích hợp + vận hành
Ghi chú
- pyannote có Community-1 self-hosted open-source route
- pyannoteAI cloud cũng có diarization + transcription orchestration, nhưng public docs không nêu một giá list đơn giản như AssemblyAI; dashboard mới là source of truth
Verdict
Chỉ nên làm khi đã chắc diarization là core value thật, không phải ở vòng test đầu.
3. Khuyến nghị thực dụng
Chọn đường nào?
Chọn Option A:
- giữ pipeline hiện tại cho job thường
- chỉ bật diarization cho một mode riêng:
Phỏng vấn 2 người- hoặc
Interview mode
Vì sao đây là đường đúng
- không bắt app phải diarize tất cả audio
- không đội cost toàn hệ thống
- không đòi mình giải bài clustering/speaker alignment ngay từ đầu
- fit đúng target segment đang ưu tiên nhất: researcher / recruiter / interviewer
4. Cách rollout ít ngu nhất
Phase 1 — Không đổi flow mặc định
Flow mặc định vẫn là:
- Chép lời
- Chép lời + Tóm tắt
Chưa bật speaker labeling đại trà.
Phase 2 — Thêm một mode riêng
Thêm mode:
- Phỏng vấn 2 người
Hệ thống sẽ:
- route file qua diarization-capable provider
- trả transcript kiểu:
Người 1:Người 2:
- summary dùng template interview/research thay vì summary chung chung
Phase 3 — Nếu tín hiệu tốt
Mới tính đến:
- recruiter mode
- meeting/call recap mode
- mapping mềm
Người phỏng vấn/Người trả lời
5. Output nên như thế nào
Không cần làm quá thông minh ở bản đầu.
Bản đầu chỉ cần:
Người 1/Người 2- mốc thời gian
- transcript tách speaker rõ ràng
- summary theo format interview
Ví dụ:
[00:00 - 00:12] Người 1: Chào anh, hôm nay em muốn hỏi về trải nghiệm dùng sản phẩm...
[00:12 - 00:24] Người 2: Ok em, anh dùng nó khoảng 3 tháng rồi...
Đừng cố solve ngay:
- speaker identity thật
- nhận ra ai là interviewer/interviewee tuyệt đối
- overlap speech hoàn hảo
6. Cost rough nếu chỉ bật cho mode 2 người
Với AssemblyAI
- Rough cost diarized transcript: ~74 VND/phút
- Nếu bán mode premium hoặc combo interview, mức này vẫn chịu được hơn nhiều so với route Deepgram
Ý nghĩa business
Nếu diarization chỉ áp dụng cho job premium/use case đặc thù:
- cost tăng nhưng vẫn kiểm soát được
- value user nhận được cao hơn transcript thường
- dễ justify pricing hơn summary generic
7. Những gì không nên làm
- không bật diarization cho mọi file ngay từ đầu
- không tự build pyannote reconciliation pipeline ở vòng đầu nếu chưa có demand thật
- không cố map speaker identity “xịn” khi mình mới chỉ cần
Người 1 / Người 2 - không bán feature này cho đại trà trước khi test với file interview thật
8. Quyết định chốt
Best next move
Thêm mode “Phỏng vấn 2 người”, route bằng AssemblyAI diarization, trả transcript gắn Người 1 / Người 2, summary theo template interview.
One-line verdict
Rẻ nhất và ít ngu nhất là không diarize toàn bộ app, mà chỉ mở diarization như một mode premium cho đúng use case 2 người.
Sources
- AssemblyAI pricing (official public pricing page checked earlier in session):
https://www.assemblyai.com/pricing - Deepgram pricing (official public pricing page checked earlier in session):
https://deepgram.com/pricing - pyannoteAI billing docs:
https://docs.pyannote.ai/administration/billing - pyannoteAI STT + diarization docs:
https://docs.pyannote.ai/tutorials/speech-to-text-diarization - pyannote open-source library docs:
https://pyannote.github.io/pyannote-audio/