Intro
-
Speech
: iOS에서 음성인식 기능을 위해 사용하는 프레임워크 - Siri 및 키보드 받아쓰기 기능과 동일한 기술을 사용하여 음성 지원 앱을 만들 수 있다.
- 하지만 개발을 할 때 기본 음성 인식 class를 그대로 사용하기엔(out of the box라는 표현을 사용) 모든 앱에 들어맞지는 않은 문제가 있음.
- 본 세션은 Speech 프레임워크의 음성 인식 모델의 원리를 설명하고, 각 앱에 맞도록 모델을 Custom하는 내용들을 다루고 있음.
A Speech Recognition System: 음성 인식 시스템
- 음석 인식 시스템은 Acoustic Model안에 음성 데이터 주입
- Model은 phonetic representation(음성 표현) 생성
- 음성 표현은 쓰여진 형식(필사본, transcription)으로 변환됨.
- 때때로 여러 음성 표현이 한 오디오 데이터에 맞거나
- 하나의 음성 표현이 다양한 transcription에 해당될 수 있음.
- 위 사진의 경우 여러개의 transcription 후보들이 나온 케이스. 이를 명확하게 구분할 방법이 필요
- 이를 위해 Language Model사용
Language Model: 언어 모델
- Language Model은 주어진 단어가 연속적인 여러 단어의 뒤에 나올 가능성(우도, likelihood)을 예측
- 문장 전체에 적용하면 이 문장이 말이 안되는지 알 수 있게 함.
- 우도: 확률의 반대 개념. 확률은 고정된 사건과 변화하는 확률 분포, 우도는 변하는 사건과, 고정된 확률 분포.
- 문장 전체에 적용하면 이 문장이 말이 안되는지 알 수 있게 함.
- language model은 학습되는동안 모델이 노출된 사용 패턴에 근거해서 가능성이 낮은 후보 단어들을 제치도록 도와줌.
- iOS 10부터 Speech 프레임 워크는 전체 과정을 캡슐화 함. 인터페이스 사용하기 쉬움.
체스 앱 예시
- “Play the Albin counter gambit”
- misrecognized: “Play the album counter gambit”
- 잘못 인식한 이유: Language Model은 학습 과정에서 많은 음악 요청에 노출 되었음
- 그래서 앨범 이름을 입력할 수 있는 “Play the album”로 인식
- 반대로 내가 선호하는 transcription이 나오지 않을 수 있음.
- 언어 모델의 동작을 추상화함으로써 Speech 프레임워크는 모든 앱들이 같은 모델을 사용하도록 강제함.
- 다른 동작이 필요한 다른 도메인일지라도
- iOS 17부터 SFSpeechRecognizer의 언어 모델 동작을 커스텀하는게 가능함
- 앱에 맞게 조정하고, 정확도를 향상시킬 수 있음
언어 모델 customization
- 학습 데이터 만들기 (개발 과정에서 할 수 있음)
- 앱에서 데이터를 준비하고, 인식 요청을 configure하고, 실행
Data Generation
- 학습 데이터 구축 과정
- 높은 수준에서, 학습 데이터는 앱 사용자가 사용할 가능성이 높은 문장을 나타내는 텍스트 조각으로 구성
- 이는 모델이 이 문장을 예상하고, 올바르게 인식할 likelihood를 높임
Speech Framework
- Speech 프레임워크는 학습 데이터의 컨테이너 역할을 하는 새로운 클래스 도입
- 이는 결과 빌더 DSL을 사용해서 빌드됨.
-
PhraseCount
객체: 정확한 구절이나 구절의 일부 제공.- 또한 샘플이 최종 데이터 셋이 몇 번 표시되어야하는지도 설명
- 특정 구문에 다른 구문보다 더 큰 가중치를 부여하는데 사용 가능.
- 시스템에서 허용되는 데이터는 한정적이기 때문에, 전반적인 학습 데이터 예산과 구문 데이터 강화의 밸런스를 맞추어야 함.
-
FCustomLanguageModelData.PhraseCountsFromTemplates
:- 규칙적인 패턴에 맞는 많은 샘플을 쉽게 만들기 위해서 템플릿을 이용할 수 있음.
- ex) 체스의 움직임을 만드는 세 단어들의 클래스들
- piece: 타겟. 이동해야하는 말
- royal: 보드의 어느 쪽에서 플레이할지 정의하는 왕 말
- rank: 이동해야할 랭크
- → 모든 움직임의 가능성을 나타내는 데이터 샘플을 쉽게 만들 수 있음.
- 10000개의 샘플을 모든 결과 데이터 샘플에 균등하게 얻음
- 데이터 오브젝트가 만들어지면, 파일로 내보내고 에셋처럼 앱에 배포할 수 있음.
Custom Pronunciations
- 앱에서 전문 용어를 사용하는 경우. 예를 들어 약 이름을 포함한 의료 앱의 경우
- 철자와 발음을 모두 정의하고 해당 용어의 사용법을 정의하는 PhraseCount를 제공할 수 있음.
- 사전에 단어 등록
- 발음들은 X-SAMPA 문자열 형식으로 입력할 수 있음
- 각 locale들은 고유한 발음 기호의 하위 집합을 지원 (설명서 참조)
- locale: 사용자 인터페이스에서 사용되는 언어, 지역설정, 출력 형식등을 정의하는 문자열.
- 프랑스어 방언 Winawer을 이해할 수 있도록 변형
Personalized Data
- Usage Patterns
- 동일한 API로 앱이 런타임에 접근할 수 있는 데이터에 대해 학습할 수 있음.
- 사용자가 학습하려는 체스의 공격과 방어에 초점을 맞추는 것처럼 사용자에게 특정 사용 패턴을 지원하기 위해 이 작업을 수행할 수 있음
- Names
- 이름이 있는 엔티티들을 훈련할 수 있음
-
Privacy
- 앱이 사용자의 연락처에 대한 네트워크 플레이를 지원할 수 있음.
- 개인 정보 보호가 가장 중요
예시: 커뮤니케이션 앱
-
커뮤니케이션 앱에서 통화내역에 표시되는 연락처 빈도에 따라 전화걸기 명령 강화 가능
- 이러한 정보는 항상 기기에 남아있어야 함
- 앱 내에서 메서드로 데이터 객체를 생성하고, 파일에 쓰고, 수집
- 학습 데이터가 생성되면 단일 로캘에 바인딩 됨
단일 스크립트 내에서 여러 로캘 지원하려면
NSLocalizedString
과 같은 표준 로컬라이제이션 기능을 사용하면 됨앱에서 Model 사용
- 이전 단계에 생성한 파일을 받아들이고, 우리가 나중에 사용할 새로운 두 개의 파일을 만들기 위해 새로운 메서드
prepareCustomLanguage
를 호출- 호출하는데에 시간 오래걸리기 때문에 메인 스레드에서 호출하고, 로딩화면과 같은 일부 UI뒤에 Latency를 숨기는 것이 좋음.
- lmcustomization은 네트워크를 통해 사용자 지정 데이터를 전송하지 않으면서 지원
Top comments (0)