Open35

【論文】Llama-Omniを読む

1mono21mono2

Abstract

GPT-4oのようなモデルは、音声を通じて大規模言語モデル(LLM)とのリアルタイムインタラクションを可能にし、従来のテキストベースのインタラクションと比べてユーザー体験を大幅に向上させます。しかし、オープンソースのLLMに基づいた音声インタラクションモデルの構築については、まだ十分な探求がなされていません。これに対処するために、私たちはLLaMA-Omniという新しいモデルアーキテクチャを提案します。これは、LLMとの低遅延かつ高品質な音声インタラクションのために設計されています。LLaMA-Omniは、事前学習された音声エンコーダー、音声アダプター、LLM、ストリーミング音声デコーダーを統合しています。音声の文字起こしが不要で、音声指示から直接テキストと音声の応答を同時に生成でき、遅延は非常に低く抑えられています。私たちは最新のLlama-3.1-8B-Instructモデルに基づいてモデルを構築しました。モデルを音声インタラクションシナリオに合わせるために、200Kの音声指示とそれに対応する音声応答を含むInstructS2S-200Kというデータセットを作成しました。実験結果は、従来の音声言語モデルと比較して、LLaMA-Omniが内容とスタイルの両方でより良い応答を提供し、応答遅延が226msと非常に短いことを示しています。さらに、LLaMA-Omniのトレーニングは4つのGPUで3日未満で完了し、将来の音声言語モデルの効率的な開発への道を開いています。

1mono21mono2

Introduction

省略

大規模言語モデル(LLM)、特にChatGPT(OpenAI, 2022)は、強力な汎用タスクソルバーとして登場し、会話を通じて日常生活で人々をサポートすることができるようになりました。しかし、現在のほとんどのLLMはテキストベースのインタラクションのみをサポートしており、テキストの入力と出力が理想的でないシナリオでの応用が制限されています。最近、GPT-4o(OpenAI, 2024)の登場により、音声を通じてLLMとインタラクションすることが可能になり、ユーザーの指示に対して非常に低い遅延で応答し、ユーザー体験を大幅に向上させました。しかし、オープンソースコミュニティでは、LLMに基づく音声インタラクションモデルの構築に関する探求がまだ不足しています。したがって、LLMとの低遅延かつ高品質な音声インタラクションを実現する方法は、解決すべき緊急の課題です。

LLMとの音声インタラクションを可能にする最も簡単な方法は、自動音声認識(ASR)とテキスト音声合成(TTS)モデルに基づくカスケードシステムを使用することです。このシステムでは、ASRモデルがユーザーの音声指示をテキストに書き起こし、TTSモデルがLLMの応答を音声に合成します。しかし、カスケードシステムは逐次的に書き起こされたテキスト、テキスト応答、音声応答を出力するため、全体のシステムは遅延が高くなる傾向があります。それに対して、音声をトークンに離散化し、LLMの語彙を拡張して音声の入力と出力をサポートするマルチモーダル音声言語モデルが提案されています(Zhang et al., 2023; Rubenstein et al., 2023)。このような音声言語モデルは、理論的には音声指示から中間テキストを生成せずに、非常に低い応答遅延を実現する音声を直接生成することができます。

しかし、実際には、直接音声から音声への生成は、関与する複雑なマッピングのために難しいことがあるため、より高い生成品質を達成するために中間テキストを生成することが一般的です(Zhang et al., 2023)。ただし、これにより応答遅延が犠牲になります。

本論文では、低遅延かつ高品質なLLMとのインタラクションを可能にする新しいモデルアーキテクチャ「LLaMA-Omni」を提案します。LLaMA-Omniは、音声エンコーダー、音声アダプター、LLM、およびストリーミング音声デコーダーで構成されています。ユーザーの音声指示は音声エンコーダーによってエンコードされ、その後音声アダプターを通じてLLMに入力されます。LLMは、音声指示から直接テキスト応答をデコードし、最初に音声をテキストに書き起こすことはありません。音声デコーダーは非自己回帰型(NAR)のストリーミングトランスフォーマー(Ma et al., 2023)で、LLMの出力隠れ状態を入力として受け取り、接続主義的時間分類(CTC; Graves et al., 2006a)を使用して音声応答に対応する離散ユニットのシーケンスを予測します。推論中、LLMが自己回帰的にテキスト応答を生成する際、音声デコーダーは同時に対応する離散ユニットを生成します。音声インタラクションシナリオの特性により適合させるために、既存のテキスト指示データを書き換え、音声合成を行うことで「InstructS2S-200K」というデータセットを構築しました。実験結果は、LLaMA-Omniが226msという低遅延で高品質なテキストと音声応答を同時に生成できることを示しています。さらに、SpeechGPT(Zhang et al., 2023)などの以前の音声言語モデルと比較して、LLaMA-Omniは必要なトレーニングデータと計算リソースを大幅に削減し、最新のLLMに基づく強力な音声インタラクションモデルの効率的な開発を可能にします。

1mono21mono2

音声認識(ASR)→LLM→音声合成(TTS)で順番に処理していくモデルをカスケードシステム(cascaded system)と呼んでいる。

1mono21mono2

2 Model: LLaMa-Omni

このセクションでは、LLaMA-Omniのモデルアーキテクチャを紹介します。図2に示されているように、音声エンコーダー、音声アダプター、LLM、音声デコーダーで構成されています。ユーザーの音声指示、テキスト応答、音声応答をそれぞれX^SY^TY^Sと表記します。

図2
図2

2.1 スピーチエンコーダー

私たちは、Whisper-large-v3^2(Radford et al., 2023)のエンコーダーを音声エンコーダー\Epsilonとして使用します。Whisperは、大量の音声データで訓練された汎用音声認識モデルで、そのエンコーダーは音声から意味のある表現を抽出することができます。具体的には、ユーザーの音声指示X^Sに対して、エンコードされた音声表現はH=\Epsilon(X^S)で与えられ、H = [h1, ..., hN]は長さNの音声表現シーケンスです。私たちは、トレーニングプロセス全体を通じて音声エンコーダーのパラメータを固定のままにしています。

2.2 スピーチアダプター

LLMが入力音声を理解できるように、音声表現をLLMの埋め込み空間にマッピングするトレーニング可能な音声アダプタAを組み込みます。Ma et al. (2024c)に従って、私たちの音声アダプタはまず音声表現Hをダウンサンプリングしてシーケンスの長さを短くします。具体的には、k個の連続したフレームを特徴次元に沿って連結します。

\mathbf{H'} = \left[ \mathbf{h'}_1, \dots, \mathbf{h'}_{N/k} \right], \text{ where } \mathbf{h'}_i = \left[ \mathbf{h}_{k \times (i-1) + 1} \oplus \mathbf{h}_{k \times (i-1) + 2} \oplus \dots \oplus \mathbf{h}_{k \times i} \right].

次に、H′は線形層の間にReLU活性化を持つ2層パーセプトロンを通過し、最終的な音声表現Sが得られます。上記のプロセスは以下のように形式化できます。

\mathbf{S} = \mathcal{A}(\mathbf{H}) = \text{Linear}(\text{ReLU}(\text{Linear}(\text{DownSample}(\mathbf{H})))).

2.3 大規模言語モデル

私たちは、現在最先端のオープンソースLLMであるLlama-3.1-8B-Instruct3(Dubey et al., 2024)をLLM Mとして使用しています。これは強力な推論能力を持ち、人間の好みによく合っています。プロンプトテンプレートP(·)は図3に示されています。音声表現シーケンス S<speech> に対応する位置に埋め込まれ、その後、全シーケンスP(S)がLLMに入力されます。最後に、LLMは音声指示に基づいて自動回帰的にテキスト応答Y^T = [y^T_1 , ..., y^T_M ]を生成し、クロスエントロピー損失を用いて訓練されます。

