ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Whisper 한국어 전사에서 문장이 반복될 때: 무음·언어·이전 문맥 4단계 점검
    기술과 산업/AI 2026. 10. 28. 15:36
    728x90

    핵심 답: Whisper 전사 결과에 같은 문장이나 자막이 계속 반복되면, 먼저 원본의 긴 무음·잡음 구간을 확인하고 한국어를 명시한 뒤, 반복이 계속될 때만 condition_on_previous_text=False를 비교해 보세요. 이 옵션은 반복 루프를 줄일 수 있지만 창 사이 문맥의 일관성은 낮아질 수 있습니다.

    적용 환경: 로컬 openai-whisper Python 패키지 기준. 아래는 2026-10-28에 공식 README·소스·모델 카드로 확인한 문서 기반 점검 예시이며, 특정 음성 파일에서 실행하거나 정확도를 측정한 결과는 아닙니다.

    왜 반복이 생기나

    Whisper는 긴 파일을 내부적으로 약 30초 창으로 나눠 처리합니다. 공식 모델 카드는 시퀀스-투-시퀀스 구조가 반복 텍스트를 만들 수 있고, 실제 발화가 아닌 텍스트가 섞이는 hallucination이 나타날 수 있다고 설명합니다. 따라서 “모델을 더 크게 바꾸면 해결된다”로 바로 결론 내리기보다, 입력 음성·언어 설정·창 간 문맥·결과 검수를 분리해 확인하는 편이 안전합니다.

    1. 먼저 반복 구간의 원본을 듣는다

    반복된 문장 앞뒤 30초를 재생해 보세요. 긴 무음, 음악만 있는 구간, 끊긴 발화, 여러 사람이 겹친 구간이라면 모델이 확실한 음성 단서를 얻기 어렵습니다. 자동 전사 결과를 회의록·자막으로 바로 배포하지 말고, 반복이 시작된 시간대를 원본과 대조하는 검수 단계를 둡니다.

    # 문제 구간을 잘라 사람이 먼저 확인하는 예시
    ffmpeg -ss 00:12:00 -t 00:01:00 -i input.mp3 -c:a pcm_s16le -ar 16000 -ac 1 check.wav

    위 명령은 진단용 예시입니다. 실제로 파일이 복구되거나 반복이 사라진다는 보장은 없습니다. 기존 글의 설치·실행·변환 오류 점검에서 다룬 ffmpeg 경로 및 입력 포맷 확인도 먼저 끝내세요.

    2. 한국어 전사라면 언어와 작업을 명시한다

    한국어 음성을 한국어로 받아쓰는 경우에는 번역이 아니라 transcribe 작업을 사용합니다. 공식 README는 비영어 음성 전사에서 언어를 지정하는 CLI 예시를 제공합니다. Python에서도 같은 의도를 옵션으로 드러내면, 로그와 재현 조건을 정리하기 쉽습니다.

    import whisper
    
    model = whisper.load_model("turbo")
    result = model.transcribe(
        "meeting-ko.mp3",
        language="ko",
        task="transcribe",
        verbose=False,
    )
    print(result["text"])

    주의: turbo는 번역 작업용 모델이 아닙니다. 한국어 음성을 영어로 번역해야 한다면 공식 README 안내처럼 다국어 medium 또는 large 계열과 task="translate"를 검토해야 합니다. 전사와 번역을 섞으면 결과 언어가 기대와 달라졌는지부터 다시 확인해야 합니다.

    3. 반복 루프 의심 시 이전 문맥 옵션을 한 번만 비교한다

    공식 transcribe.py의 설명에 따르면 condition_on_previous_text=True는 앞 창의 출력을 다음 창의 프롬프트로 사용합니다. 이를 끄면 창 사이 문맥은 덜 자연스러워질 수 있지만, 반복 루프나 타임스탬프 불일치에 덜 취약해질 수 있습니다. 그래서 전체 파일을 무작정 다시 돌리기보다 반복이 보인 짧은 복사본에서 비교합니다.

    baseline = model.transcribe(
        "check.wav", language="ko", task="transcribe", verbose=False
    )
    
    no_context = model.transcribe(
        "check.wav",
        language="ko",
        task="transcribe",
        condition_on_previous_text=False,
        verbose=False,
    )
    
    print("기본:", baseline["text"])
    print("이전 문맥 끔:", no_context["text"])

    한쪽 출력만 보고 “정확하다”고 판단하지 마세요. 원본 음성과 대조해 반복 여부, 문장 연결, 고유명사, 누락을 함께 비교합니다. 옵션 하나가 모든 파일에 맞는 해결책은 아닙니다.

    4. 결과를 신뢰도 대신 검수 기준으로 걸러낸다

    Whisper의 모델 카드는 언어·억양·도메인에 따라 성능이 고르지 않을 수 있으며, 특정 배포 맥락에서 강건한 평가를 권합니다. 특히 한국어 회의 녹음처럼 고유명사와 화자 전환이 많은 파일은 다음 기준을 기록해 두는 편이 실무적입니다.

    • 반복 문장이 시작되는 시간과 길이
    • 원본에 실제 발화가 있었는지
    • 언어·작업·모델 이름·패키지 버전
    • condition_on_previous_text의 값
    • 사람 검수 후 수정한 구간

    패키지와 실행 환경은 다음처럼 별도로 남깁니다.

    python -m pip show openai-whisper
    whisper --help

    빠른 체크리스트

    1. 반복 구간의 원본 음성을 먼저 재생했다.
    2. 긴 무음·잡음·겹침 발화를 구분했다.
    3. 한국어 전사에는 language="ko", task="transcribe"를 명시했다.
    4. 짧은 동일 구간에서 이전 문맥 옵션의 켬·끔을 비교했다.
    5. 모델·패키지 버전과 사람 검수 결과를 기록했다.

    결론

    반복 텍스트는 단순 설치 오류와 다릅니다. 입력 구간을 먼저 확인하고, 언어와 작업을 명시한 다음, 필요할 때만 이전 문맥 설정을 짧은 샘플에서 비교하세요. 자동 전사 결과는 초안으로 취급하고, 중요한 회의록·자막은 원본 음성으로 검수해야 합니다.

    공식 출처

    728x90
Designed by Tistory.