---
title: GPU不要！SLM・BERTによる音声対話向け高速ターン検出モデル
tags:  #dena ai talks  
author: [DeNA_Tech](https://www.docswell.com/user/DeNA_Tech)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4JQYQQMW7P.jpg?width=480
description: 2026年9月29日に開催した「DeNA × AI Talks #9 LLMとどこまで付き合ったか」の登壇スライドです。 イベント概要：https://dena.connpass.com/event/404885/
published: September 30, 26
canonical: https://www.docswell.com/s/DeNA_Tech/ZN729D-2026-09-30-164448
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4JQYQQMW7P.jpg)

GPU不要！SLM・BERTによる音声
対話向け高速ターン検出モデル
佐藤悠翔
IT本部AI・データ戦略統括部AI技術開発部AIイノベーションG
株式会社ディー・エヌ・エー
© DeNA Co., Ltd.
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/K74WNNV1E1.jpg)

自己紹介
佐藤 悠翔
DeNA IT本部AI・データ戦略統括部AI技術開発部
AIイノベーションG
横浜生まれ横浜育ち
学生時代
●電車線設備の自動点検の研究
●スタートアップでAI Eng/PjM 2年くらい
DeNA
●26卒で新卒入社
●新規事業立ち上げの部署
© DeNA Co., Ltd.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LJ1Y5535EG.jpg)

目次
1
ターン検出とは？
2
SLM / BERTによる判定手法
3
CPU向け最適化と処理速度の評価
4
精度評価と量子化の影響
5
まとめ
© DeNA Co., Ltd.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJWG55PW72.jpg)

ターン検出とは?
© DeNA Co., Ltd.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4EZLNNK273.jpg)

ターン検出器とは？
1
音声認識 → 応答生成 → 音声合成を別々のモデルでつなぐカスケード型の音声対話
において、応答を生成するタイミングを決めるためのモデル
入力音声
ASR
音声認識
ターン検出
終了確率
LLM
応答生成
TTS
音声合成
無音時に判定を呼ぶ
VAD：発声／無音
直近の会話履歴
終了 → 応答を開始
継続 → 追加発話を待つ
応答タイミングを見誤ると、喋っている最中の割り込みや応答の遅れに繋がる
© DeNA Co., Ltd.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/Y76W88267V.jpg)

1
VADだけでは発話が終わったかは分からない
例：「明日の予定は、」 …… 「午後から空いています」
発話の流れ
明日の予定は、
無音
午後から空いています
VADの判断
音声あり
音声なし
音声あり
終了検出の判断
「予定は、」は続きを待つ → 意味・文脈を使って補完
無音で判定すると、言い淀み等のタイミングで応答してしまう
© DeNA Co., Ltd.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/G75M992574.jpg)

既存のターン検出モデルの課題
1
日本語で低コストに運用するには課題がある
高精度なオープンモデル
軽量モデル
GPU運用でコストが重い
品質をコントロールしづらい
UltraVAD等はそこそこ精度がいいが、
Llama-8BベースでGPU必須。
Smart Turnのような軽量モデルもあるが、特定用途に
特化させたり、機能追加といった対応が難しい。
高性能なクローズドモデル
オープンな日本語音声対話データ
コスト・外部依存が懸念
学習に使えるデータが少ない
従量課金・データの外部送信が懸念。
料金変更・障害時に提供元へ依存。
音声対話の日本語データが不足。
収録・ラベル付けからの整備は負担が大きい。
音声データを使わず、日本語の判定器を低コストにセルフホストしたい
参考：UltraVAD公式モデルカード / Smart Turn公式README / LiveKit言語別レポート
© DeNA Co., Ltd.
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/9J29224GER.jpg)

