[論文] Beyond the Turn-Based Game: Enabling Real-Time Conversations with Duplex Models
論文
ターンベース型ゲームを超えて:デュプレックスモデルによるリアルタイム会話の実現
1. どんなもの?
大規模言語モデル(LLM)を用いた会話システムにおいて、人間らしいリアルタイムの対話を実現する「デュプレックスモデル」を提案した研究です。
従来のLLMを使った対話システムは、ユーザーの入力が完了してから応答を生成する「ターンベース」の仕組みでした。これに対して本研究では、人間同士の会話のように、相手の発話中でも聞きながら考え、適切なタイミングで応答できるシステムを開発しました。具体的には、会話をタイムスライスと呼ばれる短い時間単位に分割し、それぞれのスライスで入力と出力を疑似的に同時処理する手法を実装しています。この技術により、より自然な対話の中断や割り込み、沈黙などが可能になりました。
2. 先行研究と比べてどこがすごい?
従来のLLMベースのチャットボットは、ユーザーが「停止」ボタンを押すか特定のキーワードを発話するまで応答を中断できず、人工的な印象が強いものでした。本研究の革新的な点は、以下の3つです:
- 会話を2秒程度の時間スライスに分割し、Time-Division-Multiplexing (TDM)という手法で擬似的な同時処理を実現
- ユーザーが明示的に入力の終了を指示する必要がなく、自然なタイミングで応答を開始
- 相手の発話中でも中断や割り込みが可能で、より人間らしい対話を実現
3. 技術や手法の肝はどこ?
本研究の核となる技術は、TDMエンコーディング・デコーディング戦略です。具体的には:
- 会話を4-6単語程度の時間スライスに分割
- 入力スライスを逐次的に処理しながら、部分的な入力に基づいて出力スライスを生成
- <idle>という特殊トークンを導入し、モデルが「沈黙」するタイミングを学習
- Duplex-UltraChatという独自のデータセットを作成し、様々な種類の割り込みパターンを学習
4. どうやって有効だと検証した?
研究チームは以下の3つの方法で評価を実施しました:
- 標準的なベンチマーク(C-Eval、CMMLU、MMLU等)での性能評価
- GPT-4を評価者として使用したMT-benchによる対話能力の評価
- 14名の被験者による人間評価(応答性、人間らしさ、忠実性、事実性、全体的な満足度を評価)
結果として、デュプレックスモデルは従来モデルと比較して、応答性で81.05%、人間らしさで43.37%、全体的な満足度で32.52%の改善を達成しました。
5. 議論はある?
研究チームは以下の課題を指摘しています:
- 高品質なデュプレックスデータの不足:現存の対話データセットはターンベースが前提となっており、より自然な会話データが必要
- 応答速度とユーザー体験のバランス:モデルが予期せぬタイミングでユーザーを中断してしまうケースへの対応
- 音声出力の不自然さ:チャンク単位での出力が音声の不自然な区切れを生む問題
6. 次に読むべき論文は?
- Hill et al. (2015) "Real conversations with artificial intelligence" - 人間とチャットボットの会話分析に関する基礎研究
- Skantze (2021) "Turn-taking in conversational systems" - 対話システムにおけるターン管理の包括的なレビュー
- Zhou et al. (2023) "Talking to a bot or a wall?" - チャットボットと人間の対話品質の比較研究
GitHubレポジトリ
referred from https://github.com/thunlp/duplex-model and translated into Japanese by kun432ターン制ゲームを超えて: Duplexモデルによるリアルタイム対話の実現
はじめに
私たちは、ユーザーからの入力を受け取ると同時に出力を生成し、中断などの即時ユーザーからのフィードバックに動的に適応できる DUPLEXモデル という概念を紹介します。ターン制のやり取りではなく、Duplexモデルはリアルタイムでユーザーと対話することが可能です。DUPLEXモデルの性能を示すために、MiniCPM-2.4Bを基にした例として、MiniCPM-duplexモデルを訓練しました。DUPLEXモデルの訓練データは、一般的な訓練コーパスとは異なり、リアルタイムのシナリオで実際の入力/出力を学習するためにスライスに分割されています。
モデル
データセット
こんな感じで、シンプルな会話ターンではなくて、発話がもっと細かく分割されて、それに対して「待つ」(<idle>
)という定義がされていたり、発話の途中で割り込みが入ったり、みたいな会話データになっている。なるほど・・・。
[
{
"role": "user",
"content": "How would you translate"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "the given text material"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "into Spanish?: Could be that"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "you don’t.\nLike as not you"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "won’t.\nWithout my watch and you."
},
{
"role": "assistant",
"content": "Podría ser que no lo hagas."
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "Lo más probable es que no lo hagas."
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "Sin mi reloj y sin ti."
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "."
},
{
"role": "user",
"content": "Can you please provide me with"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "a Spanish translation of the"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "entire piece of text?"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "Sure, here’s the Spanish translation of"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "the entire text:\n\nPodría ser"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "que no lo hagas.\nLo más probable"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "es que no lo hagas.\nSin mi"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "reloj y sin ti.\n\nP"
},
{
"role": "user",
"content": "How do you use \"lo"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "más probable\" in a different"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "sentence?"
},
{
"role": "assistant",
"content": "<idle>"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "\"Lo más probable\" translates to \"most likely"
},
{
"role": "user",
"content": "<idle>"
},
{
"role": "assistant",
"content": "\" in English, and it is used to express"
},
{
"role": "user",
"content": "<idle>"
},
(snip)
この辺と似た感じかな