\mathcal{L}_{\text{LLM}} = - \sum_{i=1}^{M} \log P\left( y_i^T \mid \mathcal{P}(S), Y_{<i}^T \right).
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
You are a helpful language and speech assistant. You are able to
understand the speech content that the user provides, and assist the
user with a variety of tasks using natural language.<|eot_id|>
<|start_header_id|>user<|end_header_id|>
<speech>
Please answer the questions in the user’s input speech.<|eot_id|>
<|start_header_id|>assistant<|end_header_id|>

図3

1mono21mono2

スピーチアダプターの実際の実装
アダプターの役割は、「音声特徴量をLLMモデルの隠れ層の次元に合わせること」

import torch
import torch.nn as nn


class EncoderProjectorConcat(nn.Module):
    def __init__(self, config):
        super().__init__()
        self.k = config.speech_encoder_ds_rate
        self.encoder_dim = config.speech_encoder_hidden_size
        self.llm_dim = config.hidden_size
        self.linear1 = nn.Linear(self.encoder_dim * self.k, 2048)
        self.relu = nn.ReLU()
        self.linear2 = nn.Linear(2048, config.hidden_size)

    def forward(self, x):
        batch_size, seq_len, dim = x.size()
        num_frames_to_discard = seq_len % self.k
        if num_frames_to_discard > 0:
            x = x[:, :-num_frames_to_discard, :]
        seq_len = x.size(1)
        
        x = x.contiguous()
        x = x.view(batch_size, seq_len // self.k, dim * self.k)
        x = self.linear1(x)
        x = self.relu(x)
        x = self.linear2(x)
        return x

1mono21mono2

2.4 スピーチデコーダー

音声応答Y^Sのために、まず Zhang et al. (2023) に従って音声を離散的な単位に分割します。具体的には、事前学習済みの HuBERT (Hsu et al., 2021) モデルを使って音声の連続的な表現を抽出し、次にこれらの表現を K-means モデルを使って離散的なクラスタインデックスに変換します。その後、連続する同一のインデックスを一つの単位に統合し、最終的な離散単位列Y^U = [y^U_1 , ..., y^U_L ] を得ます。ここで、y^U_i ∈ {0, 1, ..., K − 1}であり、∀1 ≤ i ≤ L です。K はクラスタの数、L は離散単位列の長さです。離散単位は、追加の単位ベースのボコーダー V (Polyak et al., 2021) を使って波形に変換できます。

テキスト応答と同時に音声応答を生成するために、LLM の後にストリーミング音声デコーダー D を追加します。これは、LLaMA (Dubey et al., 2024) と同じアーキテクチャを持ついくつかの標準的な Transformer (Vaswani et al., 2017) レイヤーで構成されており、それぞれが因果自己注意モジュールとフィードフォワードネットワークを含んでいます。Ma et al. (2024a); Zhang et al. (2024b) と同様に、音声デコーダーは非自己回帰的な方法で動作し、LLM からの出力隠れ状態を入力として取り込み、音声応答に対応する離散単位列を生成します。具体的には、テキスト応答に対応する出力隠れ状態はC = [c_1, ..., c_M ] と表され、c_i = M(P(S), Y^T_{<i}) となります。最初に、各隠れ状態をλの係数でチャンクにアップサンプルし、その結果アップサンプリングされた隠れ状態のシーケンス \hat{C} = \left[ \hat{\mathbf{c}}_1, \dots, \hat{\mathbf{c}}_{\lambda \cdot M} \right] で、ここでは\hat{c_i} = c_{⌊i/λ⌋} となります。次に、\hat{C} は音声デコーダ D に入力され、出力の隠れ状態シーケンスは O = [o1, ..., o_{λ·M}] と表されます。私たちは接続主義的時間分類 (connectionist temporal classification; CTC; Graves et al., 2006a) を使って O を離散ユニットシーケンス Y^U に合わせます。具体的には、CTC は出力空間を特別なブランクトークン ϵ で拡張します。

P(a_i \mid \mathbf{O}) = \text{softmax}(\mathbf{W}o_i + \mathbf{b})[a_i], \forall a_i \in \{0, 1, \dots, K - 1, \epsilon\},

ここで、

  • \mathbf{W} \in \mathbb{R}^{(K+1) \times d} および \mathbf{b} \in \mathbb{R}^{K+1} は線形層の重みとバイアスを表しており、
  • シーケンスA = [a_1, \dots, a_{\lambda \cdot M}]アライメントとして知られています。

入力と出力間の可変長マッピングをモデル化するために、CTC (Connectionist Temporal Classification) は折り畳み関数\beta(A) を導入します。この関数はまず、アライメントA 内のすべての連続する重複トークンをマージし、その後すべての空白トークン \epsilon を削除します。たとえば、次のように表現されます: \beta([1, 1, 2, \epsilon, 2, 2, 3]) = [1, 2, 2, 3]
トレーニング中、CTC は可能なすべてのアライメントに対して周辺化を行います。次のように表されます。

\mathcal{L}_{\text{CTC}} = -\log P(Y^U \mid \mathbf{O}) = -\log \sum_{A \in \beta^{-1}(Y^U)} P(A \mid \mathbf{O}) = -\log \sum_{A \in \beta^{-1}(Y^U)} \prod_{i=1}^{\lambda \cdot M} P(a_i \mid \mathbf{O}).

ここで、\beta^{-1}(Y^U) は長さ \lambda \cdot M のすべての可能なアライメントを表し、Y^U に結合されます。アライメントは非自己回帰的にモデル化されます。推論中、最良のアライメントA^* = \arg\max_A P(A | O)を選択し、collapsing function を適用して、離散的な単位列\beta(A^*)を得て、それをボコーダーに入力して波形を合成します。

1mono21mono2

HuBERT

HuBERT(Hidden Unit BERT)BERTのようなmasked predictionタスクとiterative trainingを組み合わせた音声向けの表現学習モデルです。モデルの構造は、図 1に示すようにCNNとTransformerの各エンコーダから構成されており、次の手順で学習を行います。

音声はまずMFCC(メル周波数ケプストラム係数)と呼ばれる音声特徴量をフレームごとに抽出する

MFCCの解説
https://qiita.com/martin-d28jp-love/items/34161f2facb80edd999f
メル周波数は、人間の聴覚に適応した音声変換。高音は聞き取りにくく、低音は高め(=聞き取りやすく)なっている。

k-means法によって、音声をクラスタリングすることで、離散ラベル(擬似ラベル)の系列を生成する。
離散ラベル:イメージは連続データをヒストグラムにする。10歳、11歳、12歳、…、40歳のようなデータがあったとして、10代、20代,…, 40代とラベル化する
k-meansで付けたラベルを擬似教師データとしてTransformerを学習させる。実際の教師データがなくても学習可能

具体的なイメージ
色の例え:たとえば、色のデータが大量にあって、その色に名前(赤、青、緑など)が付いていないとします。k-meansクラスタリングを使って色をグループ分けすると、似た色同士が同じクラスタに分類されます。このクラスタ番号を擬似ラベルとして扱うことで、色の名前がなくても色の分類ができます。

次に音声をCNNエンコーダに入力し、一つ目の埋め込み表現xを取得。

次に、埋め込み表現xはランダムにマスクされてTransformerに入力され、2つ目の埋め込み表現zを生成する。

最後にzと離散ラベルを用いて、マスクされたトークンを予想するように学習される。

推論時には、k-meansやマスクは使用しない。

by catgpt-4o

  1. 疑似ラベルと単語の関係:
    • 得られたクラスタ(疑似ラベル)は、直接的に特定の単語や音素を表しているわけではありません。
    • これらは音声信号の統計的なパターンを捉えたものであり、モデルが音声データの構造を学習するための手がかりとなります。
  2. 学習と推論における役割:
    • 学習時には、これらの疑似ラベルを用いてマスク予測タスクを行い、モデルが音声の内部構造を学習します。
    • 推論時には、k-meansによるクラスタリングや疑似ラベルは使用せず、学習済みのモデルをそのまま用いて入力音声から結果を生成します。
1mono21mono2

CTC, Connectionist Temporal Classification

CTC 誤差関数を用いる音声認識システムでは、対数メルスペクトルなどの音響特徴量を受け取り、音素や文字などを出力する

音響モデルにはRNNなどを使用するが、そのまま使用すると入力と出力が同じ長さになってしまう。一般的に音声>音素や文字なので、対処が必要

CTCでは、出力ラベルにblankを追加する。その処理は縮約関数 B:L^′T↦L≤T として定義します。

  • まず、入力において同じラベルが連続している箇所を 1 つにまとめる(例:aa--aaa-bb-a-a-b-
  • 次に、ブランクを削除する(例:a-a-b-aab

この縮約によって、音響モデルの出力を短くすることができます。

したがって、音響モデルは「縮約すると正解ラベル列になるような、ブランクを含みうるラベル列(音声フレームと同じ長さ)」を出力することを目指します。

https://tech.retrieva.jp/entry/2021/06/25/183135

1mono21mono2

1. 損失関数 \mathcal{L}_{CTC}

\mathcal{L}_{\text{CTC}} = -\log P(Y^U \mid \mathbf{O})

モデルが出力シーケンス O から、ターゲットシーケンス Y^U (目標とする離散単位列)を生成する確率。

2. 周辺化(すべてのアライメントを考慮する)

P(Y^U \mid \mathbf{O}) = \sum_{A \in \beta^{-1}(Y^U)} P(A \mid \mathbf{O})
  • \sum_{A \in \beta^{-1}(Y^U)}: ターゲットシーケンス Y^U に対応する全てのアライメント A を考慮した確率の総和。CTCでは、出力シーケンスが1つのターゲットシーケンスに対して複数のアライメントを持つことが可能。
  • \beta^{-1}(Y^U): ターゲットシーケンス Y^U に対応する全てのアライメント A を示す割合。折り畳み関数 \beta によってアライメント A がターゲット Y^U に縮約される。例えば、アライメント [1, 1, 2, \epsilon, 2, 3] はターゲットシーケンス [1, 2, 2, 3] に対応する。

3. アライメントごとの確率の計算

P(A \mid \mathbf{O}) = \prod_{i=1}^{\lambda \cdot M} P(a_i \mid \mathbf{O}).

\prod_{i=1}^{\lambda \cdot M}: 各時刻 i において、モデルがアライメント a_i を生成する確率の積。ここで \lambda \cdot M はシーケンスの長さ(隠れ状態の長さにアップサンプリング係数 \lambda を掛けたもの)を表している。積を取ることで、全ての時間ステップでの確率を連続して考慮している。

1mono21mono2

図2
図2

2.5 トレーニング

図2に示されているように、LLaMA-Omniのトレーニングには2段階の戦略を採用しています。最初の段階では、音声指示から直接テキスト応答を生成するようにモデルをトレーニングします。具体的には、音声エンコーダーは固定され、音声アダプターとLLMが式(3)の目標L_{LLM}を使用してトレーニングされますこの段階では音声デコーダーはトレーニングに関与しません。次の段階では、音声応答を生成するようにモデルをトレーニングします。この段階では、音声エンコーダー、音声アダプター、およびLLMはすべて固定され、音声デコーダーのみが式(5)の目標L_{CTC}を使用してトレーニングされます。

1mono21mono2

Vocoderの記述がなかったので自己解釈

4章より、VocoderはHiFi-GANを使用している。
HIFi-GANの特徴は、メルスペクトグラム(音声の中間表現)から生の波形を生成できること。
多くのニューラル音声合成モデルは、以下の2段階のパイプラインを採用している。

  1. テキストからメルスペクトグラムなどの中間表現を予測
  2. 中間表現から生の波形を合成

HiFi-GANは第2段階目のモデル設計に焦点を当てたモデルである。

解説記事
https://ai-scholar.tech/articles/speech-synthesis/hifi-gan

GItHub
https://github.com/jik876/hifi-gan

1mono21mono2

2.6 推論

推論中、LLMは音声指示に基づいてテキスト応答を自己回帰的に生成します。その間、音声デコーダーが因果注意を使用するため、LLMがテキスト応答のプレフィックス Y^T_{≤i} を生成すると、対応するアップサンプルされた隠れ状態 \hat{C}_{≤λ·i} を音声デコーダーに入力して部分的なアライメント A_{≤λ·i} を生成できます。これにより生成されたテキストプレフィックスに対応する離散単位が得られます。音声波形のストリーミング合成をさらに可能にするため、生成された単位の数が事前定義されたチャンクサイズ に達したとき、この単位セグメントをボコーダーに入力して音声セグメントを合成し、ユーザーに即座に再生します。その結果、ユーザーはテキスト応答が完全に生成されるのを待たずに音声応答を聞き始めることができ、テキスト応答の長さに影響されない低遅延応答が実現します。アルゴリズム1は上記のプロセスを説明しています。さらに、音声デコーダーが非自己回帰的なモデリングを使用するため、各テキストトークン y^T_i に対応するアライメント、具体的には A_{λ·(i−1)+1:λ·i} がチャンク内で並列に生成されます。したがって、テキストと音声を同時に生成するデコーディング速度は、テキストのみを生成する速度と大差ありません。

1mono21mono2

プロセスとしてはこんな感じ?

入力音声→Encoder(Whisper)で音声特徴量に変換→Adaptorでダウンサンプリング&LLMの次元数に合わせる→LLMモデルに入力→ここで分岐
分岐1→テキストをそのまま出力
分岐2→テキスト表現→アップサンプリング→デコーダー(HUBART)によって離散ラベルを取得(離散ラベルはメルスペクトグラム?)→CTCによって、ラベルを纏める→Vocoder(HiFi-GAN)でメルスペクトグラムを音声波形に変換

TODO: c_iを理解する

1mono21mono2

3. スピーチ指示データの構築: INSTRUCTS2S-200K

LLaMA-Omniをトレーニングするには、<音声指示、テキスト応答、音声応答>からなるトリプレットデータが必要です。しかし、公開されている指示データのほとんどはテキスト形式です。そこで、既存のテキスト指示データを基にして、音声指示データを次のプロセスで構築します。

ステップ1: 指示の書き換え
音声入力はテキスト入力とは異なる特性を持っているので、以下のルールに従ってテキスト指示を再構成します:
(1) 自然な話し言葉のパターンをシミュレートするために、「ねえ」、「そう」、「あのさ」、「えっと」などの適切なフィラーを加えます。
(2) 指示内の非テキスト記号(数字など)を、それに対応する話し言葉の形に変換して、TTSによる正しい合成を保証します。
(3) 指示を過剰な言葉を使わずに比較的簡潔に修正します。これらのルールに従って指示を再構成するために、Llama-3-70B-Instruct4モデルを使用します。プロンプトは付録Aにあります。

ステップ2: 応答生成
音声インタラクションでは、テキスト指示からの既存の応答は音声指示の応答として直接使用するのには適していません。これは、テキストベースのインタラクションでは、モデルが長い応答を生成し、複雑な文を使用し、場合によっては順序付きリストや括弧のような非言語要素を含む傾向があるからです。しかし、音声インタラクションでは、簡潔でありながら情報が豊富な応答が一般的に好まれます(匿名、2024年)。したがって、Llama-3-70B-Instructモデルを使用して、以下のルールに従って音声指示の応答を生成します:
(1) 応答には、TTSモデルによって合成できない内容(括弧、順序付きリストなど)を含めないこと。
(2) 応答は非常に簡潔で、要点を押さえ、長い説明を避けること。プロンプトは付録にあります。

ステップ3: 音声合成
音声インタラクションに適した指示と応答を取得した後、それらをTTSモデルを使って音声に変換する必要があります。指示については、合成された音声がより自然に聞こえるように、CosyVoice-300M-SFT(Du et al., 2024)モデルを使用し、各指示に対して男性または女性の声をランダムに選びます。応答については、LJSpeech(Ito & Johnson, 2017)データセットで訓練されたVITS(Kim et al., 2021)モデルを使用して、応答を標準的な声に合成します。 基本的なテキスト指示については、Alpacaデータセット(Taori et al., 2023)から約50Kの指示を収集し、幅広いトピックをカバーしています。さらに、主に世界に関する質問で構成されたUltraChatデータセット(Ding et al., 2023)から約150Kの指示を集めます。UltraChatは大規模なマルチターン会話データセットですが、最初の150Kエントリーのみを選択し、最初のラウンドの指示だけを使用します。上記のデータセットとデータ処理パイプラインを使用して、最終的に200Kの音声指示データを取得し、InstructS2S-200Kと呼ばれます。

1mono21mono2

CosyVoice-300M-SFT

https://huggingface.co/FunAudioLLM/CosyVoice-300M-SFT

VITS
https://github.com/jaywalnut310/vits

Alpaca dataset
OpenAI のtext-davinci-003によって生成された 52,000 の命令とデモンストレーションのデータセット。text-to-textのインストラクションデータ。
https://huggingface.co/datasets/tatsu-lab/alpaca

UltraChat

https://huggingface.co/datasets/stingning/ultrachat

実際のデータ

[ "How versatile are baggy clothes in terms of styling and accessorizing?", "As an AI language model, I cannot wear clothes or accessories, but I can provide tips on styling and accessorizing baggy clothes. Here are some ideas:\n\n1. Play with proportions: Pair baggy pants or a loose blouse with a fitted top or skinny jeans to balance out the volume.\n\n2. Belt it: Cinch a loose dress or sweater with a statement belt to create shape and define your waist.\n\n3. Layer up: Layer a baggy sweatshirt or hoodie over a collared shirt or turtleneck, and add a scarf or statement necklace for extra flair.\n\n4. Experiment with footwear: Try pairing baggy pants or a skirt with heels or ankle boots for a dressier look, or sneakers or loafers for a casual yet stylish ensemble.\n\n5. Mix and match textures: Combine different materials and textures, such as leather, denim, or knitwear, for a more interesting and dynamic outfit.\n\nOverall, baggy clothes can be versatile and fun to style and accessorize. It's all about finding the right balance, playing with proportions, and experimenting with different elements to create a unique and flattering look.", "Can you recommend some specific accessories that pair well with baggy clothes, like jewelry or hats?", "Sure, here are some accessories that pair well with baggy clothes:\n\n1. Statement jewelry: Bold earrings, chunky necklaces, and oversized bracelets can draw attention to your outfit and add some sparkle.\n\n2. Hats: A beanie, fedora, or wide-brimmed hat can add some personality and style to your look, especially in the colder months.\n\n3. Belts: A statement belt can cinch a loose dress or jacket and create a flattering silhouette.\n\n4. Scarves: A colorful or patterned scarf can add some texture and interest to a simple outfit, especially in the fall and winter.\n\n5. Sneakers: Chunky or platform sneakers can give a fun and edgy vibe to a baggy outfit, while still keeping it comfortable.\n\n6. Sunglasses: Oversized, mirrored, or colored sunglasses can add some flair and protect your eyes from the sun.\n\nRemember, when pairing accessories with baggy clothes, it's important to consider the overall balance and proportion of the outfit. You want to create a cohesive and polished look, without overwhelming the baggy pieces.", "What about handbags? Are there any types or styles that would complement baggy clothes well?", "Certainly! When it comes to pairing handbags with baggy clothes, you have plenty of options. Here are a few types and styles that would complement baggy clothes well:\n\n1. Crossbody bags: A crossbody bag can be a great choice for a baggy outfit, as it adds a bit of structure and definition to the overall look, but without being too heavy or bulky. Consider a statement crossbody bag in a bright color or bold pattern to stand out against neutral or monochromatic baggy clothes.\n\n2. Tote bags: A tote bag can be a practical and stylish option for carrying your everyday essentials while still maintaining the casual, relaxed look of a baggy outfit. Look for a tote bag in a durable material like leather or canvas, with plenty of compartments and pockets to keep your items organized.\n\n3. Hobo bags: A slouchy hobo bag can balance out the volume of baggy clothes and add some sophistication to the outfit. Opt for a neutral color like black, brown, or navy to keep the look classic.\n\n4. Backpacks: A backpack can be a fun and stylish alternative to a traditional handbag. Choose a backpack with interesting details like metallic hardware, fringe, or embroidery to add some personality to your outfit.\n\nOverall, when choosing a handbag to pair with baggy clothes, consider the balance and proportion of the outfit. The bag should add some structure and polish to the look, while still allowing the baggy pieces to shine.", "What about jewelry for baggy clothing? I've always struggled to pair them together. Any tips?", "Sure, here are some tips on how to pair jewelry with baggy clothing:\n\n1. Chunky statement jewelry: If you're wearing a baggy dress or oversized sweater, consider pairing it with bold, chunky statement jewelry like a statement necklace or bracelet. The contrast between the voluminous clothing and the statement jewelry will create a standout look.\n\n2. Long necklaces: Long necklaces can be a great choice for baggy clothing as they help to add vertical lines, which can create balance in the outfit. Try layering a few necklaces of different lengths for a multi-dimensional look.\n\n3. Oversized earrings: Oversized earrings can be a fun and playful addition to baggy outfits. They draw attention to the face and can help to make a statement, even when the clothing is loose-fitting. Consider wearing large hoops, tassel earrings or fringe earrings.\n\n4. Minimalist jewelry: Minimalist jewelry like stud earrings, small pendants or slim bangles can complement a baggy look without overpowering it. They add just the right amount of polish and sophistication to elevate the outfit.\n\n5. Rings: Rings are a great way to bring attention to your hands when wearing baggy clothing such as long sleeves or oversized sweaters. Stack a mix of rings to create a fun and unique look.\n\nIt's important to remember that with baggy clothing, the focus is on volume and comfort. Keep your jewelry simple and complementary to avoid overpowering the outfit. You can try layering different pieces, playing with textures, or choosing a singular statement piece to add interest to your look.", "Can you suggest some funky and colorful accessories that would work well with baggy clothing for a beachy, bohemian vibe? I love to stand out and express myself through my fashion choices.", "Absolutely! Here are some funky and colorful accessories that you could pair with baggy clothing for a beachy, bohemian vibe:\n\n1. Beaded necklaces: Colorful, beaded necklaces can add a playful and bohemian touch to baggy clothing. Look for necklaces that feature a mix of materials like wood, stone, and metal.\n\n2. Patterned scarves: Lightweight, patterned scarves are perfect for adding color and texture to a beachy outfit. Look for scarves with bold prints like paisley or ikat, and wear them as a headscarf, around your neck, or tied to your bag.\n\n3. Vibrantly-colored hair accessories: Playful hair accessories like hairbands, headwraps, and hair clips can add a pop of color and fun to your outfit. Look for hair accessories that feature bright colors, patterns or prints.\n\n4. Beaded anklets: Delicate beaded anklets or boho-style foot jewelry can add some interest to bare feet and complement a relaxed, beachy outfit perfectly.\n\n5. Oversized sunglasses: The right pair of oversized, colorful sunglasses adds some glamour and fun to your beachy outfit.\n\n6. Unique bags or purses: A funky, bright-colored or embroidered bag can complement your beachy outfit while also being functional. Look for bags that feature fringe, tassels or embroidery.\n\nWhen it comes to a beachy, bohemian vibe, don't be afraid to mix and match patterns, prints and colors, and layers to express yourself through fashion. Just make sure all of the accessories complement each other, and don't overpower the outfit." ]

1mono21mono2

テキストデータセットをAlpaca datasetとUltraChatからそれぞれ52k, 150k取得し、入力音声をCosyVoice-300M-SFTモデルで、出力音声をVITSで作成し、それらをまとめた「音声指示、テキスト応答、音声応答」からなるトリプレットデータをInstructS2S-200Kとしている。

1mono21mono2

4. 実験

4.1 実験設定

データセット
トレーニングデータには、セクション3で言及されたInstructS2S-200Kデータセットを使用します。このデータセットには、20万件の音声指示データが含まれています。ターゲット音声に対応する離散ユニットを抽出するために、HuBERT特徴から1000のクラスターを学習した事前学習済みのK-means量子化器を使用します。離散ユニットを波形に合成するために、事前学習済みのHiFi-GANボコーダー(Kong et al., 2020; Polyak et al., 2021)を使用します。評価データには、Alpaca-Evalから2つのサブセット(Li et al., 2023)を選択します:役立つベースとビクーニャで、これらの質問は音声インタラクションシナリオにより適しています。数学やコードに関連する質問は削除し、合計199の指示が残ります。音声バージョンを取得するために、CosyVoice-300M-SFTモデルを使用して指示を音声に合成します。このテストセットは、以下のセクションでInstructS2S-Evalと呼びます。

モデル設定
Whisper-large-v3のエンコーダーを音声エンコーダーとして使用し、Llama-3.1-8B-InstructをLLMとして使用します。音声アダプターは、音声表現に対して5倍のダウンサンプリングを行います。音声デコーダーは、LLaMAと同じアーキテクチャの2つのTransformer層で構成され、隠れ次元は4096、注意ヘッドは32、フィードフォワードネットワークの次元は11008で、425Mのパラメータを含みます。アップサンプル係数λは25に設定されています。ボコーダーに入力する最小ユニットチャンクサイズΩは、主実験ではΩ = +∞に設定しており、音声合成のためにボコーダーに入力する前に、全ユニットシーケンスが生成されるのを待ちます。今後の実験では、Ωの値を調整することで応答遅延を制御できる方法や、遅延と音声品質のトレードオフについて分析します。

トレーニング
LLaMA-Omniのトレーニングは、2段階のトレーニングプロセスに従います。最初の段階では、音声アダプターとLLMをバッチサイズ32で3エポック訓練します。コサイン学習率スケジューラーを使用し、最初の3%のステップでウォームアップし、ピーク学習率は2e-5に設定します。2段階目では、音声デコーダーを訓練し、最初の段階と同じバッチサイズ、ステップ数、学習率スケジューラーを使用しますが、ピーク学習率は2e-4に設定します。全体のトレーニングプロセスは、4つのNVIDIA L40 GPUで約65時間かかります。

1mono21mono2

4.2 評価

LLaMA-Omniは音声指示に基づいてテキストと音声の両方の応答を生成できるため、モデルのパフォーマンスを2つのタスクで評価します:音声からテキストへの指示フォロー(speech-to-text instruction-following, S2TIF)と音声から音声への指示フォロー(speech-to-speech instruction-following, S2SIF)です。再現性のある実験結果を確保するために、貪欲法(greedy search)を使用します。モデルは以下の観点から評価されます:

ChatGPTスコア
モデルが音声指示に従う能力を評価するために、GPT-4o(OpenAI, 2024)を使用してモデルの応答にスコアを付けます。S2TIFタスクの場合、スコアリングは音声指示の転写テキストとモデルのテキスト応答に基づいて行います。S2SIFタスクの場合、まずWhisper-large-v3モデルを使用してモデルの音声応答をテキストに転写し、その後S2TIFタスクと同様の方法でスコアを付けます。GPT-4oはコンテンツスタイルの2つの観点でスコアを付けます。コンテンツスコアはモデルの応答がユーザーの指示に適切に対応しているかどうかを評価し、スタイルスコアはモデルの応答スタイルが音声インタラクションシナリオに適しているかどうかを評価します。詳細なプロンプトは付録Aにあります。

音声-テキストの整合性
テキスト応答と音声応答の整合性を評価するために、Whisper-large-v3モデルを使用して音声応答をテキストに転写し、転写されたテキストとテキスト応答の間の単語誤り率(WER)と文字誤り率(CER)を計算します。これらの指標をそれぞれASR-WERおよびASR-CERと呼びます。

スピーチ品質
生成されたスピーチの品質を評価するために、UTMOS11(佐伯ら、2022)と呼ばれる平均意見スコア(MOS)予測モデルを利用しています。このモデルは、スピーチのMOSスコアを予測して自然さを評価することができます。この指標をUTMOSスコアと呼びます。

レスポンス遅延
レイテンシはスピーチインタラクションモデルにとって重要な指標で、スピーチ指示の入力とスピーチレスポンスの開始の間の時間間隔を指します。これはユーザーエクスペリエンスに大きな影響を与えます。さらに、スピーチレスポンスが始まるときにテキストレスポンスで既に生成された単語の数を計算します。これを遅延単語と呼びます。

1mono21mono2

貪欲法(greedy search)とは?
このアルゴリズムは問題の要素を複数の部分問題に分割し、それぞれを独立に評価を行い、評価値の高い順に取り込んでいくことで解を得るという方法である。

https://ja.wikipedia.org/wiki/貪欲法

1mono21mono2

GPT-4oによる自動評価(LLM-as-a-Judge)を使用している。

1mono21mono2

4.3 ベースラインシステム

以下の音声言語モデルをベースラインシステムとして含めます:

SpeechGPT
SpeechGPT(Zhang et al., 2023)は、音声入力と出力の両方をサポートする音声言語モデルです。元の論文で採用されたモダリティの連鎖的プロンプティングをデコーディングに使用し、音声指示に基づいてテキスト指示、テキスト応答、音声応答を順次出力します。
SALMONN (+TTS)
SALMONN(Tang et al., 2024)は、音声とオーディオ入力を受け入れ、テキストで応答することができるLLMで、S2TIFタスクを実行可能にします。S2SIFタスクには、SALMONNの後にVITS TTSモデルを追加し、音声応答をカスケード方式で生成します。
Qwen2-Audio (+TTS)
Qwen2-Audio(Chu et al., 2024)は、S2TIFタスクを含むさまざまな音声関連タスクを実行できる強力な汎用オーディオ理解モデルです。S2SIFタスクを完了するために、Qwen2-AudioとVITSを組み合わせたカスケードシステムも構築しています。

1mono21mono2

4.4 主な結果


表1:InstructS2S-EvalベンチマークにおけるS2TIFおよびS2SIFタスクのChatGPTスコアと、音声とテキストの応答間のアラインメントスコア。ここでは、S2SIFタスクのためにΩ = +∞を設定しています。

表1では、InstructS2S-Evalベンチマークにおける主な結果を示しています。まず、S2TIFタスクについてですが、内容の観点から見ると、LLaMA-Omniは以前のモデルと比べて大きな改善を見せています。これは主に、LLaMA-Omniが最新のLlama-3.1-8B-Instructモデルを基に開発され、その強力なテキスト指示に従う能力を活用しているためです。スタイルの観点では、SALMONNとQwen2-Audioはスピーチからテキストへのモデルであるため、スコアが低くなっています。これらのモデルは、スピーチインタラクションシナリオに合った出力スタイルではなく、フォーマットされたコンテンツを生成し、冗長な説明が多く含まれることがよくあります。一方で、SpeechGPTはスピーチからスピーチへのモデルとして、より高いスタイルスコアを達成しています。同様に、私たちのLLaMA-Omniも最高のスタイルスコアを獲得しており、InstructS2S-200Kデータセットでのトレーニングを経て、出力スタイルがスピーチインタラクションシナリオとよく調和していることを示しています。S2SIFタスクについても、LLaMA-Omniは内容とスタイルの両方のスコアで以前のモデルを上回っています。これにより、LLaMA-Omniがユーザーの指示に対してスピーチで簡潔かつ効率的に対応できる能力が確認されます。

さらに、スピーチとテキストの応答の整合性に関して、LLaMA-Omniは最も低いASR-WERおよびASR-CERスコアを達成しています。対照的に、SpeechGPTはスピーチとテキストの応答を整合させるのが苦手であり、これはテキストとスピーチを順次生成するためだと考えられます。音声とテキストの整合性が不十分であるのは、主に生成されたテキスト応答に音声に合成できない文字が含まれる可能性があるためです。この問題は特にQwen2-Audioで顕著であり、時折中国語の文字を出力するため、音声応答にエラーを引き起こします。これに対して、LLaMA-Omniは最も低いASR-WERおよびASR-CERスコアを達成しており、生成された音声とテキスト応答の間により高い整合性があることを示しています。また、テキストと音声の応答を同時に生成する当社のアプローチの利点をさらに裏付けています。

1mono21mono2

4.5 音声品質と応答遅延のトレードオフ

LLaMA-Omniは、テキスト応答と音声応答に対応する離散ユニットの両方を同時に生成できます。セクション2.6で説明されているように、ストリーミング波形生成をさらに可能にするために、生成された離散ユニットの数が特定のチャンクサイズΩに達すると、そのユニットチャンクがボコーダーに送られ、音声が合成されて再生されます。Ωの値を調整することで、システムの遅延を制御でき、小さいΩはシステム遅延が低いことに対応します。Ωが+∞の場合、すべてのユニットが生成されるのを待ってから音声を合成することになります。同時に、Ωの値は生成された音声の品質にも影響を与えます。小さいΩは、音声が合成のためにより多くのセグメントに分割されることを意味し、セグメント間に不連続性が生じる可能性があり、音声全体の一貫性が低下することがあります。

Ωの影響をよりよく理解するために、システムの遅延、音声とテキスト応答の整合性、異なるΩ設定下での生成された音声の品質を探ります。表2に示されているように、Ωが10に設定されていると、システムの応答遅延は226msと非常に低く、GPT-4oの平均音声遅延320msよりもさらに低いです。この時点で、音声応答は開始時に平均1.82語遅れています。Ωが+∞に設定されると、遅延は約2秒に増加します。ASR-WERとASR-CERの指標については、チャンクサイズが増加するにつれてエラー率も増加することに驚きました。これには二つの理由があると考えています。一つは、ボコーダーが通常短いシーケンスで訓練されているため、短いユニットシーケンスをより信頼性高く処理できる可能性があることです。もう一つは、私たちが使用しているASRモデル、Whisper-large-v3が非常に堅牢であることです。小さいΩで音声がやや不連続であっても、ASR認識精度にはほとんど影響がありません。したがって、生成された音声の自然さをUTMOSメトリックを使用してさらに評価します。それによると、Ωが増加するにつれて音声の自然さが向上し、音声の不連続性が減少します。要するに、異なるシナリオに基づいてΩの値を調整することで、応答遅延と音声品質のトレードオフを達成できます。


表2:異なる単位チャンクサイズにおけるレイテンシー、音声-テキストアラインメント、音声品質

1mono21mono2

は、ボコーダーに入力する最小ユニットチャンクサイズ
要約すると、応答遅延と音声品質のトレードオフの関係であり、 を増やせば品質が良くなるが応答速度が遅くなる。を減らせば、応答速度が速くなるが品質が悪くなる。

1mono21mono2

4.3 デコーディングタイム


表3: S2TIFとS2SIFタスクにおける異なるモデルの平均デコード時間(秒)

表3は、S2TIFおよびS2SIFタスクにおける異なるモデルの平均デコーディング時間を示しています。S2TIFタスクでは、SpeechGPTはまずテキストの指示を出力し、その後にテキストの応答を出します。一方、SALMONNやQwen2-Audioは長めの応答を生成する傾向があります。それに対して、LLaMA-Omniは簡潔な回答を直接提供するため、デコーディング時間が大幅に短縮され、指示ごとの平均はわずか1.49秒です。S2SIFタスクでは、SpeechGPTはテキストと音声の応答を順番に出力するため、テキスト応答のみを生成する場合と比べてデコーディング時間が約6倍長くなります。対照的に、LLaMA-Omniはテキストと音声の応答を同時に出力し、離散単位を生成するために非自己回帰型アーキテクチャを採用しています。その結果、総生成時間はわずか1.28倍の増加にとどまり、LLaMA-Omniのデコーディング速度の利点を示しています。

1mono21mono2

4.7 ケーススタディ

異なるモデルの応答の違いを直感的に理解するために、表4に例を示します。Qwen2-Audioの応答はかなり長く、改行や括弧など、音声に合成できない要素が含まれています。SALMONNの応答も少し長めです。SpeechGPTの応答スタイルは、音声インタラクションシナリオにはより適していますが、含まれる情報量は少なめです。それに対して、LLaMA-Omniの応答は、簡潔なスタイルを保ちながらも、より詳細で役立つ情報を提供しており、音声インタラクションシナリオでは以前のモデルを上回っています。

表4:指示「プレゼントをきれいに包むには?」に対する異なるモデルの応答

モデル 応答
Qwen2-Audio プレゼントをきれいに包むのはちょっと難しいけど、練習と忍耐を持っていれば、素敵にプレゼントを包む技術をマスターできるよ。以下のステップを参考にしてね:1. きれいで平らな面を用意する: プレゼントを包む作業ができるきれいで平らな面を見つけてね。大きなテーブルやカウンターがいいよ。2. 必要なものを集める: 包装紙、ラッピング用ハサミ、定規またはメジャー、そしてリボンやボウ、シールなどの装飾品を用意してね。3. プレゼントのサイズを測る: 定規やメジャーを使ってプレゼントの幅と長さを測ってね。包むために周りに少し余裕を持たせるのを忘れずに。4. 包装紙を切る: 測ったサイズに合わせて包装紙を切ってね。複数の包装紙がある場合は、きれいに包めるように重ねておくといいよ。5. 紙を折る: まず包装紙の片側をプレゼントの上に折り、しっかりと折り目をつけてから、もう一方の側を上に折る。これでシンプルだけど魅力的な折り方ができるよ。6. 装飾を加える: 好きなようにリボンやボウ、シールなどの装飾をプレゼントに加えてね。接着剤や両面テープを使って、プレゼントの上にくっつけるだけだよ。7. プレゼントを包む: プレゼントの底から始めて、包装紙をかぶせる。紙の左側をプレゼントの上に持ち上げて、しっかりと押し込んでから、下に押さえつけてね。同じように右側もやって、右側の紙をプレゼントの上に持ち上げて、しっかり押し込んでから押さえつけて。8. エッジを仕上げる: プレゼントを包んだら、ラッピング用ハサミを使って余分な紙を切り取ってね。リボンや装飾ラベルなどの追加の仕上げを加えて、見た目を完成させることもできるよ。覚えておいてね、プレゼントをきれいに包むコツは、時間をかけて細部に注意を払うことだよ。練習すれば、毎回素敵なラッピングができるようになるから!
SALMOON プレゼントをきれいに包むには、まずきれいで平らな面を用意して、そこにプレゼントを置く。そして、プレゼントより少し大きめの包装紙で包むんだ。紙を半分に折って、さらにもう一度半分に折って、上と下のフラップが真ん中で合うようにする。次に、左と右のフラップを中心に向かって折りたたんで、プレゼントの上と下で合うようにする。最後に、フラップを押し合わせてテープで固定して、プレゼントを封をする。
SpeechGPT プレゼントをきれいに包むには、いくつかの簡単なステップが必要だよ。まず、紙を半分に折ってから広げる。そして、プレゼントを紙の中心に置いて、紙をその周りに折りたたむ。最後に、紙の端をリボンや紐で結んでね。
LLaMA-Omni プレゼントをきれいに包むには、平らな面から始めて、真ん中にプレゼントを置き、一方の包装紙の端をプレゼントの上に折り、折り目をつけてテープで固定する。残りの端についてもこのプロセスを繰り返して、均等に合わせて空気の泡を滑らかにしてね。
1mono21mono2

5 関連研究

音声/オーディオ言語モデル
自然言語処理の分野での言語モデルの成功を受けて(Brown et al., 2020)、研究者たちは言語モデルを使って音声やオーディオをモデル化する方法を探求し始めました。初期の研究では、音声の意味トークンや音響トークンを使って言語モデルを訓練し、テキストなしでオーディオを生成できるように試みました(Lakhotia et al., 2021; Nguyen et al., 2023; Borsos et al., 2023)。さらに、音声トークンとテキストを共同で訓練することで、VALL-E(Wang et al., 2023b)やVioLA(Wang et al., 2023c)などのデコーダー専用モデルが音声認識、音声翻訳、音声合成といったタスクを実行できるようになります。しかし、上記のモデルはLLMに基づいていません。LLMの力を活用するために、多くの研究がLLaMAのようなLLMに基づいた音声言語モデルの構築方法を探求しており、これはさらに2つのタイプに分けることができます。最初のタイプは、SpeechGPT(Zhang et al., 2023; 2024a)やAudioPaLM(Rubenstein et al., 2023)によって表され、音声トークンをLLMの語彙に追加し、音声とテキストデータを使って事前訓練を続けることで、ネイティブなマルチモーダル音声-テキストモデルを作成するものです。このアプローチは通常、大量のデータと相当な計算リソースを必要とします。第二のタイプは、通常、LLMの前に音声エンコーダーを追加し、モデル全体をファインチューニングして音声理解能力を備えさせることを含みます(Shu et al., 2023; Deshmukh et al., 2023)。これには、音声認識(Fathullah et al., 2024a; Yu et al., 2024; Ma et al., 2024c; Hono et al., 2024)、音声翻訳(Wu et al., 2023; Wang et al., 2023a; Chen et al., 2024)、またはその他の一般的な音声からテキストへのタスク(Chu et al., 2023; Tang et al., 2024; Chu et al., 2024; Fathullah et al., 2024b; Das et al., 2024; Hu et al., 2024)などが含まれます。しかし、これらのアプローチは通常、音声やオーディオの理解にのみ焦点を当てており、それを生成する能力はありません。従来の研究と比較して、LLaMA-OmniはLLMに音声理解と生成の両方の能力を備えさせており、一般的な音声指示に従うタスクを実行できるようにしています。さらに、LLaMA-Omniはトレーニングコストが低く、最新のLLMに基づく開発に便利です。

同時生成
ストリーミング生成は、全ての入力が受信される前に出力を生成し始めることを目指しています。この機能は、ストリーミング音声認識や同時通訳など、さまざまなシナリオで話者と聞き手の間の同期を維持するために重要です。大規模言語モデルの場合、ストリーミング音声合成コンポーネントを持つことで、モデルとユーザー間のレイテンシを大幅に削減できます。一般的なストリーミング生成手法は、主に3つのカテゴリーに分けられます:モノトニックアテンションベースの手法(monotonic-attention-based methods)(Raffel et al., 2017)、CTCベースの手法(Graves et al., 2006b)、およびトランスデューサーベースの手法(Graves, 2012)です。モノトニックアテンションベースの手法は、ストリーミング生成をサポートするために、従来のアテンションベースのシーケンス・ツー・シーケンスフレームワーク(Bahdanau, 2014)を修正します。これらの手法は、READ/WRITEポリシーを管理するために外部モジュールに依存しており、固定(例:Wait-k (Ma et al., 2018))または適応型(例:MMA (Ma et al., 2019)、EDAtt (Papi et al., 2022)、Seg2Seg (Zhang & Feng, 2024))のいずれかです。CTCベースの手法は、WAITアクションを表すためにターゲット語彙に空白シンボルを追加します。ストリーミング推論は、隣接する繰り返しトークンと空白シンボルを削除することで実現されます。アテンションベースの手法の強みを活かすために、CTCベースのアプローチはしばしばチャンクベースの非自己回帰アーキテクチャ(Ma et al., 2023)を使用し、これは同時通訳やストリーミング音声合成(Zhang et al., 2024b; Ma et al., 2024a)で効果的であることが証明されています。トランスデューサーベースの手法は、CTCベースの手法の非自己回帰的な性質とターゲットトークン間の自己回帰的依存関係のギャップを埋めるように設計されています。これらのアプローチは、トークン依存関係を捉えるために追加の予測器を導入し、そのバリエーションは同時通訳(Liu et al., 2021; Tang et al., 2023)で強い性能を示しています。最近では、研究者たちはストリーミング生成タスクのためにデコーダーのみの大規模言語モデルを採用し始め(Seide et al., 2024; Guo et al., 2024)、それを中断可能なデュプレックスモデルに拡張しています(Ma et al., 2024b)。

1mono21mono2

Speech-to-Speechの言語モデルには2通りのタイプがある

  • 音声トークンをLLMの語彙に追加し、音声とテキストデータを使って事前学習をする、ネイティブなマルチモーダル
  • LLMの前に音声エンコーダーを追加し、モデル全体をファインチューニングして音声理解能力を備えさせる

今回のLlaMa-Omniは後者

1mono21mono2

6 結論

本論文では、低遅延で高品質な音声インタラクションを可能にする革新的なモデルアーキテクチャ「LLaMA-Omni」を提案します。LLaMA-Omniは、最新のLlama-3.1-8B-Instructモデルを基にしており、音声理解のための音声エンコーダーと、テキストと音声の応答を同時に生成できるストリーミング音声デコーダーを追加しています。モデルを音声インタラクションシナリオに合わせるために、200Kの音声指示とそれに対する音声応答を含む音声指示データセット「InstructionS2S-200K」を構築しました。実験結果は、従来の音声言語モデルと比較して、LLaMA-Omniがコンテンツとスタイルの両方で優れた応答を提供し、応答遅延が226msと非常に低いことを示しています。さらに、LLaMA-Omniのトレーニングには4つのGPUで3日未満しかかからず、最新のLLMに基づいた音声インタラクションモデルの迅速な開発を可能にしています。今後は、生成された音声応答の表現力を高めたり、リアルタイムインタラクション機能を改善したりすることを検討しています。

1mono21mono2

プロンプト

ChatGPTによるスコアリングプロンプト (モデル: GPT-4o)

いくつかのモデルの音声インタラクションシナリオにおけるパフォーマンスを評価する手助けが必要です。モデルはユーザーからの音声入力を受け取り、それを理解して音声出力で応答する必要があります。あなたのタスクは、提供されたユーザー入力の文字起こし[指示]とモデルの出力の文字起こし[応答]に基づいて、モデルの応答を評価することです。内容とスタイルの2つの観点から応答を評価し、それぞれ1から5のスケールでスコアを提供してください。
内容(1-5ポイント):
1ポイント:応答はほとんど無関係で、不正確であるか、ユーザーの質問に答えられていません。話題から外れているか、誤った情報を提供している可能性があります。
2ポイント:応答はやや関連性がありますが、正確さや完全性に欠けています。ユーザーの質問に部分的にしか答えていないか、余分な情報が含まれている可能性があります。
3ポイント:応答は関連性があり、ほぼ正確ですが、簡潔さに欠けるか、主なポイントに貢献しない不必要な詳細が含まれている可能性があります。
4ポイント:応答は関連性があり、正確で簡潔で、ユーザーの質問に対して不必要な詳述なしに明確な答えを提供しています。
5ポイント:応答は非常に関連性があり、正確で、要点を押さえています。ユーザーの質問に対して非常に効果的かつ効率的に直接応答し、必要な情報を正確に提供します。
スタイル(1-5ポイント):
1ポイント:応答は音声インタラクションに不適切で、リストのような構造的要素を含んでいるか、過度に複雑で、分断されているか、理解しにくいです。
2ポイント:応答はやや適切ですが、長すぎる、短すぎる、または不自然な表現があり、音声インタラクションの文脈で効果が薄れています。
3ポイント:応答は一般的に音声インタラクションに適していますが、長さ、明確さ、流暢さにわずかな問題があり、全体的な効果をやや損なっています。
4ポイント:応答は音声インタラクションに適しており、適切な長さ、明確な言葉、自然な流れがあります。声に出しても理解しやすいです。
5ポイント:応答は音声インタラクションに完璧に適しています。理想的な長さで、非常に明確で、自然に流れ、声に出しても追いやすく、理解しやすいです。
以下はユーザーの指示とモデルの応答の文字起こしです:
### [指示]: {instruction}
### [応答]: {response}
評価の後、スコアをJSON形式で出力してください:{“content”: content score, “style”: style score}。
説明は必要ありません。
英語
I need your help to evaluate the performance of several models in the speech interaction scenario. The mod-
els will receive a speech input from the user, which they need to understand and respond to with a speech
output. Your task is to rate the model’s responses based on the provided user input transcription [Instruc-
tion] and the model’s output transcription [Response]. Please evaluate the response from two perspectives:
content and style, and provide a score for each on a scale of 1 to 5.
Content (1-5 points):
1 point: The response is largely irrelevant, incorrect, or fails to address the user’s query. It may be off-topic
or provide incorrect information.
2 points: The response is somewhat relevant but lacks accuracy or completeness. It may only partially
answer the user’s question or include extraneous information.
3 points: The response is relevant and mostly accurate, but it may lack conciseness or include unnecessary
details that don’t contribute to the main point.
4 points: The response is relevant, accurate, and concise, providing a clear answer to the user’s question
without unnecessary elaboration.
5 points: The response is exceptionally relevant, accurate, and to the point. It directly addresses the user’s
query in a highly effective and efficient manner, providing exactly the information needed.
Style (1-5 points):
1 point: The response is poorly suited for speech interaction, possibly including structured elements like
lists or being overly complex, disjointed, or difficult to understand.
2 points: The response is somewhat suitable but may be too long, too short, or awkwardly phrased, making
it less effective in a speech interaction context.
3 points: The response is generally suitable for speech interaction, but it may have minor issues with length,
clarity, or fluency that detract slightly from the overall effectiveness.
4 points: The response is well-suited for speech interaction, with appropriate length, clear language, and a
natural flow. It is easy to understand when spoken aloud.
5 points: The response is perfectly suited for speech interaction. It is the ideal length, highly clear, and
flows naturally, making it easy to follow and understand when spoken.
Below are the transcription of user’s instruction and models’ response:
### [Instruction]: {instruction}
### [Response]: {response}
After evaluating, please output the scores in JSON format: {“content”: content score, “style”: style score}.
You don’t need to provide any explanations

指示書の書き直しプロンプト(モデル:Llama-3-70B-Instruct)

以下は、ユーザーの指示を含む指示データです。大規模言語モデルをトレーニングするためのスピーチバージョンを生成したいと思っています。このため、次の要件に従って私の指示データを書き直してください:  
一、指示を人間のスピーチを模倣するように修正し、適切にフィラーを追加してください(でも、あまり多くの「ね」「まあ」などは避けてください)。  
二、質問にはTTSモデルで合成できない内容を含めないでください。数字はアラビア数字ではなく、英語の単語で書いてください。  
三、質問は過剰な言葉を使わず、比較的簡潔にしてください。  
【指示】:{instruction}  
JSON形式で以下のように出力してください:{"question":{question}}。  
英語
Below is an instruction data containing the user’s instruction. I would like to generate a speech version of
this instruction for training a large language model that supports speech input. Therefore, please rewrite my
instruction data according to the following requirements:
1. Modify the instruction to simulate human speech, adding fillers as appropriate (but not too many ‘you
know’, ‘like’, etc.).
2. The question should not contain content that cannot be synthesized by the TTS model. Numbers should
be written in English words rather than Arabic numerals.
3. The question should be relatively brief without excessive verbiage.
[instruction]: {instruction}
Please output in JSON format as follows: {“question”: {question}}.

返答生成プロンプト(モデル:Llama-3-70B-Instruct)

以下はユーザーの音声クエリの書き起こしです。この質問に対する回答を提供してください。回答はTTSを使用して音声に変換されます。以下の要件に従ってください:
1. 回答にはTTSモデルで合成できない内容(かっこ、番号付きリストなど)を含めないでください。数字はアラビア数字ではなく英語の単語で書いてください。
2. 回答は非常に簡潔で要点を押さえ、長い説明は避けてください。
[instruction]: {instruction}
JSON形式で以下のように出力してください:{“response”: {response}}。
英語
Below is the transcribed text of a user’s speech query. Please provide a response to this question, which will
be converted to speech using TTS. Please follow these requirements for your response:
1. Your response should not contain content that cannot be synthesized by the TTS model, such as paren-
theses, ordered lists, etc. Numbers should be written in English words rather than Arabic numerals.
2. Your response should be very concise and to the point, avoiding lengthy explanations.
[instruction]: {instruction}
Please output in JSON format as follows: {“response”: {response}}.