「LLMに生の数値データを食わせるな」——AI界隈ではわりと定説になっている。
LLMのトークナイザは数値を文字列として処理するので、統計的なトレンドや周期性は
原理的に理解できない、と。試してみた。
やったこと
Seeed XIAO nRF52840 SenseのIMU(LSM6DS3)から加速度データをBLEで飛ばし、
ブラウザで10秒間キャプチャして、そのままGemini 2.5 Flashに送りつけた。
プロンプトはこれだけ。
以下の加速度データ(x,y,z)の連続記録から、私の動きの特徴(例:円を描いた、激しく振った、静止していた等)をユニークに400文字以内で分析して。
FFTも、移動平均も、何の前処理も無し。生の数値配列をそのまま丸投げ。
仕組み
構成はシンプルだ。
XIAO nRF52840 Sense (IMU 10Hz)
│ BLE Notify
▼
ブラウザ (Web Bluetooth API)
│ 10秒間バッファリング → 約100点の[x,y,z]
▼
Gemini 2.5 Flash API
│
▼
「あなたの動きは……」
Xiao nRF52840 SenseにはIMU(LSM6DS3)が内蔵されている。配線ゼロで加速度が取れる。
100msごとに加速度のx, y, zをカンマ区切りの文字列にしてBLE Notifyで飛ばす。
ブラウザ側はWeb Bluetooth APIでBLE接続し、受け取ったデータを配列にためる。
10秒経ったら配列をそのままプロンプトに埋め込んでGemini APIに投げる。
ソースコードを公開しています。
結果
意外といける。
XIAOを持って腕を左右に往復したら「何かを繰り返し振り回した」と返ってきた。

静止して一瞬激しく振ったら「激しい衝撃や振り動作が加わった」と、
机に置いたまま放置したら「ほぼ静止状態、重力加速度のみ検出」と返ってくる。
少なくとも10秒・100点程度の短いデータならLLMはパターンを読み取れる。
なぜうまくいったのか
今回の条件はLLMにとってかなり甘い。
- データが短い
約100点、トークン数にして数百。コンテキストウィンドウに余裕で収まる。 - パターンが人間にも明瞭
「振る」「静止」「回す」は、数値の並びを眺めれば人間にも分かるレベルの変化だ。LLMも学習データの類似パターンに当てはめて言語化できる。 - 定性的な回答でOK
「異常スコア0.85、Z軸振動の寄与度52%」みたいな定量的な精度は求めていない。
都合の良い測定データを切り取っただけとも言える。
まとめ ── 短尺ならいける
今回の実験で分かったのは、LLMの数値処理能力はゼロではないということだ。
短くて明瞭なデータなら、前処理なしでも驚くほどまともに動く。
ただ、これを産業IoTの本番運用に持っていこうとすると一気に破綻する。
トークン数は爆増するし、微小変化を見逃してしまう。定量分析も難しい。
| 条件 | 生データ → LLM | 厳しくなる |
|---|---|---|
| データ長 | 数秒〜数十秒 | 数時間〜連続 |
| パターン | 明瞭(振り、静止、回転) | 微小(ドリフト、周期変動) |
| 求める精度 | 定性的(「〜っぽい」) | 定量的(スコア、閾値判定) |
| 頻度 | スポット分析 | 常時監視 |
本格運用は生データ丸投げでは無理だ。
前処理で数値を因数分解した結果をLLMに渡すのが効果的らしい。
その話は次回。


コメント