import nlptutti as nt
report = nt.compare_systems(
["오늘 날씨가 맑습니다", "서울은 따뜻합니다"],
{
"baseline": [
"오늘 날씨는 맑습니다",
"서울은 춥습니다",
],
"candidate": [
"오늘 날씨가 맑습니다",
"서울은 따뜻합니다",
],
},
rate_mode="standard",
)
for system in report["systems"]:
metrics = system["metrics"]
print(
system["id"],
round(metrics["cer"]["micro"], 4),
round(metrics["wer"]["micro"], 4),
)
# baseline 0.2353 0.4
# candidate 0.0 0.0
이 예제는 패키지 저장소의
고정 예제 데이터와
같다. 문서와 CI에서도 같은 기대값을 검사한다.
JSON과 Markdown 결과 저장
0.0.0.24부터 예제가 설치본에 포함된다. 설치 후에는 GitHub 파일이나 모델을 내려받지 않고 실행한다.
nlptutti sample --output comparison_input.json
nlptutti compare comparison_input.json \
--rate-mode standard \
--output-dir comparison-report
comparison-report/report.json
comparison-report/report.md
- micro: corpus 전체의 편집 횟수를 합산한 점수다.
- macro: 문장별 점수의 단순 평균이다.
- delta: candidate 점수에서 baseline 점수를 뺀 값이다. CER·WER는 음수, CRR은 양수일수록 candidate가 좋다.
- 기본값: 기존 결과와 호환되도록
rate_mode="normalized"를 유지한다. 공식 비교에서는 "standard"를 직접 적는다.
- ID mapping: ID 문자열을 정렬한 순서로 계산하므로 mapping에 넣은 순서가 fingerprint나 bootstrap 결과를 바꾸지 않는다.
- 선택 평가 설정: 키워드·개체명·별칭을 사용하면 설정 전체의 SHA-256을 결과에 남긴다.
- 원문: 문장 전체를 담는
raw_inputs는 include_transcripts=True일 때만 추가한다. 개체명 오류 구간이나 진단 토큰은 별개다.
외부에 공유할 보고서: 0.0.0.23부터
기존 결과와 호환되도록 기본값은 privacy_mode="detailed"다.
이 모드에는 사전 이름·라벨, 개체명 오류 구간, 진단 토큰이 남을 수 있다.
include_transcripts=False만으로 모든 텍스트가 숨겨지는 것은 아니다.
report = nt.compare_systems(
["김민수"],
{
"baseline": ["김민서"],
"candidate": ["김민수"],
},
entities=["김민수"],
privacy_mode="aggregate",
)
systems = report["systems"]
print([system["id"] for system in systems])
# ['system-1', 'system-2']
summary = systems[1]["entities"]["summary"]
print(summary["f1"]) # 1.0
집계 모드는 점수와 fingerprint를 유지하고 사전별·라벨별 상세와 오류 텍스트를 제외한다.
시스템 이름은 입력 순서대로 바꾸며 진단 토큰은 [redacted]로 표시한다.
CLI에서는 --privacy-mode aggregate를 지정한다.
원문 포함 옵션과 함께 쓸 수 없으며, 해시와 집계값도 익명성을 보장하지 않는다.
파일·문장별 비교와 CI 판정: 0.0.0.24부터
저장된 STT 파일은 --input-format manifest로 연결한다.
파일마다 ID, 경로, 형식을 적고 공급자 응답에는 provider와 schema도 명시한다.
경로는 목록 파일이 있는 폴더 기준이며, 보고서에는 경로 대신 파일 해시와 형식만 남긴다.
파일 목록 예제에서 시작할 수 있다.
nlptutti compare manifest.json \
--input-format manifest \
--rate-mode standard \
--output-dir comparison-report
include_items=True는 문장별 점수와 상위 악화·개선 ID를 추가한다.
labels는 사용자가 붙인 도메인·잡음 등의 조건별 집계다.
음성을 분석해 라벨을 추정하지 않으며, 표본 수가 작은 조건은 따로 해석해야 한다.
ID와 라벨도 민감할 수 있어 집계 전용 모드에서는 두 옵션을 거부한다.
숫자·띄어쓰기·이름 예제로 결과를 읽어 보자.
nlptutti gate \
comparison-report/report.json \
--policy examples/gate_policy.json \
--output decision.json
gate는 직접 정한 허용치를 검사한다. 종료 코드 0은 통과, 3은 품질 기준 미달,
2는 입력이나 설정 오류다. 2%p는 0.02로 적는다.
정책 파일과 CI 예제를 참고하자.
이 판정은 통계적 유의성 검정이 아니다.
JSON과 Markdown은 같은 보고서 검증을 거친다. 필수 필드나 숫자가 잘못되면
필드 경로를 포함한 오류가 난다. Bootstrap은 여전히 문장 단위이며 같은 화자의
여러 문장은 독립 표본이 아닐 수 있다. 소표본·낮은 재표집 횟수·폭이 0인 구간은
해석 안내를 함께 확인한다.
입력 ID 규칙, paired bootstrap, 한국어 진단과 결과 schema는
패키지 비교 매뉴얼에 정리되어 있다.