Markdown

DIARIZATION_PLAN.md

Readable previewMounted file access only
BackOpen raw markdown
/root/.openclaw/workspace/projects/transcription-bot/DIARIZATION_PLAN.md

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ề:

  • text
  • duration
  • language
  • segments theo 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ụ:

text
[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/