DEV Community

yeni
yeni

Posted on

1

[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

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay