Hồ sơ nguồn: các metric cho đánh giá deepfake âm thanh#
Ngày rà soát: 2026-10-11. Hồ sơ này ghi những định nghĩa đã đối chiếu trực tiếp với paper, evaluation plan hoặc phần thân mã nguồn. Không chạy mô hình. Quy ước của chương học liệu được giữ nhất quán: điểm cao ủng hộ bona fide (B), và chấp nhận B khi s >= τ. Các metric cần khai báo rõ lớp dương và chiều điểm trước khi tính.
ROC-AUC và cách đối xử với score bằng nhau#
Với lớp dương B, ROC biểu diễn TPR_B = TP/(TP+FN) theo FPR_S = FP/(FP+TN) khi quét ngưỡng. Vì mỗi trục là một tỷ lệ có điều kiện theo lớp thật, thay đổi tỷ lệ B/S trong tập đánh giá không tự nó đổi ROC. Fawcett, §5–7 (trang 865–868), mô tả cách quét score và yêu cầu không phát điểm ROC giữa một nhóm score bằng nhau: nếu phát từng mẫu, thứ tự tùy tiện của các mẫu hòa điểm có thể tạo đoạn lạc quan hoặc bi quan. Đợi xử lý hết nhóm tie rồi nối hai đầu bằng đoạn chéo tương đương lấy trung bình hai thứ tự cực đoan. Cùng với cách hiểu AUC là xác suất xếp ngẫu nhiên một mẫu dương cao hơn mẫu âm, cách tính cặp hữu hạn là:
AUC = [số cặp (B,S) có s_B>s_S + 0.5 × số cặp có s_B=s_S] / (N_B N_S).
Ví dụ B scores [2,1], S scores [2,0]: có một tie được nửa điểm, hai thắng, một thua; AUC = (0.5+1+0+1)/4 = 0.625. Tie không được tính toàn thắng hay toàn thua. Nếu mọi score đều bằng nhau, AUC = 0.5. Đảo chiều score đảo vai trò xếp hạng và đổi AUC thành 1−AUC (trừ tie trung tính).
Đối chiếu mã scikit-learn cho thấy curve chuẩn gom mẫu theo các ngưỡng score phân biệt; điều này phù hợp với cách nhóm tie của Fawcett. Trái lại, hàm EER trong mã ASVspoof 5 bên dưới quét từng trial đã sort, nên không nên coi mọi đường ROC/EER implementation là tương đương khi có tie.
PR, AP và prevalence#
precision = TP/(TP+FP) còn recall = TP/(TP+FN). Precision phụ thuộc prevalence π của lớp dương:
precision = π·TPR / [π·TPR + (1−π)·FPR].
Vì thế một điểm ROC cố định có thể cho precision/AP rất khác khi tỷ lệ lớp đổi. Saito & Rehmsmeier, phần “PRC: The PRC plot shows … baseline moves with class distribution”, nêu baseline của PR bằng P/(P+N); với bộ phân loại ngẫu nhiên, diện tích PR trung bình bằng prevalence. Không so sánh AP giữa các tập có prevalence khác nhau như thể đó là khác biệt thuần túy về năng lực phân biệt. Nếu mục tiêu triển khai có prevalence khác tập test, hãy báo rõ prevalence; có thể bổ sung precision đã tính lại theo prior triển khai từ TPR/FPR, nhưng không gọi đó là AP đo trực tiếp trên tập test.
average_precision_score của scikit-learn dùng tổng bậc thang không nội suy:
AP = Σ_n (R_n−R_(n−1)) P_n.
Tức mỗi mức recall mới được cân theo precision tại ngưỡng đó. Nó khác auc(recall, precision) dùng hình thang và nội suy tuyến tính; hướng sai khác không luôn cố định. Ví dụ bốn mẫu xếp theo score giảm dần B:.80, S:.40, B:.35, S:.10: các mức recall tăng 0.5 tại precision 1, rồi 0.5 tại precision 2/3, nên AP = 0.5·1 + 0.5·(2/3) = 0.833. Tính hình thang trên các điểm precision–recall theo mọi ngưỡng (kể cả các plateau và điểm kết thúc quy ước) cho khoảng 0.792. Đây là ví dụ cho hai phép tổng hợp khác nhau, không phải bảo đảm AP luôn cao hơn hay thấp hơn PR-AUC hình thang. Tied scores nên được gom theo ngưỡng phân biệt trước khi cập nhật TP/FP; không chia tie thành các threshold giả.
Ví dụ prevalence cho bài toán cảnh báo spoof: đặt spoof là lớp dương và đảo điểm high-B thành spoof score (hoặc dùng xác suất spoof). Nếu recall spoof = 0.90 và FPR spoof = 0.01, khi spoof prevalence là 1%, precision là 0.90·0.01 / [0.90·0.01 + 0.01·0.99] ≈ 0.476. Nếu prevalence tăng lên 50%, cùng TPR/FPR cho precision 0.45/(0.45+0.005) ≈ 0.989. Lớp dương và chiều score đã đổi so với quy ước B-positive của chương; phải ghi rõ việc đảo này.
EER: đường cong tie-free, biên và mã scorer ASVspoof 5#
Trong evaluation package ASVspoof 5 tại commit fe23d3053a0889b305d98c9e4cadf418c213d972, compute_det_curve nối target rồi non-target, stable-sort toàn bộ trial theo score tăng dần (mergesort), rồi cập nhật cumulative counts sau từng trial. Code thêm điểm đầu (FRR=0, FAR=1) với threshold min_score−0.001, sau đó một threshold/điểm cho mỗi score đã sort. Kết thúc các cumulative count cho điểm cuối (FRR=1, FAR=0). compute_eer chọn chỉ số làm nhỏ nhất abs(FRR−FAR) rồi lấy trung bình hai tỷ lệ tại chỉ số đó. Nó không nội suy giao điểm. Nếu nhiều chỉ số cùng khoảng cách, argmin lấy chỉ số đầu tiên.
Tie caveat quan trọng: stable sort giữ nguyên thứ tự đầu vào trong nhóm bằng điểm; vì target được nối trước non-target, tie liên lớp thường bị xử lý target trước. Mã không gom nhóm bằng score trước khi cộng dồn. Ví dụ hai B và hai S đều score 1: chuỗi đã sort là B,B,S,S; các điểm sau mỗi trial lần lượt có (FRR,FAR)=(0.5,1),(1,1),(1,0.5),(1,0). Điểm giả (1,1) làm compute_eer trả EER = 1.0. Không có threshold xác định nào tách được các mẫu hòa điểm; curve tie-aware chỉ có hai đầu (0,1) và (1,0), và AUC có tie credit là 0.5. EER nội suy/cho phép randomize quyết định giữa tie sẽ là 0.5; con số đó theo một quy ước khác với hàm scorer. Ví dụ cực đoan này cho thấy không được giấu cách xử lý tie khi score đã lượng tử hóa hoặc có nhiều score lặp.
Cũng cần phân biệt giá trị threshold được trả lại với quy tắc quyết định chính thức. Plan định nghĩa B miss khi s < τ, spoof false alarm khi s >= τ. Đường cong mã được tạo bằng cumulative score tăng dần; điểm sau khi xử lý score v tương ứng với quyết định reject các điểm <= v (hay threshold ngay phía trên v), mặc dù mảng threshold lưu chính giá trị v. Do đó threshold trong output là nhãn rank step, không phải cam kết rằng so sánh >= tại đúng giá trị tie sẽ tái tạo điểm đó. Phần actDCF riêng dùng trực tiếp < threshold và >= threshold theo plan.
Scikit-learn có quy ước khác: mã _binary_clf_curve sort giảm dần ổn định rồi chỉ lấy ngưỡng tại score khác nhau, cộng dồn tất cả mẫu tie trước khi tạo điểm. Khi đối chiếu EER/AUC giữa thư viện, phải khóa cả positive label, chiều score, tie grouping, endpoint, nội suy hay nearest-sample, và predicate tại threshold.
DCF, LLR và calibration#
Đặt π_S là prior spoof, π_B=1−π_S, điểm cao ủng hộ B. Theo ASVspoof 5 Track 1:
DCF(τ) = Cmiss·π_B·Pmiss_B(τ) + Cfa·π_S·Pfa_S(τ),
Pmiss_B = mean[1(s_B < τ)], Pfa_S = mean[1(s_S >= τ)].
DCFdef = min(Cmiss·π_B, Cfa·π_S) và DCF′=DCF/DCFdef. Với thông số ASVspoof 5 Cmiss=1, Cfa=10, π_S=.05, hai chi phí không mắc lỗi là .95 và .50, nên DCFdef=.50, β=(Cmiss/Cfa)·(π_B/π_S)=1.90, và DCF′=β·Pmiss+Pfa. minDCF = min_τ DCF′(τ) dùng ngưỡng oracle chọn từ nhãn test; nó đo khả năng xếp hạng cho operating point đó, không phải threshold triển khai đã biết trước. actDCF=DCF′(τBayes) dùng threshold dựa trên prior/cost. Khi score là LLR high-B,
LLR(x)=ln[p(x|B)/p(x|S)],
τBayes = ln[Cfa·π_S/(Cmiss·π_B)] = −ln β.
Với số ASVspoof 5, τBayes≈−0.642. Nếu score chỉ là cosine, posterior không hiệu chỉnh, hoặc LLR sai scale, áp threshold số học này không còn Bayes-optimal; plan ghi rõ actDCF thường cao khi score không được calibration. Ví dụ Pmiss=.10, Pfa=.02 cho raw DCF .95·.10 + .50·.02 = .105, normalized DCF .21. Đây là cost tại ngưỡng đó; không tự nó cho biết calibration tốt hay score dùng được ở prior khác.
Cllr của plan ASVspoof, cũng được triển khai trong package scorer, là:
Cllr = [mean_B ln(1+e^(−s_B)) + mean_S ln(1+e^(s_S))] / (2 ln 2).
Đây là trung bình cân bằng theo từng lớp, với LLR quy ước cao-B. Score lý tưởng tiến tới +∞ cho B và −∞ cho spoof, làm Cllr tiến về 0. BOSARIS giải thích log-score này là proper scoring / expected loss trên các operating points: Cllr phản ánh cả chất lượng phân biệt lẫn calibration, không phải một error rate ở threshold cụ thể.
Để tạo decomposition chẩn đoán trên cùng một bộ nhãn, có thể đặt Cllr_min = Cllr(PAV(scores, labels)) và Cllr_cal = Cllr(submitted scores, interpreted as LLRs) − Cllr_min. PAV là isotonic fit có giám sát, giữ thứ tự score và tìm mapping tối ưu cho proper scoring rule; các định lý PAV được đọc trực tiếp trong bài Brümmer–du Preez và BOSARIS. Cllr_min là sàn theo thứ tự score của bộ dữ liệu; phần chênh mô tả calibration so với sàn đó. Nếu PAV fit trực tiếp trên evaluation labels thì đây là oracle/same-sample diagnostic, không phải calibration performance có thể triển khai. Fit calibrator trên dev rồi đánh giá Cllr trên test độc lập để báo calibration thật.
Mức xác minh của tên decomposition: tôi không đọc được toàn văn bài journal Brümmer & du Preez 2006 trong lượt này; chỉ xem được trang abstract/preview, nên không dùng abstract đó để chứng minh ký hiệu Cllr_min/Cllr_cal. Mối liên hệ PAV–proper-score và cách dựng sàn ở trên dựa trên toàn văn BOSARIS/PAV. Nếu chương cần khẳng định decomposition đúng theo ký hiệu gốc năm 2006, cần bổ sung kiểm chứng toàn văn đó.
ASVspoof 5: a-DCF ba loại trial và t-DCF tandem#
Evaluation Plan Phase 2 version 0.6 (2024-06-28), Appendix §11.1–11.2, xác định Track 1 là bonafide-vs-spoof, high score là B-positive; metric chính minDCF. Track 2 là SASV với ba loại trial: target bona fide, nontarget bona fide, spoof target; chỉ target cần được chấp nhận. Metric chính kiến trúc-agnostic là min a-DCF, không phải t-DCF:
a-DCF(τ)=Cmiss·πtar·Pmiss + Cfa,non·πnon·Pfa,non + Cfa,spoof·πspoof·Pfa,spoof.
Chuẩn hóa bằng min{Cmiss·πtar, Cfa,non·πnon + Cfa,spoof·πspoof} rồi lấy min theo một threshold trên score SASV. Plan dùng πtar=.9405, πnon=.0095, πspoof=.05, Cmiss=1, Cfa=10, Cfa,spoof=10. Đây là ba tỷ lệ lỗi riêng; không gộp spoof và nontarget thành cùng một loại false alarm trong báo cáo.
Plan chỉ dùng t-DCF và t-EER phụ trợ cho bài nộp triplet/tandem. Chúng giả định accept khi và chỉ khi cả CM và ASV qua threshold. Với t-DCF, ASVspoof dùng ASV tham chiếu chung của ban tổ chức để khóa operating point ASV; code hiện tại tại commit nêu trên tính:
C0 = πtar·Cmiss·Pmiss_ASV + πnon·Cfa·Pfa_ASV,
C1 = πtar·Cmiss − C0, C2 = πspoof·Cfa,spoof·Pfa_spoof_ASV,
tDCF(τCM)=C0+C1·Pmiss_CM(τCM)+C2·Pfa_CM(τCM),
tDCF_norm = tDCF/[C0+min(C1,C2)].
C0 là floor do lỗi ASV khi CM hoàn hảo; C1,C2 cho biết CM miss và spoof false accept nặng đến đâu sau khi ghép cascade. Code yêu cầu spoof false-accept rate của ASV (trừ mode worst-case) và score CM mềm, high-B. Trong cùng file còn có compute_tDCF_legacy; không tráo normalization/hệ số của hàm legacy với hàm ba loại trial hiện hành. t-EER× trong plan tìm cặp threshold đồng thời làm miss, false alarm nontarget và false alarm spoof bằng nhau.
Localization: frame, segment, range/boundary và collar#
Zhang et al., Interspeech 2023, §2–3, phân biệt point-based (chia âm thanh thành các frame/segment đồng đều, so nhãn từng đơn vị) với range-based (so thời lượng chồng lấp giữa các khoảng spoof/bonafide; không cần ép mọi tham chiếu về một grid cố định). Bài cho công thức point EER tại các ngưỡng và công thức range FPR/FNR từ overlap interval T(ri,rj), rồi ước lượng range-EER bằng binary search trên quantile với tolerance. Kết quả của bài cảnh báo đánh giá point-based nhạy với độ phân giải, nhất là khi độ phân giải test thô hơn nhãn/train. Trong thuật ngữ mà bài dẫn lại, hai cách còn được gọi là frame-based và boundary-based/durative; không nên cho rằng các tên này luôn có định nghĩa giống nhau giữa bài báo.
Ví dụ giảng dạy: nếu một clip dài 1 giây có đoạn spoof thật [0.40,0.50], chia lưới 20 ms cho năm frame spoof; chia lưới 640 ms có thể tạo một ô chứa cả bonafide lẫn spoof. Point score đánh trọng số theo số ô, còn range metric đánh trọng số theo thời lượng lỗi; do đó đổi grid hoặc quy tắc nhãn ô hỗn hợp có thể đổi EER dù dự đoán waveform không đổi. Với B-score high, point errors trong bài là PFP = mean_B[score < τ] (bona bị gọi spoof) và PFN = mean_S[score >= τ] (spoof bị gọi bona); bài đặt spoof là lớp dương trong confusion matrix. Đây là một quy ước khác tên lớp, nhưng chiều score/inequality phải đọc cùng nhau.
Boundary collar: nguồn range-EER định nghĩa overlap khoảng chính xác và không áp dụng collar/tolerance quanh biên. Trong hồ sơ nguồn đã đọc không thấy một collar chuẩn dùng chung cho deepfake localization. Nếu học liệu muốn miễn phạt lệch biên nhỏ, hãy khai báo đó là lựa chọn protocol (ví dụ bỏ qua ±δ ms quanh biên thật, hoặc ghép onset/offset trong ±δ ms), nêu δ, cách ghép one-to-one và metric; không trình bày nó như mặc định của ASVspoof. Nên báo thêm point/frame metric hoặc range metric không collar làm kết quả đối chiếu.
Danh mục nguồn đã mở và độ sâu đọc#
| Nguồn chính | Vị trí/phiên bản | Đã đọc | Claim sử dụng và giới hạn |
|---|---|---|---|
| Fawcett, “An introduction to ROC analysis”, DOI 10.1016/j.patrec.2005.10.010 | Pattern Recognition Letters 27(8), 2006; §§5–7, trang 865–868 | Đọc toàn bài và các mục tie/AUC liên quan | Nhóm score bằng nhau để tránh curve phụ thuộc thứ tự; AUC là xác suất xếp hạng; trapezoid trung bình tie. |
scikit-learn average_precision_score, roc_auc_score và mã _ranking.py | Docs 1.9.1; mã pin commit afe5bcd80ce17fd8ca88c33beb17534bd36423bc; AP formula/pos_label, _binary_clf_curve | Đọc docs và phần code liên quan, không đọc toàn repository | AP non-interpolated; khác ROC AUC trapezoid; code gom tie; binary roc_auc_score dùng score lớp có label lớn hơn; phải cố định positive label. |
| Saito & Rehmsmeier, PLOS ONE | 2015, §Theoretical Background, mục PRC baseline/interpolation và thảo luận ties | Đọc toàn văn HTML và các mục liên quan | PR baseline/random area bằng prevalence; PR nội suy khác ROC; tie ROC cần quy ước. Kết luận “PR informative hơn ROC” là theo bối cảnh dữ liệu mất cân bằng, không phải định luật mọi tác vụ. |
| ASVspoof 5 Evaluation Plan Phase 2 | Document Version 0.6, 2024-06-28; §4.1, Appendix §§11.1–11.2 | Đọc plan 14 trang; tập trung công thức/track và appendix | DCF/LLR/Cllr, high-positive convention, chi phí/prior, a-DCF ba loại, điều kiện t-DCF/t-EER. Các số liệu/prior là thiết kế ASVspoof 5, không phải prior triển khai phổ quát. |
ASVspoof 5 evaluation package calculate_modules.py | main tại commit fe23d3053a0889b305d98c9e4cadf418c213d972 (đã pin bằng remote HEAD); compute_det_curve, compute_eer, compute_actDCF, compute_tDCF, calculate_CLLR | Đọc thân các hàm liên quan | Thực hiện tie/endpoint/EER và t-DCF/Cllr. Đây là hành vi của commit cụ thể, không suy rộng cho mọi scorer ASVspoof. File còn có implementation legacy. |
| Brümmer & de Villiers, “The BOSARIS Toolkit: Theory, Algorithms and Code…” | arXiv:1304.2865; §§2.2–2.7, §3.2 | Đọc toàn bài, ưu tiên phần DCF, Cllr, PAV | LLR/threshold/DCF và PAV tối ưu trên cùng tập có nhãn; PAV cùng dữ liệu cho minDCF. Tối ưu train-set không phải bằng chứng generalization. |
| Brümmer & du Preez, “The PAV Algorithm Optimizes Binary Proper Scoring Rules” | arXiv:1304.2331v1; §1.3, Theorem 12 | Đọc toàn bài và định lý | PAV-LLR tối ưu mọi regular binary proper scoring rule và prior dưới ràng buộc đơn điệu. Bài này chứng minh tối ưu PAV; không dùng nó làm bằng chứng rằng toàn bộ notation Cllr decomposition được trình bày ở đây. |
| Zhang et al., “Range-Based Equal Error Rate for Spoof Localization” | arXiv:2305.17739v1, 2023; §§2–4, Eqs. (1)–(7), Algorithm 1, Table 3 | Đọc toàn bài | Point/frame vs duration/range, overlap equations, binary-search estimate và độ nhạy độ phân giải; spoof-positive confusion matrix trong khi score hỗ trợ bona fide. Không định nghĩa collar chuẩn. |
Chưa xác minh đầy đủ#
- Bài journal Brümmer & du Preez (2006), DOI
10.1016/j.csl.2005.08.001, là nguồn gốc thường được trích choCllr = Cllr_min + Cllr_cal; trang publisher tôi truy cập được chỉ có preview/abstract và yêu cầu quyền truy cập cho toàn văn. Tôi không dùng abstract làm bằng chứng cho công thức chi tiết. Các claim về Cllr dùng công thức ASVspoof 5 và lý thuyết PAV/BOSARIS đã đọc toàn văn; nếu cần audit provenance ký hiệu decomposition, cần lấy toàn văn hợp lệ. - Không tìm thấy trong các primary source đã đọc một quy tắc boundary collar phổ quát cho spoof localization. Nguồn range-EER dùng overlap duration chính xác; collar cần được nêu như một quyết định protocol.