| --- |
| license: cc-by-nc-sa-4.0 |
| language: |
| - ja |
| base_model: |
| - ASLP-lab/Easy-Turn |
| tags: |
| - turn-detection |
| - turn-taking |
| - end-of-turn |
| - japanese |
| - speech |
| - spoken-dialogue |
| - voice-agent |
| --- |
| |
| # Easy Turn JA |
|
|
| 日本語音声を入力すると、文字起こしと同時に Complete / Incomplete / Backchannel / Wait の4状態でターン判定を返すモデルです。[Easy Turn](https://huggingface.co/ASLP-lab/Easy-Turn)(arXiv:2509.23938、中国語・英語)の公式 checkpoint を日本語に継続適応させたものです。 |
|
|
| A Japanese 4-state turn-detection model (Complete / Incomplete / Backchannel / Wait) that also transcribes. Continued adaptation of the official Easy Turn checkpoint, which covers Chinese and English only. Read the "Limitations" section before using it: this model does not beat a well-tuned VAD at end-of-turn detection itself. Its measured advantage is that it does not interrupt backchannels. |
|
|
| ## 位置づけ |
|
|
| VAD を置き換えるものではなく、VAD の後段に置く再判定器です。VAD が「音が止まった」と判定した区間について、その止まり方が4状態のどれなのかを判定し直します。 |
|
|
| | 状態 | 意味 | システムの取るべき動作 | |
| |---|---|---| |
| | Complete | 話し終わった | 応答を開始する | |
| | Incomplete | まだ続く | 黙って聞き続ける | |
| | Backchannel | 相槌(「うん」「へー」) | 自分の発話を止めない | |
| | Wait | 「ちょっと待ってください」 | 長めに待つ | |
|
|
| 構成は Whisper-Medium の音声 Encoder + 3層Conv・4層Transformer の Adapter + Qwen2.5-0.5B-Instruct、約850M パラメータです。公式実装(WeNet ベース)をそのまま使います。 |
|
|
| ## 性能 |
|
|
| 評価セットは TalkBank CABank の CallHome / CallFriend 日本語(知人どうしの電話会話)から切り出した824件・118会話です。ラベルは2つの LLM に別々の観点で判定させ、食い違いは第三の判定で裁定しました(2者の一致度 Cohen's κ 0.9023)。 |
|
|
| | 状態 | precision | recall | F1 | 件数 | |
| |---|---|---|---|---| |
| | complete | 0.555 | 0.519 | 0.536 | 291 | |
| | incomplete | 0.691 | 0.686 | 0.689 | 261 | |
| | backchannel | 0.741 | 0.798 | 0.768 | 272 | |
|
|
| | 指標 | 値 | |
| |---|---| |
| | Macro-F1(上記3状態) | 0.664 | |
| | Youden J(complete/incomplete 判別) | 0.205 | |
| | CER(実会話) | 0.468 | |
| | 日本語出力率 | 0.993 | |
| | ラベル出力率 | 1.000 | |
| | Wait recall(合成50件で別測) | 0.88 | |
|
|
| wait は自然会話にほとんど出現しないため、評価セットに含まれていません。Macro-F1 は評価セットに実際に支持のある3状態の平均です。 |
|
|
| 継続適応の前後です。開始時は日本語音声を全件中国語として音写する状態(日本語出力率 0% / CER 1.031)でした。 |
|
|
| | 指標 | 4状態 fine-tuning 直後 | このモデル | |
| |---|---|---| |
| | Youden J | −0.363 | 0.205 | |
| | complete F1 | 0.424 | 0.536 | |
| | incomplete F1 | 0.390 | 0.689 | |
| | backchannel F1 | 0.718 | 0.768 | |
| | Macro-F1 | 0.511 | 0.664 | |
| | CER | 0.557 | 0.468 | |
|
|
| ## VAD-only との比較 |
|
|
| F1 だけでは使い勝手が分からないので、音声エージェントに載せたときの誤り率に翻訳した実測も出します。比較対象は VAD-only(無音が τ ms 続いたら応答する素朴なルール)です。 |
|
|
| τ を短くすれば取り逃しは減りますが割り込みが増えるため、1点だけ切り取った比較には意味がありません。このモデルと同じ「話し終わりの取り逃し率」になる τ を10ms刻みで探して並べています。 |
|
|
| | | 話し終わりの取り逃し | 途中で割り込む | 相槌に割り込む | |
| |---|---|---|---| |
| | このモデル | 48.1% | 28.0% | 17.6% | |
| | VAD-only(τ=1060ms) | 47.8% | 25.7% | 62.5% | |
|
|
| 読み取れることは2つです。 |
|
|
| 1. 話し終わり判定そのものでは、τ を合わせた VAD-only と同等です。取り逃しを揃えると途中割り込みも 25.7% 対 28.0% でほぼ並びます |
| 2. 相槌の軸だけは大きく上回ります。差 −44.9%(95%CI [−53.4%, −35.8%])で有意です |
|
|
| 「うん」「へえ」に応答しないという判断は無音の長さからは原理的に出せません。このモデルの価値はここに集中しています。 |
|
|
| 話し終わりの取り逃しが4割強あるのは良い数字ではありませんが、VAD の後段に置く再判定器なので、complete を取り逃した場合は従来どおり VAD のタイムアウト待ちに落ちるだけです。早く返せないだけで、余計な割り込みは足しません。相槌を潰さない VAD の加速器、というのがこのモデルの実用上の位置づけです。 |
|
|
| VAD 側の無音長は、元の会話音声に戻り、発話終端から先を該当話者のチャネルで silero VAD にかけて次の発話開始まで実測しました(824件全件)。この録音はチャネル分離が完全ではないため、転写タイムスタンプ由来の gap(分離が完璧な理想の VAD)でも同じ集計をしています。理想側では VAD の途中割り込みは 19.2% とモデルより良くなり、相槌への割り込みは 74.3% とさらに悪くなります。どちらで測っても上の2点は変わりません。 |
|
|
| ## 推論性能 |
|
|
| RTX 4090・n=200 での実測です。 |
|
|
| | 指標 | 値 | |
| |---|---| |
| | P50 レイテンシ | 111.6ms | |
| | P95 レイテンシ | 291.2ms | |
| | RTF | 0.0389 | |
| | VRAM ピーク | 2.69GB | |
|
|
| ## 使い方 |
|
|
| 公式実装のコードが必要です。checkpoint 単体では動きません。 |
|
|
| ```bash |
| # 1. 公式コード(Apache-2.0) |
| GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/ASLP-lab/Easy-Turn |
| # 2. LLM 部(checkpoint に重みは入っていますが、アーキ構築と tokenizer に必要) |
| huggingface-cli download Qwen/Qwen2.5-0.5B-Instruct --local-dir ./Qwen2.5-0.5B-Instruct |
| # 3. このリポジトリ |
| huggingface-cli download ayousanz/easy-turn-ja --local-dir ./easy-turn-ja |
| ``` |
|
|
| 同梱の `train.yaml` の `llm_path`(2箇所)を Qwen のローカルパスに書き換え、`checkpoint.pt` と同じディレクトリに置いてから実行します。 |
|
|
| ```bash |
| bash decode/decode_common.sh \ |
| --data_type raw --test_sets <セット名> --gpu_id 0 \ |
| --dir <train.yaml と checkpoint.pt を置いたディレクトリ> \ |
| --ckpt_name checkpoint.pt \ |
| --task '<TRANSCRIBE><BACKCHANNEL><COMPLETE>' |
| ``` |
|
|
| 環境は Python 3.10 / torch 2.1.0 / torchaudio 2.1.0 / transformers 4.44.0 / accelerate 1.7.0 / peft 0.17.0 / numpy 1.24 です。公式の requirements.txt には `gxl_ai_utils` と `tensorboardX` の記載が漏れているので追加してください。deepspeed はバージョン無指定だと 0.19 系が入り torch 2.1.0 と非互換なので 0.14.4 に固定します(推論だけなら deepspeed 自体が不要です)。 |
|
|
| 実装上の注意が3点あります。 |
|
|
| - モデルが返すのは小文字タグ + `<|endoftext|>` です(例: `そうですね<complete><|endoftext|>`)。大文字で完全一致を取るとラベルが1件も取れていないように見えます |
| - raw 形式の data.list には数値の `style` フィールドが必須です(COMPLETE=0 / INCOMPLETE=1 / BACKCHANNEL=2 / WAIT=3)。自動付与は shard 形式にしかありません |
| - 状態確率を logit から取る場合、状態トークンは Qwen2.5 の tokenizer 上で単一トークンではなく `<` / 識別語 / `>` に分割されます。先頭の `<` は4状態で共通なので、2番目のトークンで識別します。token id はハードコードせず tokenizer から動的に導出してください |
|
|
| ## 学習データ |
|
|
| | 素材 | 内容 | 件数 | |
| |---|---|---| |
| | TalkBank CABank CallHome 日本語 | 実会話ターン(評価に使っていない22会話から抽出) | 2,612 | |
| | J-CHAT | Podcast の実会話ターン。2つの LLM でラベル付け(κ 0.875) | 2,166 | |
| | 合成 | Irodori-TTS v3 + VoiceDesign v3 の架空話者による合成 | 1,387 | |
| | ReazonSpeech | ASR 混合(turn : ASR = 39 : 61) | 16時間 | |
|
|
| 学習は全解凍(`fire_module: encoder_and_link_and_llm`)です。凍結した LLM は「音声埋め込み = 中国語」という強い事前分布を持ち、音声側だけを学習しても越えられません。日本語への言語適応には LLM を学習対象に含める構成(全解凍か LoRA)が必要でした。 |
|
|
| 会話ID単位で train / dev / test を完全に分離しています。評価セットの会話は学習に一切使っていません。 |
|
|
| ## 制限事項 |
|
|
| - complete の F1 が 0.536 で、これが Macro-F1 を押し下げている唯一の項目です |
| - 話し終わり判定そのものでは、動作点を揃えた VAD-only に対する優位を示せていません |
| - 評価は雑談の電話会話(CallHome / CallFriend)のみです。タスク指向の音声エージェント(用件の受け答え)では未測定で、そちらの方が良く出ると推測されますが確認していません |
| - 1〜3字の complete(「うん」型)は全世代で recall 0.2 前後で頭打ちです。単発クリップに文脈が無いことによる原理的な天井と見ています |
| - 単発クリップの分類器です。VAD 非依存のストリーミング判定は行いません |
| - 電話帯域(8kHz 由来)の会話で評価しています。広帯域音声での挙動は別途確認してください |
|
|
| ## ライセンス |
|
|
| このモデルの重みは CC BY-NC-SA 4.0 で配布します。非商用に限られます。 |
|
|
| 学習に使った素材のうち、TalkBank CABank(CC BY-NC-SA 3.0)が非商用 + 継承(ShareAlike)を、J-CHAT(CC BY-NC 4.0)が非商用を課すためです。CC BY-NC-SA 3.0 は同じ License Elements を持つ後続版での翻案配布を認めているので、4.0 で継承しています。 |
|
|
| | 素材 | ライセンス | |
| |---|---| |
| | Easy Turn 公式 checkpoint(ベース) | Apache-2.0 | |
| | Qwen2.5-0.5B-Instruct | Apache-2.0 | |
| | Whisper-Medium encoder | MIT | |
| | Irodori-TTS v3 / VoiceDesign v3 | MIT | |
| | ReazonSpeech | CDLA-Sharing-1.0(Results に義務なし) | |
| | J-CHAT | CC BY-NC 4.0 | |
| | TalkBank CABank CallHome / CallFriend 日本語 | CC BY-NC-SA 3.0 | |
|
|
| このリポジトリは学習済みの重みのみを配布しています。学習・評価に使った音声・転写・クリップは一切含まれておらず、再配布していません。ReazonSpeech と J-CHAT については、著作権法30条の4(情報解析)の範囲での利用です。 |
|
|
| ベースの Easy Turn は Apache-2.0 です。同ライセンス §4 に従い、派生物であること、および日本語データによる継続適応という変更を加えたことをここに明示します。 |
|
|
| ## 引用 |
|
|
| TalkBank の規則により、このモデルを利用した成果では以下の引用が必要です。 |
|
|
| ``` |
| Linguistic Data Consortium (2008). CABank Japanese CallHome Corpus. TalkBank. doi:10.21415/T5H59V |
| Canavan, A., & Zipperlen, G. (1996). CALLHOME Japanese Speech LDC96S37. Philadelphia: Linguistic Data Consortium. |
| ``` |
|
|
| ベースモデルの論文です。 |
|
|
| ```bibtex |
| @article{easyturn2025, |
| title = {Easy Turn: Integrating Acoustic and Linguistic Modalities for Robust Turn-Taking in Full-Duplex Spoken Dialogue Systems}, |
| journal = {arXiv preprint arXiv:2509.23938}, |
| year = {2025} |
| } |
| ``` |
|
|
| ## 関連 |
|
|
| - 公式実装の再現と日本語ゼロショット: https://ayousanz.hatenadiary.jp/entry/2026/08/15/152631 |
| - Easy Turn 論文: https://arxiv.org/abs/2509.23938 |
| - Easy Turn 公式実装: https://github.com/ASLP-lab/Easy-Turn |
|
|