カテゴリ
LLM
ステータス
稼働中技術スタック
モデル
この実験では、毎秒1万件を超える流入テキストを100ms未満で分類する高スループットな感情分析パイプラインを構築した。ファインチューニングしたDistilBERTをONNX Runtimeで提供し、肯定・否定・中立を94%の精度で分類して、傾向を異常検知付きのライブダッシュボードへ描く。
ラベル付きテキスト12万件を集めた複合データセットでDistilBERTをファインチューニングした。ツイート5万件(Sentiment140)、商品レビュー4万件(Amazon)、サポートチケット3万件(社内データ)である。モデルは推論を最適化するためONNXへ書き出した。比較対象はRoBERTa-base、VADER、GPT-3.5のゼロショットで、5,000件のテストセットで評価した。スループットはKafkaベースのパイプラインで、毎秒1千件、5千件、1万件の模擬ストリームを流して検証した。
ファインチューニングしたDistilBERTをONNX Runtimeで提供し、高スループットな推論を実現する。Kafkaがメッセージの取り込みを担い、コンシューマーグループでスケールする。ClickHouseが時系列の感情データを保持し、傾向の分析に使う。FastAPIが分類APIを提供する。Next.jsとWebSocketの更新でライブダッシュボードを動かす。
この実験から得られた、もっとも重要な知見です。
DistilBERTはRoBERTa並みの精度で6倍のスループット
ファインチューニングしたDistilBERTの精度は94%で、RoBERTaの95.2%に迫った。一方で処理量は毎秒10,200件と、RoBERTaの1,700件を大きく上回った。ストリーミング用途では、1.2%の精度差より6倍のスループットが圧倒的に価値がある。
ONNX Runtimeで推論が2倍速くなる
PyTorchのモデルをONNXへ変換してONNX Runtimeで動かすと、1件あたりのレイテンシは18msから8msへ下がった。32件をまとめて処理すれば、1件あたり2msまで下がる。
モデルサイズよりドメインへの適応が効く
サポートチケットでファインチューニングしたDistilBERTは、同じ領域のセンチメントで91%を記録した。同じデータに対してGPT-3.5のゼロショットは78%だった。小さいモデルの領域特化は、大きな汎用モデルに勝る。
感情の変化を5秒以内に検知
30秒の移動平均に対するスライディングウィンドウのzスコア検出により、感情の大きな変化を5秒以内に通知できる。危機対応をリアルタイムに始められる。
メッセージはKafkaのトピックへ届き、ONNXモデルを載せた分類ワーカー群が消費する。分類された各メッセージは、時刻、送信元、感情ラベル、確信度とともにClickHouseへ書き込まれる。ダッシュボードはClickHouseへリアルタイムの集計、つまり感情の分布、傾向線、流量を問い合わせ、異常の閾値を超えたときはWebSocketでプッシュ更新を受け取る。
テストセットでの分類精度は94%。Kafkaのコンシューマー8台で毎秒10,200件の持続的なスループットを達成した。1件あたりのレイテンシはp50で8ms、p99で23ms。異常検知の平均レイテンシは4.7秒。ダッシュボードは100ms間隔のデータ更新で60fpsを維持する。
検証を進めるうえで解決が必要だった技術的な課題です。
皮肉と文脈に依存する感情
「またダウンか、素晴らしいね」のような皮肉は40%の割合で肯定と分類されていた。皮肉のラベルを付けた1万件を追加で学習させた皮肉検出ヘッドをモデルへ加え、誤分類を15%まで減らした。
バースト時のコンシューマー遅延
毎秒5万件のスパイクでコンシューマーの遅延が積み上がった。遅延が1,000件を超えると新しいワーカーを起動し、バーストが収まったら安全に縮退する自動スケーリングを実装した。