apple/iOS, UIKit, Documentation

SpeechTranscriber 정리 + DictationTranscriber

lgvv 2025. 11. 22. 15:40

SpeechTranscriber 정리 + DictationTranscriber

 

SpeechTranscriber, DictationTranscriber 각각에 대해서 정리하고, SpeechTranscriber의 속성과 구현을 하나씩 확인.

 

목차

 

  • SpeechTranscriber
    • Overview
    • Check device support
  • DictationTranscriber
    • Overview
    • Improve accuracy
  • SpeechTranscriber와 DictationTranscriber 비교 정리
  • SpeechTranscriber 자세히 보기
    • isAvailable과 supportedLocales 프로퍼티 정의
    • Configuring transcription
      • SpeechTranscriber.ReportingOption
      • SpeechTranscriber.ResultAttributeOption
      • SpeechTranscriber.TranscriptionOption
    • Checking locale support
      • SpeechTranscriber.InstalledLocales
      • SpeechTranscriber.supportedLocales
      • SpeechTranscriber.supportedLocale(equivalentTo:)
    • SpeechTranscriber.Result
      • Overview
      • Getting transcriptions
        • alternatives
        • text
      • Working with transcriptions
        • AttributeScopes.SpeechAttributes.TimeRangeAttribute
        • AttributeScopes.SpeechAttributes.ConfidenceAttribute
        • rangeOfAudioTimeRangeAttributes(intersecting:)
    • SpeechTranscriber.Preset
      • Overview
      • Standard presets
        • transcription
        • transcriptionWithAlternatives
        • timeIndexedTranscriptionWithAlternatives
        • progressiveTranscription
        • timeIndexedProgressiveTranscription
      • Getting preset properties
        • attributeOptions
        • reportingOptions
        • transcriptionOptions
  • SpeechTranscriber.Preset을 사용하는 이유

 

 

SpeechTranscriber

 

iOS 26.0+
iPadOS 26.0+
Mac Catalyst 26.0+
macOS 26.0+
visionOS 26.0+

 

일상적인 대화와 일반적인 용도에 적합한 음성 - 텍스트 변환 모듈

 

 

SpeechTranscriber Overview

 

여러 개의 Transcriber 인스턴스는 특정 측면에서 비슷하게 구성되어 있다면 동일한 엔진 인스턴스와 모델 공유할 수 있음.

 

 

 

SpeechTranscriber Check device support

 

현재 사용하는 디바이스가 SpeechTranscriber에서 사용하는 음성-텍스트(speech-to-text) 모델을 지원하는지 확인하려면 isAvailable 또는 supportedLocales 속성을 통해 확인

 

지원하지 않는 경우, 해당 기능을 비활성화하거나 대신 DictationTranscriber를 사용하는 것을 고려.

 

 

 

DictationTranscriber

iOS 26.0+
iPadOS 26.0+
Mac Catalyst 26.0+
macOS 26.0+
visionOS 26.0+

 

시스템 받아 쓰기 기능과 유사하여, 구형 기기와도 호환되는 음성-텍스트(speech-to-text) 모듈

 

 

 

DictationTranscriber Overview

 

해당 Transcriber는 speech-to-text ML 모델, 혹은 SFSpeechRecognizer가 온디바이스(On-Device) 모드로 설정되었을 때 사용하는 모델과 동일한 모델을 활용

 

DictationTranscriber는 SFSpeechRecognizer가 네트워크 연결을 통해서만 지원하는 언어 또는 로케일은 지원하지 않음.

 

 

 

DictationTranscriber Improve accuracy

 

특정 단어에 인식 편향을 주거나 사용자가 직접 정의한 어휘를 제공하거나 Transcriber의 알고리즘을 조정해 음성 인식 정확도를 향상시킬 수 있음.

 

  • To bias recognition towards certain words (특정 단어에 인식 편향)
    • AnalysisContext 객체를 생성한 뒤 특정 단어들을 contextualStrings 프로퍼티에 추가.
    • 그 이후로 SpeechAnalyzer 객체를 생성하거나 기존 Analyzer에 context 프로퍼티에 설정
  • To supply custom vocabulary (직접 정의한 어휘 제공)
    • SFSpeechLanguageModel 객체를 생성하고 Transciber에 customizedLanguage(modelConfiguration:)에 옵션으로 구성하여 해당 모델을 사용하도록 설정
  • To adjust the transcriber’s algorithm (알고리즘을 조정)
    • DictationTranscriber.ContentHint 파라미터로 Transcriber를 구성
    • 예를 들어서 먼 거리에서 들리는 음성의 정확도를 높이고 싶다면 farField에 힌드를 사용할 수 있음.

 

 

 