1
ターン判定の手法を比較し、テキストベースの判定器を選択
手法の比較：
方式
入力
特徴
開発・運用上の要件
VADのみ
音声
発声／無音を軽く判定
意味や会話文脈は見ない
音声モデル
例：Smart Turn
音声
韻律を使える
CPU向けの軽量版もある
学習には音声データが必要
音声＋文脈
例：UltraVAD
音声＋会話履歴
韻律と会話文脈を使える
モデル規模・推論資源と
音声データの整備が課題
テキスト（今回）
SLM / BERT
ASR結果＋会話履歴
音声を収録せずに
学習データを作れる
韻律は直接使わない
→軽量なSLM・BERTを用いたテキストベースを採用し、音声収録なしでモデルを作成
参考：UltraVAD公式モデルカード / Smart Turn公式README
© DeNA Co., Ltd.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/DEY4YYMGJM.jpg)

1
テキストベースの判定の限界もある
「そうですね」の話し方例：
言い切る場合
続きを考えている場合
声の高さ
声の高さ
高
高
低
低
そう
です
ね
そう
です
時間 →
終了として応答しやすい
ね
時間 →
続きを待つ判断につながる
文字だけでは抑揚・息づかい・間などが伝わらず、どちらも同じ判断になってしまう
© DeNA Co., Ltd.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/VJNYPPW878.jpg)

2. SLM / BERTによる判定手法
© DeNA Co., Ltd.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YE9P33XXJ3.jpg)

2
ASRテキストと会話履歴から会話ターンの終了確率を出力
現在のASRテキスト
＋
直近の会話履歴
ターン判定器
終了確率 p
0.0 〜 1.0
p ≥ 閾値：終了
p &lt; 閾値：継続
音声は使わず、リアルタイムの文字起こしテキスト + 会話履歴を入力する
© DeNA Co., Ltd.
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GE8DMM29ED.jpg)

2
音声収録なしで途中発話の学習データを作る
学習データの例：
1
えっとサイズは
待つ（false）
2
えっとサイズはひとつ大きめ
待つ（false）
3
えっとサイズはひとつ大きめで大丈
待つ（false）
4
えっとサイズはひとつ大きめで大丈夫。
終了（true）
ASRの途中認識をシミュレーションした学習データを作成
© DeNA Co., Ltd.
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LELM332M7R.jpg)

2
Qwen / BERTでターン終了確率を出力するモデルを作る
Qwen3-0.6B｜SLM（小型言語モデル）
履歴＋
現在発話
Qwen 本体
約596M・28層
既存の語彙予測ヘッド
全語彙 softmax
終端トークンの
確率を選ぶ
ModernBERT-ja-130M｜文の表現をつくるモデル
履歴＋
現在発話
BERT 本体
約132M・19層
追加した二値分類ヘッド
先頭表現 → Linear
sigmoid で
終了確率を出す
どちらも学習データ・出力形式は同じで、ターン終了確率を0〜1で出力。
参考：Qwen3-0.6Bモデルカード / ModernBERT-ja-130Mモデルカード
© DeNA Co., Ltd.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4JMYDD86JW.jpg)

Qwen：全語彙の予測から終端トークン確率を選ぶ
2
Qwen Decoder
出力行列 H
最終表現
既存 LM head
全語彙 softmax
28層・hidden 1,024
L × 1,024
1,024次元
W［151,936 × 1,024］
151,936次元
Decoder layer
× 28
トークン埋め込み
履歴＋現在発話
最後の有効行を選択
p1
h1
z1
h2
z2
h3
zEOT
p（終了）
⋮
⋮
⋮
h1024
zV
pV
151,936次元
終端だけを採用
全語彙で
正規化
p2
会話ターン終了用の特殊トークンの予測確率を最終出力として使用
参考：Qwen3-0.6Bモデルカード
© DeNA Co., Ltd.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/PJR9445N79.jpg)

BERT：先頭の512次元表現を全結合
2
ModernBERT
出力行列 H
先頭表現
全結合：512 → 1
終了確率
19層・hidden 512
L × 512
512次元
W［1 × 512］
1個の値
h1
Encoder layer
× 19
h3
トークン埋め込み
履歴＋現在発話
sigmoid
h2
⋮
先頭 &lt;s&gt;
の行を選択
z
p
1次元の logit
0〜1
h512
z = w1h1 + w2h2 + … + b
512個の特徴量を全結合し、sigmoidで最終的な終了確率を出力する
参考：ModernBERT-ja-130Mモデルカード
© DeNA Co., Ltd.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PEXQ22K8JX.jpg)

2
同じ日本語データでQwenとBERTを学習
学習データの構成：
train
26,834件
48.6% 終了
validation
3,464件
48.1% 終了
test
3,413件
48.9% 終了
終了
継続
終了・継続はほぼ半々の同じデータでQwen・BERTを学習する
© DeNA Co., Ltd.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/3EK9MM5LED.jpg)

3. 処理速度の評価・CPU向け最適化
© DeNA Co., Ltd.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/L73WYYK675.jpg)

PyTorchではGPU推論は速いがCPU推論は遅い
3
入力長128 tokens時の平均モデル計算時間（ms）
Qwen
BERT
CPU
864.3
L4 GPU
40.3
CPU
158.1
L4 GPU
17.6
0
450
900 ms
GPUなら数十msで処理できるが、CPUの処理速度は不十分・・・
⇨高速化を検討！
© DeNA Co., Ltd.
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/87DK553MJG.jpg)

3
変換前
CPU向けに学習済みモデルをONNXへ変換する
保存するモデル
計算を実行するソフト
得られる結果
PyTorch用モデル
構造＋学習済みの重み
PyTorch
終了確率 p
ONNX Runtime
ほぼ同じ
終了確率 p
計算と重みをONNXへ書き出す
変換後
ONNXファイル
計算のつながり＋同じ重み
ONNX形式で保存し、ONNX Runtimeで読み込んで計算する。
© DeNA Co., Ltd.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/VJPKGG4QE8.jpg)

3
さらにINT8量子化で軽量化を狙う
ONNXへの変換後に数値の表し方を軽くする量子化を行う
量子化する重み1個あたりのbit数
FP32
32 bit
INT8
8 bit
イメージ
0.1234 ≈ 整数 12 × 0.01 = 0.12
0.01は整数を元の値に対応させる倍率（scale）
近似で計算結果が変わりうるため、量子化後は精度と閾値を確認。
© DeNA Co., Ltd.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/2EVV66XPEQ.jpg)

3
CPU推論が高速化！ 最大2〜3倍高速に
128 tokens・平均モデル計算時間（ms）
Qwen
BERT
864.3
PyTorch CPU
158.1
758.8
ONNX FP32 CPU
140.6
275.0
ONNX INT8 CPU
78.4
0
450
900 ms
PyTorch CPU比でQwen 約3.1倍、BERT 約2.0倍に高速化！
© DeNA Co., Ltd.
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/57GLNNVQEL.jpg)

3
ただし、CPUでは入力が長いほど時間がかかる
ONNX INT8・CPU｜平均処理時間
Qwen
BERT
549
275
157
156
44
64 tokens
78
128 tokens
256 tokens
入力長に比例して処理にかかる時間も増加するが、BERTの場合は許容範囲内に収まる
© DeNA Co., Ltd.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/4EQYQQ6WJP.jpg)

4. 精度と量子化の影響
© DeNA Co., Ltd.
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/KJ4WNN4171.jpg)

4
LiveKitのeot-benchで精度を評価
eot-benchは、多言語の人と音声エージェントの実会話の音声・文字起こし・会話履歴を
含む評価用データセット
発話
無音
継続 hold
発話
無音
継続 hold
発話
最後の無音
終了 eot
日本語 356発話、1,320無音区間のデータを使用（hold 964区間 ／ eot 356区間）し、
無音区間ごとにターン判定 → 複数指標で評価を行う。
参考：LiveKit eot-bench-data / LiveKit eot-bench
© DeNA Co., Ltd.
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/LE1Y55457G.jpg)

4
精度は誤終了率と平均待ち時間を見る
「途中で割り込んでしまう割合」と「話し終えてからの待ち時間」を分けて評価
評価指標
誤終了率 低いほどよい
平均待ち時間 短いほどよい
意味
話の途中の無音で、
続きの発話を待たずに
「終了」と判断してしまう割合。
本当に話し終えてから、
「終了」と判定するまでに
待つ時間の平均。
計算方法
再開前に終了した区間数
÷ 話の途中の無音区間数 × 100
各終了区間の待ち時間を足し、
本当の終了区間数で割る。
10%：途中の無音100区間のうち、
800ms：本当の終了100区間で、
10区間で続きの発話を待てずに終了。
90区間は500ms、10区間は3,500ms
計算例
※待ち時間にモデル計算・通信・応答生成の時間は含まない
© DeNA Co., Ltd.
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GEWG55XWJ2.jpg)

ベースラインのVADよりも圧倒的に誤終了割合を減らせる
4
FP32で効果を確認（平均待ち時間 ≤ 600 msでの最小誤終了率）
47.3%
VADのみ
Qwen FP32
12.7%
BERT FP32
12.9%
0
25%
50%
低いほど良い
VADと比較して誤終了率を約34ポイント低減し、両モデルの精度はほぼ同等。
© DeNA Co., Ltd.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/47ZLNN62J3.jpg)

INT8量子化後も大きな精度の低下は見られない
4
同じ誤終了率 ≤ 5%で比較（条件を満たす最小の平均待ち時間）
VADのみ
Qwen FP32
Qwen INT8
BERT FP32
BERT INT8
（ONNX）
1,700 ms
VADのみ
Qwen FP32
838 ms
Qwen INT8
868 ms
BERT FP32
867 ms
BERT INT8
904 ms
0
900
1,800 ms
Qwen / BERTともにFP32 → INT8で大きな悪化は見られない
© DeNA Co., Ltd.
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/YJ6W88L6JV.jpg)

4
INT8量子化後もスコアの識別性能を維持
ROC-AUC（高いほど良い）
Qwen FP32
Qwen
BERT
Qwen INT8
BERT FP32
BERT INT8
FP32
0.881
INT8
0.882
FP32
0.847
INT8
0.854
0
0.5
（ONNX）
1.0
Qwen、BERTともにFP32 → INT8でAUCの低下も見られなかった
© DeNA Co., Ltd.
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/GJ5M9915J4.jpg)

4
量子化による影響は小さく、CPU計算は大幅に短縮
ONNX FP32 → ONNX INT8 で判定品質と計算時間の比較
比較する指標
Qwen
BERT
ROC-AUC
0.881 → 0.882
0.847 → 0.854
誤終了 ≤ 5% の平均待ち
838 → 868 ms
867 → 904 ms
CPU計算時間（128 tokens）
758.8 → 275.0 ms
140.6 → 78.4 ms
量子化で約1.8〜2.8倍高速化し、精度の低下は4%程度に抑えられた！
QwenとBERTの精度の差も小さく、今回の用途では高速なBERTが最適
© DeNA Co., Ltd.
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/9E29221G7R.jpg)

5. まとめ
© DeNA Co., Ltd.
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/D7Y4YYZGEM.jpg)

5
まとめ
成果
CPUで平均78.4 msの低遅延な判定器を作成。
Qwen/BERTともにVADと比較して大幅な精度改善。
限界
文字だけでは抑揚やためらいといった差異を捉えきれない。
今日の要点
テキストの判定に、GPU・大規模LLMは必須ではない！
小型モデル＋用途に合う学習データで実装できる。
タスクに応じて必要な精度・遅延・コストを満たすモデルを選択すべき
© DeNA Co., Ltd.
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/VENYPP38J8.jpg)

Appendix
© DeNA Co., Ltd.
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/Y79P339XE3.jpg)

A
補足：QwenとBERTで異なる入力書式
会話履歴＋現在発話をモデルごとの形式に整形する
Qwen：公式ChatTemplate
BERT：今回定義した書式
&lt;|im_start|&gt;user
&lt;s&gt;会話履歴:
初めまして！&lt;|im_end|&gt;
ユーザー: 初めまして！
&lt;|im_start|&gt;assistant
アシスタント: 初めましてー！
初めましてー！&lt;|im_end|&gt;
現在のユーザー発話:
&lt;|im_start|&gt;user
本日は暑かったですね！&lt;/s&gt;
本日は暑かったですね！
現在のuserは &lt;|im_end|&gt; で閉じず、
次の &lt;|im_end|&gt;トークン確率を使う。
© DeNA Co., Ltd.
日本語の見出しで履歴と現在発話を区切る。
&lt;s&gt;・&lt;/s&gt; は tokenizer が付加。
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/G78DMM997D.jpg)

A
補足：速度ベンチの全条件と実測値
平均計算時間（ms）
64 tokens
128 tokens
256 tokens
Qwen / PT CPU
750.7
864.3
1460.2
BERT / PT CPU
131.1
158.1
274.0
Qwen / ONNX FP32
410.5
758.8
1501.7
BERT / ONNX FP32
73.6
140.6
275.5
Qwen / ONNX INT8
155.7
275.0
548.8
BERT / ONNX INT8
44.0
78.4
156.6
Qwen / PT L4
41.0
40.3
43.0
BERT / PT L4
17.3
17.6
17.0
100入力 × 3反復 / warmup 10 / batch 1 / intra-op 4・inter-op 1
PyTorch 2.10.0 FP32 / ORT 1.26.0 / L4 / 4vCPU
© DeNA Co., Ltd.
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/L7LM33WMJR.jpg)

補足：判定時点までに届く文字だけを入力する
A
ASRの到着が遅れるのをシミュレーションし、文字起こしに500 msの遅延を入れる
500 msの到着遅延
この部分の文字は入力に使える
0秒
未到着
1.7秒
無音
2.0秒
発話停止
2.2秒
スコア取得
参考：LiveKit eot-bench
© DeNA Co., Ltd.
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4EMYDD96EW.jpg)

A
補足：確率だけでなく、終了までの待ち方を比較する
調整するのは「閾値」「終了を許す最短の無音時間」「タイムアウト」
閾値 = 0.5
最短待機 = 600 ms
0
p=0.8：閾値より高い
200 ms
タイムアウト = 2,500 ms
600 ms
2,500 ms
600 msで終了
p=0.2：閾値以下
2,500 msで終了
終了より先に発話が再開すれば、その無音区間では割り込まない。
参考：LiveKit eot-bench
© DeNA Co., Ltd.
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/PER944GNJ9.jpg)

A
補足：速さか誤終了率の片方を固定して評価する
同じ評価データで設定を変え、条件を満たす中の最良値を選ぶ
指標
説明
平均待ち時間 ≤ 300 ms
その速さで達成できる最小の誤終了率
平均待ち時間 ≤ 600 ms
待つ余裕を増やしたときの最小の誤終了率
誤終了率 ≤ 5%
途中で切る割合を抑えた最短の平均待ち
誤終了率 ≤ 10%
誤終了をより許したときの最短の平均待ち
4つの条件で最良の設定は異なる。
参考：LiveKit eot-bench
© DeNA Co., Ltd.
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/P7XQ22X8EX.jpg)

補足：ROC-AUCは終了と継続を分ける力を見る
A
終了を拾う割合（TPR）
ROC曲線
1.0
曲線が左上に寄るほどよい
上位3件を選択した点
FPR=1/5、TPR=2/3
縦：本当の終了のうち、拾えた割合
横：継続のうち、誤って拾った割合
無作為順位
AUCの目安 0.5
0
AUC ＝ ROC曲線の下の面積
1.0なら、終了と継続を完全に分離
1.0
継続を誤って拾う割合（FPR）
© DeNA Co., Ltd.
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/37K9MMWL7D.jpg)

補足：APはPrecisionとRecallの変化から計算する
A
Precision（適合率）
閾値を下げたときの変化
終了と判定した中で正しかった割合
APの階段
閾値90%
1
70%
40%
0.5
0
0
0.5
Recall（再現率）
1
APの面積
閾値
Precision
Recall
90%
100%（1/1）
33%（1/3）
70%
67%（2/3）
67%（2/3）
40%
50%（3/6）
100%（3/3）
横幅（Recallの増分）× 高さ（Precision）
を足し合わせる。
AP ＝ 塗った階段の面積 = 0.722
本当の終了のうち検出できた割合
© DeNA Co., Ltd.
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/LJ3WYY16J5.jpg)

A
© DeNA Co., Ltd.
補足：PR曲線とROC曲線
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/8JDK55XMEG.jpg)

© DeNA Co., Ltd.
41


