Audio-024, OmniFlatten: An End-to-end GPT Model for Seamless Voice Conversation, ACL 2025
◼ Comment
- 텍스트 백본에 듀플렉스 모델을 학습하는 건데 3가지 스텝이 있음
- modality alignment,
- half-duplex dialogue learning,
- full-duplex dialogue learning.
- 기본적으로 여기서는 토큰을 concat해서 넣는 방식임
- 한 timestep에서 텍스트와 오디오 토큰이 concat해서 들어감 (discrete token 사용)
- 근데 이게 같은 timestep을 표기하는거겠지? 즉 positional embedding이나 그런기법이 있나? => 이런건 여기서는 없는듯. 즉 그냥 LLM의 step과 똑같지만, 이해를 위해서 그림에서는 chunk를 묶어서 표현
- modality alignment
- ASR Sample: [ASR][SOS]S_seq[EOS][SOT]T_seq[EOT]
- TTS Sample: [TTS][SOT]T_seq[EOT][SOS]S_seq[EOS]
- ASR, TTS 샘플로 모델을 SFT 한다.
- 내 생각은 pretraining 해도 될거 같은데 SFT로 학습하는게 ? 긴함
- SFT이기 때문에 입력쪽에는 masking 걸려서 loss가 안흐르는듯
- 오픈소스 데이터로 Aishell-3, LibriTTS, TED-LIUM, VoxPopuli, Librispeech, MLS로 30% 사용하고 자체 데이터 70% 사용한다고함
- half-duplex dialogue learning
- [User speech tokens] [User text tokens] [Assistant text tokens] [Assistant speech tokens] 이런식으로 데이터 넣어서 학습한다는 것임
- 기존의 대화 데이터에서 ASR, TTS을 활용해서 이런 쌍을 만드는듯 (데이터 증강)
- 이 데이터로 학습하면 알아서 ASR, text-to-text, TTS을 동시에 배우는 것임
- 이게 그림3로 학습하기전 중간 단계의 pretraining 개념이라 보면 되는거 같음
- full-duplex stage1
- 위에서는 input speech -> input text -> output text -> output speech 순서였음
- 여기서 input text 을 없애서 input speech -> output text -> output speech 형태로 학습
- 이게 텍스트-오디오 순서로 토큰이 생성되는 구조인데, 텍스트가 너무 길게 생성하게끔 하면 거의 TTS랑 다른게 없음
- 따라서 적절히 text는 2개 토큰, 오디오는 10개 토큰이 나오도록 데이터를 아래처럼 구성했다는거 같음
- User speech chunk 1: U1 U2 U3 U4 U5 U6 U7 U8 U9 U10
- Assistant text chunk 1: T1 T2
- Assistant speech chunk 1: A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
- User speech chunk 2: U11 U12 U13 U14 U15 U16 U17 U18 U19 U20
- Assistant text chunk 2: T3 T4
- Assistant speech chunk 2: A11 A12 A13 A14 A15 A16 A17 A18 A19 A20
- 근데 실제로 데이터가 텍스트와 오디오 토큰비율이 2:10이 아닐것이기 때문에 slience란 개념을 도입
- Text chunks: [T1 T2] [T3 T4] [silent_text silent_text] [silent_text silent_text]
- Speech chunks: [A1 ... A10] [A11 ... A20] [A21 ... A30] [A31 ... A40]
- 반대인 경우도 있음
- Text chunks: [T1 T2] [T3 T4] [T5 T6] [T7 T8]
- Speech chunks: [A1 ... A10] [A11 ... A20] [silent_speech ... silent_speech] [silent_speech ... silent_speech]
- full-duplex stage2
- 여기서 input speech -> output speech 형태로 학습
- 데이터
- 텍스트 대화 데이터가 대화 시드로 하고 필터링함
- cosyvoice로 텍스트 대화를 합성해서 텍스트-오디오 대화 데이터를 만든다
- User1 → Assistant1 → User2 → Assistant2 ... 형태
- 즉 user가 항상 먼저 시작하는 개념
- user가 말하고 assistant는 항상 바로 응답하게 하지만, assistant 뒤에 user의 응답은 pause에 대한 normal distribution을 줘서 데이터를 구성함
- 실제 대화를 모방하기 위해 MUSAN noise 데이터를 백그라운드에 심어준다고함 (SNR 너무 높지 않게 설정한듯)
- 즉 이 데이터는 speech-to-speech 2채널 데이터임
- 이렇게 noise 넣어주는게 모델 operation이 안정된다고 함
- 추정키로는 그림 2,3에서 사용되는 4-stream, 3-stream 데이터도 이걸 기반으로 사용되는거 같음
- 인퍼런스때 생각해보면 다음과 같이 진행되는 개념인듯
- 모델은 2-stream 최종본이라고 생각하자.
- timestep 1에서 유저가 말한 발화의 음성 토큰 = u11, u12, .., u110 이라하자.
- 오디오 청크가 10이지만 2로 바꿔서 설명하자면 모델에게 u11,u12가 들어가고 그에 해당하는 a11,a12가 생성된다.
- a11,a12는 음성토큰인데 slience 토큰일 수 있음 (sA 라고 하자)
- 그 다음으로는 u11,u12,a11,a12,u13,u14가 모델에 들어가고 a13,a14가 생성되는 식이다.
- 만약에 assistant가 유저의 발화토큰 (여기서는 10)보다 긴 길이면, u11,u12에는 user slience token이 들어가는 것이다.
- 반대로 assistant가 유저의 발하토큰보다 짧게 나온다면(a18까지 나왔다고치면) a19,a110 여기서 assistant slience token이 나오고 입력으로 들어가게 되는것.
- 또 다른 예로 timestep 1에서 assistant가 a113,a114 이렇게 계속나오고 있는데 user가 새로운 입력이 들어오면, 원래는 u113,u114가 slience token이었을텐데, 새로운 음성토큰 u21,u22가 들어가게 되는 개념
- 근데 여기서 어시스턴트가 말하고 있는데 유저가 2번째 발화가 들어갔으니, 이상적으로 어시스턴트는 sA(slience token)이 나와야함
- 즉 sU,sU,a113,a114,u21,u22 뒤에 sA가 나와야함 (user는 10번째에 끝났으니 그뒤는 user slience가 들어가고 있었을것)
- 그리고 a113,a114,u21,u22,sA,sA,u23,u24,... 되다가 유저입력이 끝나면 a21,a22가 나오게 되는 개념
- 물론 모델이 이것을 잘 캐치해야함.
Abstract
전이중(full-duplex) 음성 대화 시스템은 전통적인 턴 기반 대화 시스템에 비해 중요한 발전을 이룬다. 이는 동시에 양방향 통신을 가능하게 하여 인간 간 상호작용을 더 가깝게 모사하기 때문이다. 그러나 전이중 대화 시스템에서 낮은 지연 시간과 자연스러운 상호작용을 달성하는 것은 여전히 중요한 도전 과제이다. 특히 끼어들기, 맞장구, 중첩 발화와 같은 인간 대화의 동역학을 고려할 때 더욱 그렇다.
본 논문에서는 전이중 대화를 위한 새로운 End-to-End GPT 기반 모델인 OmniFlatten을 제안한다. OmniFlatten은 자연스러운 대화에 내재된 복잡한 행동을 낮은 지연 시간으로 효과적으로 모델링할 수 있다. 전이중 통신 능력을 달성하기 위해, 우리는 텍스트 기반 대규모 언어 모델(LLM) 백본을 음성-텍스트 대화 LLM으로 점진적으로 적응시키는 다단계 post-training 방식을 제안한다. 이 모델은 백본 LLM의 구조를 변경하지 않고도 텍스트와 음성을 실시간으로 생성할 수 있다.
학습 과정은 세 단계로 구성된다: modality alignment, half-duplex dialogue learning, full-duplex dialogue learning. 모든 학습 단계에서 우리는 flattening operation을 사용하여 데이터를 표준화한다. 이를 통해 서로 다른 모달리티와 태스크에 대해 학습 방법과 모델 구조를 통일할 수 있다.
우리의 접근법은 효율적이고 자연스러운 end-to-end 전이중 음성 대화 시스템을 개발하기 위한 간단한 모델링 기법과 유망한 연구 방향을 제시한다. OmniFlatten이 생성한 대화 오디오 샘플은 해당 웹사이트에서 확인할 수 있다.
1 Introduction
전통적인 턴 기반 음성 대화 시스템은 반이중(half-duplex) 통신만을 지원한다. 즉, 사용자와 시스템 사이의 통신은 양방향으로 이루어지지만 동시에 이루어지지는 않는다. 이러한 시스템은 많은 실제 응용에서 효과적이지만, 인간 간 대화의 자발적인 특성을 반영하는 끼어들기, 맞장구, 중첩 발화를 처리하는 데에는 종종 한계를 보인다.
반대로, 전이중 음성 대화 시스템은 동시에 양방향 통신을 허용하며, 인간 간 대화의 동역학을 더 가깝게 모사한다. 전이중 음성 대화 시스템은 말하기, 듣기, 생각하기를 동시에 수행함으로써 전통적인 턴 기반 대화 시스템보다 더 자연스럽고 효율적인 상호작용을 가능하게 한다. 그러나 전이중 시스템에서 낮은 지연 시간과 자연스러운 상호작용을 달성하는 것은 여전히 중요한 도전 과제이다.
최근 음성 대화 시스템 개발은 LLM의 발전에 의해 추진되어 왔으며, 대략적으로 collaborative system과 end-to-end system으로 분류할 수 있다. Collaborative system은 LLM 기반 대화 모듈을 외부 ASR 또는 TTS 모듈과 연결하여 음성 이해와 음성 생성을 수행한다. 예를 들어 Qwen-audio는 음성 입력을 처리하고 텍스트를 출력한 뒤, 이를 TTS를 통해 음성 응답으로 변환한다. 반면 일부 end-to-end system은 음성-텍스트 멀티모달 모델을 기반으로 음성-음성 대화를 직접 모델링한다. 그러나 이러한 모델들은 대부분 턴 기반 대화 모델이며 전이중 대화를 지원하지 않는다.
End-to-end 전이중 음성 대화 시스템 개발에서 최근 진전으로는 SyncLM과 오픈소스 Moshi가 있다. 구체적으로 Moshi는 사용자의 음성 입력과 시스템의 텍스트 및 음성 출력을 여러 스트림으로 병렬 모델링함으로써 전이중 대화 처리를 단순화한다. 그러나 이러한 병렬 프레임워크는 GPT 기반 모델에서 기본적으로 지원되지 않기 때문에 acoustic delay와 inner monologue 같은 정교한 설계가 필요하다. 우리의 접근법과 유사하게, SyncLM 또한 실시간 전이중 음성 대화 능력을 얻기 위해 User와 Assistant의 음성 단위가 교차된 chunk를 예측하도록 학습된다. 그러나 SyncLM은 silent speech가 모델의 의미 능력에 미치는 영향을 완화하기 위해 deduplication 전략을 도입하는 반면, 우리는 명시적인 text token prediction을 통해 대화 모델의 의미 능력을 향상시킨다.
전이중 음성 대화 시스템에서 자연스러운 상호작용과 낮은 지연 시간을 달성하기 위한 문제를 해결하기 위해, 우리는 전이중 음성 대화를 위한 새로운 end-to-end GPT 기반 모델인 OmniFlatten을 제안한다. OmniFlatten은 자연 대화에 내재된 복잡한 행동을 효과적으로 학습할 수 있으며, 낮은 지연 시간으로 인간과 유사한 대화를 가능하게 한다.
즉 LLM은 이런 멀티채널을 지원하지 않기 때문에, 교차하여 토큰넣는 방법이 자연스럽게 결합할 수 있다고 보는 듯
우리는 텍스트 기반 LLM 백본을 강건한 음성-텍스트 대화 모델로 적응시키기 위해 다단계 점진적 post-training 방식을 제안한다. 먼저 modality alignment를 수행하고, 이후 대화의 여러 음성 및 텍스트 스트림을 하나의 sequence로 interleaving하고 flattening하여 dialogue learning을 수행한다. 특히 우리의 접근법은 백본 텍스트 기반 LLM의 구조를 변경하지 않으며, 계산 비용이 큰 pre-training에도 의존하지 않는다.
다단계 post-training 과정은 텍스트 LLM 백본에 대해 supervised multi-task fine-tuning을 수행하는 것으로 시작한다. 이를 통해 ASR 및 TTS 태스크를 사용하여 speech-text modality alignment를 달성하고, 멀티모달 LLM을 얻는다. 이 단계는 시스템이 음성과 텍스트를 정확하게 해석하고 생성할 수 있도록 보장하며, 인간-컴퓨터 상호작용을 위한 매끄러운 인터페이스를 형성하는 데 필수적이다.
speech-text LLM을 얻은 후, 우리는 interleaved 및 serialized dialogue를 사용하여 세 개의 점진적 단계로 fine-tuning을 수행한다.
- 첫 번째 단계에서는 사용자 입력과 시스템 출력의 텍스트 및 음성 스트림을 모두 하나의 sequence로 flattening하여 half-duplex dialogue로 모델을 학습한다. 즉, four-stream data를 flattening한다. 이 단계는 모델이 half-duplex dialogue 능력을 학습하도록 하는 예비 단계 역할을 한다.
- 두 번째 단계에서는 사용자 입력 텍스트 스트림을 제거하고, 남은 세 개의 스트림에 대해 fine-grained chunking 및 alignment를 수행한 뒤, chunk를 flattening하여 resulting flatten three-stream data로 모델을 계속 학습한다. 이 단계의 목적은 모델이 실시간 multi-stream prediction 능력을 학습하도록 하여 전이중 통신을 가능하게 하는 것이다.
- 마지막으로, 우리는 입력 음성과 출력 음성만으로 구성된 flatten two-stream data를 만들고, speech-to-speech generation에 집중하도록 모델을 계속 학습한다. 이를 통해 intermediate text에 대한 의존성을 제거하고 지연 시간을 줄이며, 시스템을 실시간 상호작용에 더 가깝게 만든다. 우리의 접근법은 간단하면서도 새로운 모델링 기법을 제시하며, 효율적이고 자연스러운 end-to-end 전이중 대화 시스템 개발을 위한 유망한 연구 방향을 제공한다.
본 연구의 주요 기여는 다음과 같이 요약할 수 있다.
우리는 새로운 End-to-End GPT 기반 모델인 OmniFlatten을 제안한다. OmniFlatten은 낮은 지연 시간으로 자연스러운 인간형 대화에 내재된 복잡한 행동을 효과적으로 모델링할 수 있다. 우리는 텍스트 기반 foundation LLM을 강건한 음성-텍스트 대화 모델로 성공적으로 적응시키는 다단계 post-training 방식을 제안한다. 이를 위해 먼저 ASR 및 TTS 기반 supervised multi-task fine-tuning을 수행하여 speech-text modality alignment를 달성하고, 이후 대화의 음성 및 텍스트 스트림을 세밀하게 chunking한 뒤 하나의 sequence로 flattening하여 모델이 half-duplex 및 full-duplex 통신 능력을 점진적으로 획득하도록 학습한다. 특히 OmniFlatten은 GPT 모델에 어떠한 구조적 변경도 가하지 않으며, 계산 비용이 큰 pre-training에도 의존하지 않는다.
우리의 실험은 modality alignment 단계의 효과를 검증한다. 그 결과 모델은 수용 가능한 ASR 및 TTS 성능을 보인다. 우리는 고성능 LLM을 평가자로 사용하여 OmniFlatten이 생성한 대화 품질을 평가하고, system taking turn과 user taking turn을 포함한 turn-taking 성능 및 runtime efficiency를 평가한다. 결과는 OmniFlatten이 생성한 대화가 합리적인 품질을 보이며, modality alignment와 half-duplex learning 단계가 모두 모델의 full-duplex dialogue 능력을 향상시킨다는 것을 보여준다. OmniFlatten은 user taking turn보다 system taking turn을 훨씬 더 잘 처리하며, system taking turn과 user taking turn의 평균 응답 시간은 각각 160ms와 805ms이다.
3 Methodology
이 절에서는 end-to-end 전이중 대화 모델인 OmniFlatten을 소개한다.
Figure 1에 나타난 것처럼, 우리는 audio tokenizer를 사용하여 대화 내 각 입력 및 출력 음성 스트림을 discrete speech token sequence로 변환한다. 그런 다음 speech token sequence를 text token sequence와 함께 interleave하고, 이를 하나의 sequence로 flatten한다. 우리의 접근법은 modality alignment와 dialogue learning을 통해 텍스트 기반 LLM을 강건한 end-to-end 전이중 음성 대화 모델로 변환하는 다단계 점진적 학습 과정을 사용한다. 이후 하위 절에서는 Audio Tokenization and Detokenization, Modality Alignment, Dialogue Learning을 포함한 핵심 구성 요소를 자세히 설명한다.
User audio at t
- speech tokenizer
- User speech tokens at t
- GPT context에 추가
GPT sees:
- past user speech + past assistant text/speech + current user speech
GPT predicts:
- Assistant text tokens at t
- Assistant speech tokens at t
Predicted assistant tokens
- 다음 timestep context에 추가
- speech detokenizer로 실제 음성 출력
3.1 Audio Tokenization And Detokenization
연속적인 음성 신호를 discrete token sequence로 변환하기 위해, 우리는 CosyVoice에서 사용된 speech tokenizer를 채택한다. 이 speech tokenizer는 multilingual ASR의 supervision을 통해 음성을 semantic token으로 변환할 수 있으므로, 음성 이해와 음성 생성에서의 내용 일관성에 도움이 된다.
이 tokenizer는 encoder와 Vector Quantization, 즉 VQ layer를 사용하여 오디오 신호를 speech token으로 이산화한다. 이때 4096개의 code로 구성된 단일 codebook을 사용한다.
Discrete speech token을 다시 오디오로 변환할 때는 CosyVoice에서 사용한 것과 동일한 Optimal-transport Conditional Flow Matching 모델, 즉 OT-CFM을 채택한다. OT-CFM은 speech token sequence를 Mel spectrogram으로 변환하며, 이 Mel spectrogram은 이후 HifiGAN vocoder를 통해 최종 오디오 출력을 생성하는 데 사용된다.
기존 연구들은 OT-CFM이 diffusion probabilistic model, 즉 DPM보다 더 단순한 gradient, 더 쉬운 학습, 더 빠른 생성 측면에서 우수하다는 것을 보여준다.
- 그림에서 오디오 토크나이저를 통해, 오디오를 토큰변환할때까지 delay가 생기는 구조임
- 즉 오디오 chunk가 일정 쌓이면 이거를 cosyvoice로 토큰화해서 입력으로 넣는 구조
3.2 Modality Alignment
우리는 사전학습된 텍스트 기반 LLM 백본을 post-training하여, 음성 이해와 음성 생성을 수행할 수 있는 speech-text LLM을 얻는 것에서 시작한다. 우리는 낮은 계산 자원 요구량을 위한 작은 크기와, 그 크기대의 모델들 중 경쟁력 있는 성능을 고려하여 Qwen2-0.5B를 base model로 사용한다.
우리는 ASR 및 TTS 태스크를 위해 paired speech-text data를 사용하여 supervised fine-tuning, 즉 SFT를 수행한다. 이 과정은 사전학습된 텍스트 LLM을 speech-text multimodal model로 적응시킨다.
각 speech-text pair <S_seq, T_seq>에 대해, 우리는 다음과 같이 학습 샘플을 구성한다.
ASR Sample:
[ASR][SOS]S_seq[EOS][SOT]T_seq[EOT]
TTS Sample:
[TTS][SOT]T_seq[EOT][SOS]S_seq[EOS]
여기서 [ASR]과 [TTS]는 각각 ASR 및 TTS task ID를 나타낸다. [SOS], [EOS], [SOT], [EOT]는 각각 speech sentence 또는 text sentence의 시작과 끝을 나타내는 special token이다.
우리는 이렇게 정렬된 speech-text multimodal model을 이후의 Dialogue Learning 단계에서 사용한다.
- SFT할때 스페셜 토큰으로 어떤 테스크인지 지정을 하는 개념이고
- loss는 아마도 ASR: T_seq [EOT], TTS: S_seq [EOS] 여기에만 걸리는건가?
3.3 Dialogue Learning
앞서 언급한 speech-text multimodal model을 바탕으로, 우리는 세 단계의 dialogue learning을 수행한다. 여기에는 turn-based dialogue data의 speech stream과 text stream을 모두 사용하는 half-duplex dialogue training, 그리고 speech 및 text sequence의 fine-grained chunking과 alignment에 기반한 full-duplex dialogue training이 포함된다.
구체적으로 full-duplex dialogue training 동안, 우리는 먼저 input text stream을 제거하고 남은 세 개의 stream을 사용하여 학습한다. 이후 output text stream을 추가로 제거하고 남은 두 개의 stream을 사용하여 학습한다. 이는 text information에 대한 의존성을 점진적으로 제거하고, speech-to-speech generation에 집중하며, latency를 줄이기 위한 것이다.
- 점차 텍스트를 없애가는 느낌? 함 살펴보자
세 단계 전체에서 우리는 multi-stream dialogue data를 interleave하고 flatten하여 하나의 sequence로 만든다.
3.3.1 Half-duplex Dialogue Training
Half-duplex dialogue agent는 full-duplex dialogue agent의 특수하고 더 단순한 경우이다. 여기서는 Human과 Assistant가 번갈아 말하며, overlapping speech가 존재하지 않는다. 즉, 화자의 turn 동안 listener는 완전히 silent 상태이다.
Modality alignment를 학습하는 데 사용된 ASR 및 TTS data에는 overlapping speech가 없기 때문에, half-duplex dialogue training은 full-duplex dialogue training보다 aligned multimodal model과 더 일관성이 있다. Full-duplex dialogue training은 모델이 turn-taking, backchannel, overlapping speech를 처리할 것을 요구하기 때문이다.
- half-duplex는 사용자가 말할때 모델이 말안하고 있는 것을 말하는 듯
Curriculum learning의 개념을 채택하여, 우리는 먼저 half-duplex dialogue training을 수행한 뒤 full-duplex dialogue training을 수행한다.
Half-duplex dialogue training 동안, 우리는 모델이 본질적으로 다음 과정을 수행하도록 학습한다.
1. User의 speech token에 대해 ASR을 수행하여 text content를 얻는다.
2. User의 text content를 기반으로 Assistant의 textual response를 생성한다.
3. Assistant의 textual response에 대해 TTS task를 수행하듯 speech token을 예측한다.
이 패턴은 Figure 2에 나타난 것처럼 dialogue의 여러 turn으로 확장된다.
- 즉 [User speech tokens] [User text tokens] [Assistant text tokens] [Assistant speech tokens] 이런식으로 데이터 넣어서 학습한다는 것임
- 기존의 대화 데이터에서 ASR, TTS을 활용해서 이런 쌍을 만드는듯
- 이 데이터로 학습하면 알아서 ASR, text-to-text, TTS을 동시에 배우는 것임
- 이게 그림3로 학습하기전 중간 단계의 pretraining 개념이라 보면 되는거 같음
3.3.2 Full-duplex Dialogue Training
Training on Three-Stream Data
인간과 유사한 full-duplex conversational agent는 낮은 latency로 동시에 양방향 대화를 처리할 수 있어야 한다. Real-time 요구사항을 충족하기 위해, 우리는 four-stream data에서 User text stream을 제거하고 남은 세 개의 stream data를 사용하여 학습한다.
Overlapping speech를 처리하기 위해, 우리는 chunk 기반의 chunking과 relaxed speech-text token alignment를 도입한다. 이 방식에서는 speech와 text 사이의 strict token-level alignment를 요구하지 않는다.
구체적으로, 이 단계의 학습 데이터를 준비하기 위해 우리는 dialogue data의 speech 및 text token sequence를 고정된 chunk size로 나눈다. 그런 다음 three-stream data를 interleave하고 flatten하여 하나의 sequence로 만들어 학습한다. 이때 순서는 다음과 같다.
input speech → output text → output speech- 원래는 input speech -> input text -> output text -> output speech 순서였음
특히 text는 speech보다 효율성이 높기 때문에, text chunk size는 일반적으로 speech chunk size보다 작다. 본 연구에서는 text chunk size를 2 tokens로, speech chunk size를 10 tokens로 설정한다.
- 이게 텍스트-오디오 순서로 토큰이 생성되는 구조인데, 텍스트가 너무 길게 생성하게끔 하면 거의 TTS랑 다른게 없음
- 따라서 적절히 text는 2개 토큰, 오디오는 10개 토큰이 나오도록 데이터를 아래처럼 구성했다는거 같음
- User speech chunk 1: U1 U2 U3 U4 U5 U6 U7 U8 U9 U10
- Assistant text chunk 1: T1 T2
- Assistant speech chunk 1: A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
- User speech chunk 2: U11 U12 U13 U14 U15 U16 U17 U18 U19 U20
- Assistant text chunk 2: T3 T4
- Assistant speech chunk 2: A11 A12 A13 A14 A15 A16 A17 A18 A19 A20
이 접근법은 output text가 speech content보다 과도하게 앞서 나가지 않도록 보장한다. 이를 통해 앞서 언급한 4-stream data format과의 차이를 최소화하는 동시에 TTS task를 최대한 보존한다.
Text content가 끝난 뒤에는 special character인 silent_text_token을 사용하여 text stream을 padding하고, output speech stream의 silent region에는 silent_speech_token을 사용하여 padding한다.
- 근데 실제로 데이터가 텍스트와 오디오 토큰비율이 2:10이 아닐것이기 때문에 slience란 개념을 도입
- Text chunks:
- [T1 T2] [T3 T4] [silent_text silent_text] [silent_text silent_text]
- Speech chunks:
- [A1 ... A10] [A11 ... A20] [A21 ... A30] [A31 ... A40]
- 반대인 경우도 있음
- Text chunks:
- [T1 T2] [T3 T4] [T5 T6] [T7 T8]
- Speech chunks:
- [A1 ... A10] [A11 ... A20] [silent_speech ... silent_speech] [silent_speech ... silent_speech]
Chunked three-stream data에 기반한 이 학습 과정은 Figure 3에 나타나 있다.
- 이것이 그림1에서 말하는 구조임
Training on Two-Stream Data
Latency를 추가로 줄이고 intermediate text에 대한 의존성을 제거하여 speech-to-speech generation에 집중하기 위해, 우리는 output text stream을 추가로 제거하고 input speech stream과 output speech stream만 유지한다.
Chunked two-stream data에 기반한 이 학습 과정은 Figure 4에 나타나 있다.
- 이걸 순차적으로 학습한다는 거지?
4 Experiments
4.1 Data
Modality Alignment Dataset
Modality Alignment 학습 단계(Section 3.2)의 목표는 모델이 speech token과 text token 사이의 대응 관계를 학습하도록 돕고, 두 가지 핵심 능력인 ASR과 TTS를 획득하게 하는 것이다.
이 목표를 달성하기 위해, 우리는 open-source 데이터와 proprietary 데이터를 모두 포함하는 TTS 및 ASR 데이터셋들을 결합한다. Open-source 데이터셋은 Mandarin과 English 데이터를 모두 포함하며, 여기에는 Aishell-3, LibriTTS, TED-LIUM, VoxPopuli, Librispeech, MLS가 포함된다.
추가적으로, 우리는 여러 proprietary ASR 및 TTS 데이터셋을 포함한다. 전체적으로 speech-text modality alignment에 사용된 데이터셋은 약 100K hours의 오디오를 포함한다. 이 데이터셋 중 30%는 open-source data, 70%는 proprietary data이다.
Simulated Voice Chat Dataset
Dialogue Learning(Section 3.3)을 위한 voice chat data를 구성하기 위해, 우리는 dialogue data를 합성하고 시뮬레이션하는 data synthesis and simulation pipeline을 설계한다.
첫째, 우리는 이후 speech synthesis에 사용할 고품질 open-source textual dialogue data를 대량으로 수집한다. 여기에는 Alpaca, Moss, BelleCN, ultraChat이 포함된다.
- 그다음 heuristic rule을 사용하여 TTS에 적합하지 않은 sample을 필터링한다. 예를 들어 code나 mathematical expression 같은 non-text element의 비율이 높은 sample, English 또는 Chinese에서 200 words를 초과하는 sample, rare 또는 unusual symbol을 포함하는 sample을 제거한다. 최종적으로 약 360K multi-turn sessions의 turn-based dialogue, 즉 half-duplex dialogue를 유지한다.
- 텍스트 대화 데이터가 대화 시드로 하고 필터링함
둘째, 우리는 이러한 textual multi-turn turn-based dialogue를 기반으로 pseudo full-duplex voice chat을 만든다. 필터링된 textual dialogue의 각 turn에 대해 CosyVoice를 사용하여 audio를 합성한다. 구체적으로, 먼저 Librispeech와 3DSpeaker 데이터셋에서 speaker embedding을 sampling하여 audio synthesis를 위한 다양한 timbre를 얻는다.
각 turn에 대한 speech를 합성한 후, 우리는 simulation strategy를 사용하여 각 speaker-turn audio를 각 speaker channel의 적절한 time point에 배치한다. 이를 통해 해당 conversation이 자연스러운 interaction을 모방하도록 한다. 즉, 각 speaker가 번갈아 말하고, 때때로 interruption과 pause가 있으며, context가 자연스럽게 이어지도록 만든다. 구체적인 과정은 다음과 같다.
- 우리는 합성된 conversation audio를 두 개의 channel로 구성한다. 첫 번째 channel은 User channel이고, 다른 하나는 Assistant channel이다. Textual conversation은 항상 User로 시작하며, 이후 User와 Assistant가 번갈아 말한다.
- User speech가 끝나면, 다음 Assistant speech를 즉시 시작하여 Assistant가 User에게 prompt하게 답변하도록 한다. Assistant speech가 끝나면, Assistant turn의 end time과 다음 User turn의 start time 사이의 pause duration을 normal distribution에서 sampling한다. 이러한 방식으로 User와 Assistant 사이의 interleaved dialogue에 대응하는 audio를 생성한다.
- User1 → Assistant1 → User2 → Assistant2 ... 형태
- 즉 user가 항상 먼저 시작하는 개념
- user가 말하고 assistant는 항상 바로 응답하게 하지만, assistant 뒤에 user의 응답은 pause에 대한 normal distribution을 줘서 데이터를 구성함
셋째, 실제 환경의 User audio channel을 모방하기 위해, 우리는 MUSAN noise dataset에서 background noise를 sampling하고 이를 User audio channel에 추가한다. Signal-to-noise ratio, 즉 SNR은 15 dB에서 25 dB 사이로 제어한다.
- 이 data synthesis and simulation pipeline을 기반으로, 우리는 총 2,000 hours의 multi-channel spoken dialogue data를 생성한다.
- 이 데이터셋을 기반으로, 전체 데이터의 1%를 validation set, 또 다른 1%를 test set으로 사용하고, 나머지 데이터를 training set으로 사용한다.
실제 대화를 모방하기 위해 MUSAN noise 데이터를 백그라운드에 심어준다고함 (SNR 너무 높지 않게 설정한듯)
- 즉 이 데이터는 speech-to-speech 2채널 데이터임
- 이렇게 noise 넣어주는게 모델 operation이 안정된다고 함
- 추정키로는 그림 2,3에서 사용되는 4-stream, 3-stream 데이터도 이걸 기반으로 사용되는거 같음
4.2 Training and Inference Setup
우리는 QWen2-0.5B를 base model로 사용한다. Modality alignment training 단계에서는 maximum sequence length를 1024 tokens로 설정한다. Dialogue learning 단계에서는 maximum sequence length를 8192 tokens로 확장한다.
우리는 모든 단계에서 standard cross-entropy loss를 training objective로 사용한다. 추가적으로, dialogue learning 단계에서는 User channel에 loss masking을 적용한다. 이는 User channel에 noisy audio input이 존재하기 때문에, 이 operation이 model training의 안정성을 향상시키는 것으로 관찰되었기 때문이다.
Optimizer로는 AdamW를 사용하며, weight decay는 0.1, β1은 0.9, β2는 0.95로 설정한다. Maximum learning rate는 2e-05로 설정하고, warm-up과 cosine-decay를 사용한다.
모델은 5 epochs 동안 학습하며, validation set의 loss를 기준으로 best model을 선택한다. Batch size는 100 million tokens로 설정한다. 우리의 code implementation은 NanoGPT project를 기반으로 한다.
Inference 동안, 모델로부터 Assistant textual response prediction을 얻기 위해, 우리는 test set의 ground truth User channel speech를 fixed speech input으로 사용한다. 그리고 고정된 speech chunk size와 text chunk size에 따라 predicted Assistant speech와 text를 번갈아 채워 넣는다.
4.3 Evaluations 핵심 정리
1. Modality Alignment 이후 ASR/TTS 성능 평가
먼저 저자들은 3.2 Modality Alignment 단계가 실제로 speech-text alignment를 잘 만들었는지 확인하기 위해 ASR과 TTS 성능을 평가한다.
ASR 평가는 speech token을 입력으로 넣고 text를 출력하게 한 뒤, 정답 text와 비교한다. TTS 평가는 text를 입력으로 넣고 speech token을 생성한 뒤, 이를 다시 audio로 합성하고 Whisper Large V3로 인식해서 원래 text와 비교한다. 평가지표는 CER(Character Error Rate)를 사용한다. 단, 논문은 full-duplex 대화 동역학 학습이 주목적이기 때문에 TTS의 표준 음질 평가 지표인 MOS는 사용하지 않았다고 설명한다.
Table 1 결과를 보면, OmniFlatten은 Whisper V3보다는 ASR 성능이 낮다. 예를 들어 Librispeech test_clean에서 OmniFlatten CER은 9.46, Whisper V3는 3.71이다. TTS에서도 GT Speech Tokens보다 성능이 낮지만, 저자들은 이 결과가 Modality Alignment 단계 이후 모델이 어느 정도 ASR/TTS 능력을 갖췄음을 보여준다고 해석한다.
즉 Table 1의 핵심은:
Modality Alignment만으로 SOTA ASR/TTS 수준은 아니지만, 이후 dialogue learning에 사용할 수 있을 정도의 speech understanding/generation 능력은 확보했다는 것.
2. Modality Alignment와 Half-duplex 학습이 full-duplex 대화 성능에 미치는 영향
다음으로 저자들은 Modality Alignment 단계와 Half-duplex Dialogue Learning 단계가 full-duplex 성능에 도움이 되는지를 본다.
여기서는 3-stream full-duplex model, 즉 User speech → Assistant text + Assistant speech 구조에서 생성된 Assistant text response를 평가한다. 최종 2-stream 모델은 Assistant speech만 출력하므로 text LLM으로 평가하기 어렵기 때문에, 3-stream 모델의 text output을 평가 대상으로 사용한다. 평가자는 QWen-max이고, dialogue context와 response를 보고 1~10점으로 fluency/coherence/relevance 등을 평가한다. CE loss도 함께 보고한다.
비교 모델은 다음과 같다.
1. OmniFlatten
= modality alignment + half-duplex training + three-stream full-duplex training
2. OmniFlatten w/o half-duplex training
= modality alignment + three-stream full-duplex training
3. OmniFlatten w/o modality alignment w/o half-duplex training
= Qwen2-0.5B에서 바로 three-stream full-duplex training
4. GT Response
= 정답 Assistant text response
Table 2 결과를 보면, LLM score는 다음 순서로 높다.
GT Response: 7.30685
OmniFlatten: 5.185258
w/o half-duplex training: 5.008698
w/o modality alignment w/o half-duplex training: 4.346218
CE loss도 OmniFlatten이 0.8125로 가장 낮고, modality alignment 없이 바로 학습한 모델은 0.8496으로 더 높다.
즉 Table 2의 핵심은:
Modality Alignment가 가장 크게 기여하고, Half-duplex Dialogue Training도 추가적인 성능 향상을 준다. 따라서 Figure 2 → Figure 3으로 이어지는 progressive training 전략이 full-duplex dialogue 성능에 도움이 된다는 근거로 제시된다.
3. Turn-taking 성능과 runtime efficiency 평가
마지막으로 저자들은 OmniFlatten이 full-duplex 상황에서 언제 말하기 시작하고, 언제 멈추는지를 평가한다.
평가 지표는 두 가지다.
Assistant Turn-taking Acc@K는 User가 의미 있는 발화를 끝낸 뒤, Assistant가 k번째 token 시점에서 non-silence token을 예측하는지를 본다. 즉 User가 말 끝냈을 때 Assistant가 빨리 말하기 시작하는가를 측정한다.
User Turn-taking Acc@K는 Assistant가 말하고 있는 도중 User가 의미 있는 speech token을 입력했을 때, Assistant가 k번째 token 시점에서 silence token을 예측하는지를 본다. 즉 User가 끼어들면 Assistant가 빨리 멈추는가를 측정한다.
Table 3 결과를 보면, speech chunk size 10에서 Assistant Turn-taking Acc는 K=5에서 55.7%, K=10에서 71.3%로 꽤 빠르게 올라간다. 평균 Assistant turn-taking response time은 160ms이다. 반면 User Turn-taking Acc는 K=25에서도 **30.0%**에 그치고, 평균 response time도 805ms로 훨씬 느리다.
저자들은 이 차이를 데이터 특성 때문이라고 설명한다. 이 논문의 pseudo full-duplex 데이터는 turn-based textual dialogue를 기반으로 합성되었기 때문에, 실제 자연 대화에서 나타나는 User interruption, backchannel이 충분히 포함되어 있지 않다. 그래서 Assistant가 “User가 말 끝난 뒤 응답하는 것”은 비교적 잘하지만, “User가 끼어들 때 말하기를 멈추는 것”은 잘 못한다.
또한 chunk size가 5일 때와 10일 때를 비교하면, chunk size 10이 전반적으로 turn-taking accuracy가 더 좋지만, Assistant response time은 chunk size 5의 129ms보다 chunk size 10의 160ms가 더 느리다. 즉 큰 chunk는 더 많은 semantic 정보를 제공해 성능에는 도움이 되지만, latency는 증가시킬 수 있다.
전체적으로 4.3의 핵심은 이거야.
OmniFlatten은 modality alignment를 통해 기본 ASR/TTS 능력을 확보하고, half-duplex를 거친 progressive training으로 full-duplex 대화 품질을 개선한다. Turn-taking에서는 Assistant가 User 발화 종료 후 응답하는 것은 비교적 빠르게 수행하지만, User interruption에 대응해 멈추는 능력은 약하다. 이는 학습 데이터가 실제 full-duplex interaction보다 turn-based dialogue simulation에 가깝기 때문으로 보인다.
인퍼런스때 생각해보면 다음과 같이 진행되는 개념인듯
- 모델은 2-stream 최종본이라고 생각하자.
- timestep 1에서 유저가 말한 발화의 음성 토큰 = u11, u12, .., u110 이라하자.
- 오디오 청크가 10이지만 2로 바꿔서 설명하자면 모델에게 u11,u12가 들어가고 그에 해당하는 a11,a12가 생성된다.
- a11,a12는 음성토큰인데 slience 토큰일 수 있음 (sA 라고 하자)
- 그 다음으로는 u11,u12,a11,a12,u13,u14가 모델에 들어가고 a13,a14가 생성되는 식이다.
- 만약에 assistant가 유저의 발화토큰 (여기서는 10)보다 긴 길이면, u11,u12에는 user slience token이 들어가는 것이다.
- 반대로 assistant가 유저의 발하토큰보다 짧게 나온다면(a18까지 나왔다고치면) a19,a110 여기서 assistant slience token이 나오고 입력으로 들어가게 되는것.
- 또 다른 예로 timestep 1에서 assistant가 a113,a114 이렇게 계속나오고 있는데 user가 새로운 입력이 들어오면, 원래는 u113,u114가 slience token이었을텐데, 새로운 음성토큰 u21,u22가 들어가게 되는 개념
- 근데 여기서 어시스턴트가 말하고 있는데 유저가 2번째 발화가 들어갔으니, 이상적으로 어시스턴트는 sA(slience token)이 나와야함
- 즉 sU,sU,a113,a114,u21,u22 뒤에 sA가 나와야함 (user는 10번째에 끝났으니 그뒤는 user slience가 들어가고 있었을것)
- 그리고 a113,a114,u21,u22,sA,sA,u23,u24,... 되다가 유저입력이 끝나면 a21,a22가 나오게 되는 개념
- 물론 모델이 이것을 잘 캐치해야함.
5 Conclusion and Future Work
본 논문에서는 full-duplex spoken dialogue data를 합성하고, modality alignment와 dialogue learning을 위한 multi-stage progressive training paradigm을 설계하여, end-to-end full-duplex spoken dialogue model인 OmniFlatten을 제안하였다.
우리의 접근법은 backbone text-based LLM의 architecture를 변경하지 않으며, 계산 비용이 큰 pre-training에도 의존하지 않기 때문에, 간단한 full-duplex modeling scheme을 제공한다. 실험 결과는 제안한 접근법이 full-duplex interaction을 처리하는 end-to-end model 개발에 유망함을 보여준다.
향후 연구에서는 data synthesis pipeline을 개선하고, 실제 full-duplex interaction에서 나타나는 복잡한 interaction pattern을 더 잘 시뮬레이션할 계획이다. 예를 들어 User interrupting and taking turn, backchannel과 같은 현상을 더 잘 반영하고자 한다.
추가적으로, vision과 같은 더 많은 modality를 포함하는 full-duplex interaction으로 확장하여, 이 modeling scheme의 더 많은 가능성을 탐구할 예정이다.
Reference
댓글
댓글 쓰기