SpeechTranscriber와 DictationTranscriber 비교 정리

 

DictationTranscriber는 SFSpeechRecognizer(iOS 10.0+)와 동일한 ML 모델을 사용해서 성능도 이와 동일하고, SpeechTranscriber에서 아직 언어를 지원하지 않는 경우에 받아쓰기 형태로 사용.

 

회사 서비스에서 사용하기엔 성능이 안좋다고 느낌.

 

SFSpeechRecognizer를 사용할 때는 Siri 권한 요청부터 오디오 재생 시간을 1분으로 제한하는 등 여러가지 제약사항이 존재하는데, DictationTranscriber는 SFSpeechRecognizer를 래핑해 둔 정도.

 

 

 

 

SpeechTranscriber 자세히 보기

 

SpeechTranscriber는 SpeechModule과 LocaleDependentSpeechModule을 채택하고 있음.

SpeechModule은 나중에 AssetInventory에서 필요한 에셋을 조회할 때 해당 프로토콜을 채택한 객체들로 조회

 

 

 

 

 

isAvailable과 supportedLocales 프로퍼티 정의

 

(참고)

isAvailable는 시뮬레이터에서도 하드웨어 및 기기 OS조건이 맞으면 true로 반환.

supportedLocales는 시뮬레이터에서는 항상 빈 배열로 나타나서 SpeechTranscriber에서는 사용할 수 없는 것으로 보임.

 

/**
 모듈이 현재 기기의 하드웨어 및 기능 조건에서 사용 가능한지를 나타내는 Boolean 값입니다.
 */
public static var isAvailable: Bool { get }

/**
 변환기가 전사(transcribe)할 수 있는 로케일(locale) 목록입니다.  
 설치되어 있지 않지만 다운로드 가능한 로케일도 포함됩니다.
 
 만약 기기가 변환기를 지원하지 않으면 이 배열은 비어 있습니다.
 */
public static var supportedLocales: [Locale] { get async }

 

 

SpeechTranscriber.ReportingOption

 

 

transcriber의 결과 전달과 관련된 옵션

 

 

case .alternativeTranscriptions

  • 가장 가능성이 높은 transcriptions 결과 외에도 대체 transcriptions를 포함.
  • 음성을 텍스트로 변환할 때 가장 정확하다고 판단한 한 가지 결과는 주전사 결과이고, 음성 입력에 대해 다른 가능성이 있는 해석들도 제공
  • 장점: 후처리에서 문맥이나 사용자의 의도에 맞춰 더 정확하게 선택 가능
  • 단점: 결과가 많아져 처리해야 할 데이터가 늘어남..

 

case .fastResults

  • transcriber가 더 빠르게 반응하도록 조정
  • 각 결과를 빠르게 내기 위해서 참고하는 이전 context의 양을 줄이며, 음성 스트림의 작은 구간(window 및 chunk)만을 사용해서 처리
  • 장점: 처리 속도가 더 빨라짐. (즉, 처음 결과가 더 빠르게 나옴)
  • 단점: 이전 context를 충분히 참고하지 않기 때문에 정확도가 낮아질 수 있음.

 

case .volatileResults

  • 최종 결과(finalized result) 외에도 잠정 결과(tentative result)를 제공.
  • 즉, 전사가 완료되기 전에도 중간 단계의 텍스트를 미리 받아볼 수 있으며, 같은 오디오 구간(audio range)에 대해 여러번 중간 결과를 전달해 점점 전사 정확도를 높이면서 최종 결과로 수렴.
  • 목적: 실시간 피드백을 제공가능하며 중간 결과를 활용한 UI 업데이트 가능.
  • 효과: 전사가 완료되기 전에 텍스트를 미리 보여줄 수 있음.
  • 단점: 중간 결과가 최종과 다를 수 있어서 최종 결과와 혼동하지 않도록 처리가 필요.

 

 

 

SpeechTranscriber.ResultAttributeOption

해당 옵션은 transcription 결과가 어떻게 표현할지를 제어하는 옵션

 

 

case .audioTimeRange

  • 타임코드(time-code) 정보를 전사 결과 AttributedString에 포함시킬 것인지를 결정하는 설정
  • Foundation/AttributeScopes/SpeechAttributes/TimeRangeAttribute 타입
  • Usage
    • 자막(SRT, VTT) 생성
    • 먼저 만든 단어와 싱크 유지
    • 탭 하면 원하는 오디오 위치로 이동하는 인터랙션 

 

case .transcriptionConfidence

  • 전사 결과에 신뢰도(confidence)를 포함시킬 것인지 결정
  • These are Foundation/AttributeScopes/SpeechAttributes/ConfidenceAttribute 타입
  • Usage
    • 신뢰도 기능 UX 제공 (신뢰도가 낮은 부분은 회색처리 하거나 정확하지 않을 수 있음 안내)
    • 후처리 자동화 (특정 신뢰도 이하 단어를 자동 보정 모델에 보내기)
    • 자막 품질 개선 (저신뢰 단어는 별도 처리)

 

 

SpeechTranscriber.TranscriptionOption

 

전사된 문자열(plain text)를 어떤 형태로 출력될지를 설정하는 것들.

 

 

case .etiquetteReplacements

  • 특정 단어와 구문을 편집된(가려진) 형태로 대체.
  • 해당 옵션이 활성화 될 경우에 욕설로 인식된 구문은 별표(*)로 대체되어 전사됨.

 

 

SpeechTranscriber.InstalledLocales

 

현재 기기에 설치된 Locales을 기준으로 transcribe할 수 있는 목록 리스트

 

 

 

SpeechTranscriber.supportedLocales

 

기기에 설치되지 않았지만 다운로드 가능한 Locale을 포함하여 transcribe할 수 있는 목록 리스트

 

 

SpeechTranscriber.supportedLocale(equivalentTo:)

 

모듈이 지원하는 Locale 중에서 지정한 Locale과 동등한 Locale을 반환

 

  • Parameter
    • 임의의 Locale
  • ReturnValue
    • 지원되는 Locale 목록에서 동등한 Locale을 반환하여, 해당하는 Locale이 없으면 nil을 반환

 

Locale.current와 같은 임의의 Locale이 있을 때, 해당 모듈이 지원하는 Locale 중에서 어떤 것이 그 Locale과 동등한지 확인할 때 사용

 

정확히 일치하는 Locale이 없는 경우에는 해당 메서드는 근사치(near-equivalent)를 반환

즉, 같은 Locale.LanguageCode는 같은 값을 가지지만 Locale.Region 값이 다른 Locale로 가능하면 이미 설치된 Locale이 우선됨.

 

따라서 color를 colour처럼 예상하는 것과 다른 결과를 생성할 수도 있음.

 

해당 메서드를 사용하더라도, 앱은 사용자가 지원되는 Locale 목록에서 직접 Locale을 선택하여 수정할 수 있는 기능을 제공하는 것이 바라직.

 

 

SpeechTranscriber.Result

전사된 구문이나 구절로, 구문은 순서대로 전달.

 

  • Overview
    • 전사기가 volatile results 옵션으로 구성된 경우, 각 구문은 최종 결과로 확정되기 전까지 전사 정확도가 점점 향상되면서, 한 번 이상 반복해서 전달될 수 있음.
  • alternatives
    • 오디오 구간에 대한 모든 가능한 대체 해석을 포함하여 가능성 순으로 내림차순으로 정렬
    • 배열은 비어 있지는 않으나, 빈 문자열이 포함될 수 있음.
    • 빈 문자열의 경우에는 해당 오디오 구간에 전사가 없는 대체 결과를 나타냄.
      • 대체 결과를 받기 위해서는SpeechTranscriber.ReportingOption.alternativeTranscriptions를 설정해야 함.
  • text
    • 해당 오디오 구간에서 가장 가능성이 높은 전사 결과 (most likley interpertation)
    • 여기서는 빈 문자열은 해당 오디오에 인식 가능한 음성이 없음을 나타내고, volatile range의 결과에서는 이 구간의 이전의 결과가 무효화 되었음을 의미
    • 이 값은 alternatives 배열의 첫 번째 요소(가장 가능성이 높은 결과)와 동일.
  • AttributeScopes.SpeechAttributes.TimeRangeAttribute
    • 연관된 전사 텍스트에 대응하는 원본 오디오의 시간 범위
    • 원본 오디오에 특정 시간 범위에 해당하는 텍스트를 찾으려면 rangeOfAudioTimeRangeAttributes(intersecting: )메서드 사용
  • AttributeScopes.SpeechAttributes.ConfidenceAttribute
    • 연관된 전사 텍스트의 신뢰도로 0에서 1사이의 값.
  • func rangeOfAudioTimeRangeAttributes(intersecting timeRange: CMTimeRange) -> Range<AttributedString.Index>?
    • 해당 메서드는 주어진 시간 범위를 수신 객체의AttributeScopes.SpeechAttributes.TimeRangeAttribute와 비교.
    • 해당 SpeechTranscriber또는 DictationTranscriber 모듈의 volatile 또는 finalized 결과를 추적하는 AttributedString을 업데이트할 때 유용하게 사용할 수 있음.

 

 

SpeechTranscriber.Preset

 

미리 정의된 transcriber의 구성

 

  • Overview
    • transcriber는 preset을 사용하여 구성할 수 있고, 해당 속성 값을 수정한 뒤 수정된 값으로 transcriber를 구성할 수 있음.
    • 이 타입을 확장하여 사용자 정의의 preset을 직접 만들 수도 있음.
    • preset을 반드시 사용할 필요는 없어서 transcriber를 사용하여 커스터마이징할 수도 있음.

 

Preset을 이용하여 SpeechTranscriber를 구성하는 샘플 코드

  • timeIndexedTranscriptionWithAlternatives 프리셋을 기반으로 transcriber를 구성하고 etiquette filtering을 추가하고 alternative transcription을 제거한 경우를 보여줌.
let preset = SpeechTranscriber.Preset.timeIndexedTranscriptionWithAlternatives
let transcriber = SpeechTranscriber(
    locale: Locale.current,
    transcriptionOptions: preset.transcriptionOptions.union([.etiquetteReplacements])
    reportingOptions: preset.reportingOptions.subtracting([.alternativeTranscriptions])
    attributeOptions: preset.attributeOptions
)

 

 

 

아래는 미리 구성된 프리셋과 해당 구성 설정

  • transcription
    • 기본적이고 정확한 전사를 위한 구성
  • transcriptionWithAlternatives
    • 편집 제안 기능이 포함된 전사를 위한 구성
  • timeIndexedTranscriptionWithAlternatives
    • 원본 오디오와 교차 참조된 편집 제안 기능 전사를 위한 구성
  • progressiveTranscription
    • 실시간 오디오 즉시 전사를 위한 구성
  • timeIndexedProgressiveTranscription
    • 스트림 타임코드와 교차 참조된 실시간 오디오 즉시 전사를 위한 구성

 

Preset volatileResults fastResults alternativeTranscriptions audioTimeRange
transcription NO NO NO NO
transcriptionWithAlternatives NO NO Yes NO
timeIndexedTranscriptionWithAlternatives NO NO Yes Yes
progressiveTranscription Yes Yes NO NO
timeIndexedProgressiveTranscription Yes Yes NO Yes

 

 

  • attributeOptions
    • 이 프리셋에 적합한 transcriber 속성 관련 옵션
  • reportingOptions
    • 이 프리셋에 적합한 transcriber 결과 전달 옵션
  • transcriptionOptions
    • 이 프리셋에 적합한 전사 텍스트 관련 옵션

 

 

 

SpeechTranscriber.Preset을 사용하는 이유

 

SpeechTranscriber의 이니셜라이저 코드를 보면 아래와 같이 2개의 생성자가 존재

 

 

 

Preset을 통해 여러 옵션들에 대한 구성을 미리 정해둔 구성 세트로 필요할 때마다 다양한 옵션을 묶어서 한번에 제공.

 

Transcriber에는 iOS 26 최신을 기준으로 여러 옵션이 존재.

  • 결과 전달 방식: 즉시 전달할지, 최종 결과만 전달할지
  • 텍스트 옵션: 비속어 필터링
  • 속성 옵션: 타임스탬프, 단어별 신뢰도, 대체 전사 등

이 옵션들을 매번 하나씩 설정하는 대신에 프리셋을 선택하여 미리 세팅된 상태로 Transcriber를 사용할 수 있음.

 

 

 

 

 

 

 

(참고)

https://developer.apple.com/documentation/speech/speechtranscriber

 

SpeechAnalyzer | Apple Developer Documentation

Analyzes spoken audio content in various ways and manages the analysis session.

developer.apple.com

https://developer.apple.com/documentation/speech/dictationtranscriber

 

DictationTranscriber | Apple Developer Documentation

A speech-to-text transcription module that’s similar to system dictation features and compatible with older devices.

developer.apple.com