Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 2 — Transcribe: biến giọng nói thành văn bản có nhãn người nói

Đã đọc 0/9 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Transcribe là móng của cả agent. Nếu transcript sai, mọi bước sau — tóm tắt, action item — đều sai theo. Bài này bạn học cách chọn công cụ, chuẩn hóa audio, và lấy được transcript có timestamp + nhãn người nói.

Ba lựa chọn công cụ transcribe

  • API cloud (OpenAI Whisper API, AssemblyAI, Deepgram): dễ nhất, chất lượng cao, có sẵn speaker diarization. Trả tiền theo phút.
  • Whisper self-hosted (chạy máy bạn/server): miễn phí, riêng tư, nhưng cần GPU để nhanh và tự lo diarization.
  • Dịch vụ họp tích hợp (Zoom AI Companion, Google Meet): tiện nhưng khó lấy dữ liệu thô để xử lý tiếp.
Cho tiếng Việt, hãy test thật vài phút audio trước khi chọn — chất lượng tiếng Việt chênh lệch lớn giữa các nhà cung cấp.

Chuẩn hóa audio trước khi gửi

Audio bẩn = transcript bẩn. Trước khi transcribe:

# Chuyển về mono, 16kHz, wav — định dạng "chuẩn" cho hầu hết engine
ffmpeg -i hop_sprint.m4a -ac 1 -ar 16000 hop_sprint.wav

Giảm nhiễu nền và chuẩn hóa âm lượng giúp độ chính xác tăng rõ rệt, đặc biệt với micro laptop.

Gọi API transcribe (ví dụ với diarization)

import requests

# Ví dụ minh họa với AssemblyAI (có diarization sẵn)
headers = {"authorization": API_KEY}
resp = requests.post(
    "https://api.assemblyai.com/v2/transcript",
    headers=headers,
    json={
        "audio_url": uploaded_url,
        "speaker_labels": True,      # bật nhãn người nói
        "language_code": "vi"        # tiếng Việt
    }
)
transcript_id = resp.json()["id"]
# Sau đó poll cho tới khi status == "completed"

Kết quả trả về gồm các đoạn có speaker, start, end, text. Đây là dữ liệu vàng cho bước sau.

Streaming vs batch: chọn đúng theo nhu cầu

Có hai kiểu transcribe. Batch (xử lý sau khi họp xong) phù hợp với Agent Họp vì bạn cần độ chính xác cao nhất và có thể chờ vài phút. Streaming (phiên âm ngay khi đang nói) chỉ cần khi bạn muốn hiển thị phụ đề trực tiếp — độ chính xác thường thấp hơn và khó diarize. Với ghi chú họp, hãy dùng batch: ổn định, rẻ hơn, chất lượng tốt hơn.

Timestamp và nhãn người nói: vì sao quan trọng

  • Timestamp: để truy vết "quyết định này ở phút 32", và cắt clip nếu cần.
  • Speaker label: agent cần biết AI nói "anh Minh nhận task" chứ không phải "ai đó nhận task". Không có nhãn người nói, việc gán action item về sau sẽ đoán mò.
Engine thường trả "Speaker A/B/C". Bạn cần một bước ánh xạ sang tên thật:

Speaker A → Khang (chủ trì, nói đầu tiên)
Speaker B → Lan
Speaker C → Minh

Cách làm thực tế: yêu cầu mỗi người nói tên mình ở đầu họp, hoặc để agent hỏi lại người upload để xác nhận ánh xạ.

Các bước triển khai

  • Chọn 1 công cụ, lấy API key.
  • Viết hàm chuẩn hóa audio bằng ffmpeg.
  • Upload audio, gọi transcribe với speaker_labels=true.
  • Poll trạng thái tới khi hoàn tất.
  • Lưu transcript có cấu trúc (JSON: speaker, start, end, text) vào storage.
  • Thêm bước ánh xạ Speaker → tên thật.

Checklist chất lượng transcript

  • [ ] Tên riêng, thuật ngữ công ty có đúng không? (thường sai — cần từ điển tùy chỉnh)
  • [ ] Số liệu, ngày tháng có chính xác không?
  • [ ] Nhãn người nói có ổn định suốt buổi không?
  • [ ] Có đoạn nào bị nhảy/mất do nhiễu không?

Sai lầm thường gặp

  • Gửi thẳng file gốc chất lượng thấp: bỏ bước ffmpeg khiến kết quả kém 20-30%.
  • Bỏ qua từ điển tùy chỉnh: tên sản phẩm "Vietnamcos", "OKR", "sprint" hay bị phiên âm sai. Nhiều API cho phép khai báo "custom vocabulary".
  • Tin tuyệt đối vào diarization: khi hai người nói chồng lên nhau, nhãn dễ lẫn. Đừng dùng nhãn làm nguồn duy nhất để giao việc.
  • Không lưu transcript có cấu trúc: chỉ lưu text thô, mất timestamp, sau này không truy vết được.
Có transcript sạch rồi, bài 3 ta biến nó thành bản tóm tắt hữu ích.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi