DEV Community

yeni
yeni

Posted on

[WWDC 정리] Customize on-device speech recognition

Intro

  • Speech: iOS에서 음성인식 기능을 위해 사용하는 프레임워크
  • Siri 및 키보드 받아쓰기 기능과 동일한 기술을 사용하여 음성 지원 앱을 만들 수 있다.
  • 하지만 개발을 할 때 기본 음성 인식 class를 그대로 사용하기엔(out of the box라는 표현을 사용) 모든 앱에 들어맞지는 않은 문제가 있음.
  • 본 세션은 Speech 프레임워크의 음성 인식 모델의 원리를 설명하고, 각 앱에 맞도록 모델을 Custom하는 내용들을 다루고 있음.

A Speech Recognition System: 음성 인식 시스템

"사진"

  • 음석 인식 시스템은 Acoustic Model안에 음성 데이터 주입
  • Model은 phonetic representation(음성 표현) 생성

Image description

  • 음성 표현은 쓰여진 형식(필사본, transcription)으로 변환됨.
  • 때때로 여러 음성 표현이 한 오디오 데이터에 맞거나
  • 하나의 음성 표현이 다양한 transcription에 해당될 수 있음.
  • 위 사진의 경우 여러개의 transcription 후보들이 나온 케이스. 이를 명확하게 구분할 방법이 필요
    • 이를 위해 Language Model사용

Language Model: 언어 모델

Image description

  • Language Model은 주어진 단어가 연속적인 여러 단어의 뒤에 나올 가능성(우도, likelihood)을 예측
  • 문장 전체에 적용하면 이 문장이 말이 안되는지 알 수 있게 함.
    • 우도: 확률의 반대 개념. 확률은 고정된 사건과 변화하는 확률 분포, 우도는 변하는 사건과, 고정된 확률 분포.

Image description

  • 문장 전체에 적용하면 이 문장이 말이 안되는지 알 수 있게 함.

Image description

  • language model은 학습되는동안 모델이 노출된 사용 패턴에 근거해서 가능성이 낮은 후보 단어들을 제치도록 도와줌.

Image description

  • iOS 10부터 Speech 프레임 워크는 전체 과정을 캡슐화 함. 인터페이스 사용하기 쉬움.

체스 앱 예시

Image description

  • “Play the Albin counter gambit”
  • misrecognized: “Play the album counter gambit”
  • 잘못 인식한 이유: Language Model은 학습 과정에서 많은 음악 요청에 노출 되었음

Image description

  • 그래서 앨범 이름을 입력할 수 있는 “Play the album”로 인식
  • 반대로 내가 선호하는 transcription이 나오지 않을 수 있음.
  • 언어 모델의 동작을 추상화함으로써 Speech 프레임워크는 모든 앱들이 같은 모델을 사용하도록 강제함.
    • 다른 동작이 필요한 다른 도메인일지라도

Image description

  • iOS 17부터 SFSpeechRecognizer의 언어 모델 동작을 커스텀하는게 가능함
  • 앱에 맞게 조정하고, 정확도를 향상시킬 수 있음

언어 모델 customization

Image description

  1. 학습 데이터 만들기 (개발 과정에서 할 수 있음)
  2. 앱에서 데이터를 준비하고, 인식 요청을 configure하고, 실행

Data Generation

  • 학습 데이터 구축 과정
  • 높은 수준에서, 학습 데이터는 앱 사용자가 사용할 가능성이 높은 문장을 나타내는 텍스트 조각으로 구성
  • 이는 모델이 이 문장을 예상하고, 올바르게 인식할 likelihood를 높임

Speech Framework

Image description

  • Speech 프레임워크는 학습 데이터의 컨테이너 역할을 하는 새로운 클래스 도입
    • 이는 결과 빌더 DSL을 사용해서 빌드됨.
  • PhraseCount 객체: 정확한 구절이나 구절의 일부 제공.
    • 또한 샘플이 최종 데이터 셋이 몇 번 표시되어야하는지도 설명
    • 특정 구문에 다른 구문보다 더 큰 가중치를 부여하는데 사용 가능.
  • 시스템에서 허용되는 데이터는 한정적이기 때문에, 전반적인 학습 데이터 예산과 구문 데이터 강화의 밸런스를 맞추어야 함.

Image description

  • FCustomLanguageModelData.PhraseCountsFromTemplates:
    • 규칙적인 패턴에 맞는 많은 샘플을 쉽게 만들기 위해서 템플릿을 이용할 수 있음.
    • ex) 체스의 움직임을 만드는 세 단어들의 클래스들
      • piece: 타겟. 이동해야하는 말
      • royal: 보드의 어느 쪽에서 플레이할지 정의하는 왕 말
      • rank: 이동해야할 랭크
      • → 모든 움직임의 가능성을 나타내는 데이터 샘플을 쉽게 만들 수 있음.
        • 10000개의 샘플을 모든 결과 데이터 샘플에 균등하게 얻음
    • 데이터 오브젝트가 만들어지면, 파일로 내보내고 에셋처럼 앱에 배포할 수 있음.

Custom Pronunciations

  • 앱에서 전문 용어를 사용하는 경우. 예를 들어 약 이름을 포함한 의료 앱의 경우
    • 철자와 발음을 모두 정의하고 해당 용어의 사용법을 정의하는 PhraseCount를 제공할 수 있음.
  • 사전에 단어 등록
  • 발음들은 X-SAMPA 문자열 형식으로 입력할 수 있음
  • 각 locale들은 고유한 발음 기호의 하위 집합을 지원 (설명서 참조)
    • locale: 사용자 인터페이스에서 사용되는 언어, 지역설정, 출력 형식등을 정의하는 문자열.

Image description

  • 프랑스어 방언 Winawer을 이해할 수 있도록 변형

Personalized Data

  • Usage Patterns
    • 동일한 API로 앱이 런타임에 접근할 수 있는 데이터에 대해 학습할 수 있음.
    • 사용자가 학습하려는 체스의 공격과 방어에 초점을 맞추는 것처럼 사용자에게 특정 사용 패턴을 지원하기 위해 이 작업을 수행할 수 있음
  • Names
    • 이름이 있는 엔티티들을 훈련할 수 있음
  • Privacy

    • 앱이 사용자의 연락처에 대한 네트워크 플레이를 지원할 수 있음.
    • 개인 정보 보호가 가장 중요
  • 예시: 커뮤니케이션 앱

  • 커뮤니케이션 앱에서 통화내역에 표시되는 연락처 빈도에 따라 전화걸기 명령 강화 가능

    • 이러한 정보는 항상 기기에 남아있어야 함
    • 앱 내에서 메서드로 데이터 객체를 생성하고, 파일에 쓰고, 수집

Image description

Image description

  • 학습 데이터가 생성되면 단일 로캘에 바인딩 됨
  • 단일 스크립트 내에서 여러 로캘 지원하려면 NSLocalizedString과 같은 표준 로컬라이제이션 기능을 사용하면 됨

  • 앱에서 Model 사용

Image description

  • 이전 단계에 생성한 파일을 받아들이고, 우리가 나중에 사용할 새로운 두 개의 파일을 만들기 위해 새로운 메서드 prepareCustomLanguage를 호출
    • 호출하는데에 시간 오래걸리기 때문에 메인 스레드에서 호출하고, 로딩화면과 같은 일부 UI뒤에 Latency를 숨기는 것이 좋음.

Image description

  • lmcustomization은 네트워크를 통해 사용자 지정 데이터를 전송하지 않으면서 지원

Image description

Image description

Top comments (0)