精度テスト・2026年10月
Sobaの糖質の推定を食事写真400枚でテストしました
写真は、各食事の糖質が計量または記録されている2つの公開研究データセットから選びました。以下に、結果、テストの方法、Sobaの推定が外れた食事を示します。
68.5%写真1枚だけで、実際の糖質との差が10 g以内だった食事の割合
+4研究の記録どおりに食品名を補足したときの、10 g以内の割合の増加(ポイント)
5.2 g写真1枚だけの場合の誤差の中央値
わかったこと
このセクションの数値は、重さの修正や補足を加える前の、写真だけからのSobaの最初の推定値です。推定値の49%が、実際の糖質との差5 g以内でした。10 g以内の割合の95%信頼区間は64.0%〜72.9%です。
小さめと中くらいの食事で、推定は実際の値に最も近くなりました。糖質15 g未満の食事では、推定値の89%が10 g以内でした。
量の多い食事は、たいてい少なめに推定されました。糖質60 g以上の42食のうち38食で、Sobaの推定値は実際より低くなりました。推定値の中央値は実際の量の64%でした。主な原因は重さです。この38食のうち30食で、Sobaは食品の重さを実際より15%以上軽く見積もりました。一方、100 gあたりの糖質はたいてい実際に近い値でした。
Sobaを使うときのポイント
- パン、ご飯、パスタ、じゃがいも、ピザなどが多い食事では、できれば主な糖質源の食品を量ってください。推定が40 g以上の場合は、多めにも少なめにもずれました。84食のうち、32食は10 gを超えて多く、23食は10 gを超えて少なく推定されました。
- クッキー1枚やピザ1切れのような小さな単品は、実際より重く推定されることがあります。
- 飲み物に溶けた砂糖は写真に写りません。テストでは、甘いアイスティーが無糖と判断されました。「甘いお茶」のような短い補足を入力するか、バーコードを読み取ってください。
- 包装された食品では、バーコードから栄養成分表示の値を確認できます。
アプリで追加できる情報
上の結果は、写真1枚だけから得たものです。アプリでは食事について短い補足を入力でき、深度カメラを搭載したiPhoneではSobaが食品までの距離も測ります。それぞれを加えて、テストを繰り返しました。
写真400枚すべて
深度データのある食堂の写真200枚
文章による補足
「甘いお茶」や「そばの実」のような短い言葉で、写真に写らない情報を補えます。テストでは、400枚の写真それぞれに、データセットの記録にある主な食品名を量なしで補足として添えました。例:「Coffee, brewed; Coffee creamer, liquid, fat free」。10 g以内の割合は68.5%から72.8%に上がり(増加分の95%区間:0.7〜7.9ポイント)、誤差の中央値は5.2 gから4.5 gに下がりました。
補足が最も役立ったのは、写真を複数の意味に読める場合です。補足なしでは、Sobaはクリーム入りのコーヒーをキャラメルソースと判断し、糖質を162 gと推定しました。補足ありの推定は5.5 gで、食事記録の値は2.7 gです。参加者が自分の食事を撮影したSNAPMeの写真では、10 g以内の割合が59.5%から67.5%に上がりました。食品が見分けやすい食堂の写真では、77.5%から78.0%とほとんど変わりませんでした。
補足で食品名はわかりますが、量はSobaが写真から判断します。糖質60 g以上の42食のうち、補足ありでは37食、補足なしでは38食が少なめに推定されました。テストの補足はデータセットの記録をそのまま写したものです。増加分の大部分は最初の200食で生じ、8.0ポイントでした。2つ目の200食では0.5ポイントでした。ご自身で入力する補足の効果は、これより小さくなる可能性が高いです。
深度カメラによる距離
LiDARスキャナまたは2つ以上の背面カメラを搭載したiPhoneでSobaのカメラを使って撮影すると、Sobaが食品までの距離を測り、画面に写る範囲の幅をセンチメートル単位でモデルに伝えます。Nutrition5kにはすべての写真に深度カメラの記録があるため、その200食にこの測定値を加えてテストを繰り返しました。10 g以内の割合は77.5%から82.0%に上がり(増加分の95%区間:1.0〜8.3ポイント)、誤差の中央値は3.9 gから3.1 gに下がりました。量の多い食事は、13食のうち12食で引き続き少なめに推定されました。これらの写真は、決まった高さから真上に向けて撮影されています。斜めから撮った写真は、まだ測定していません。
深度の測定値と補足の両方を加えた結果は78.5%でした。この食堂の写真では補足で加わる情報が少なく、深度のみとの差の95%区間(−8.8〜+1.5ポイント)はゼロを含みます。
ご自身による修正
食品の重さがわかる場合は入力してください。すべての数値が再計算されます。このテストでは、重さが大きな誤差の主な原因でした。
Sobaは、推定値ごとに重さの推定範囲を表示します。計量済みのNutrition5kの皿200枚では、皿の実際の重さがこの範囲に入ったのは97枚で、約半分でした。範囲は、モデルが重さがあると見込む幅を示します。最も確実に確かめるには、キッチンスケールで量ってください。
食事の量ごとの結果
| 実際の糖質 | 食事数 | 10 g以内 | 20 g以内 | 誤差の中央値 |
|---|---|---|---|---|
| 15 g未満 | 167 | 88.6% | 98.8% | 2.0 g |
| 15〜30 g | 94 | 69.1% | 88.3% | 6.2 g |
| 30〜60 g | 97 | 54.6% | 84.5% | 8.4 g |
| 60 g以上 | 42 | 19.0% | 38.1% | 25.4 g |
全体の結果は、この内訳によって変わります。テストした食事の42%は糖質15 g未満でした。普段の食事の量が多い場合は、一般的な誤差も大きくなると考えてください。
これらのグループは実際の糖質で分けています。解析の時点では、アプリは実際の糖質を知りません。Sobaの推定値で分けると、84食が40 g以上と推定され、そのうち55食で10 gを超える差がありました。32食は多め、23食は少なめでした。そのため、推定が40 gに達すると、アプリは主な糖質源の食品を量るように案内します。
テストした4つの食事
推定が近かった2例と、外れた2例です。Sobaの食品名と重さは、Sobaの回答から引用しています。
写真:Nutrition5kデータセット、Google Research、CC BY 4.0。このページ用にサイズを変更しています。
2つのデータセットと2種類の写真
| データセット(各200食) | 10 g以内 | 誤差の中央値 | 誤差の平均 |
|---|---|---|---|
| Nutrition5k | 77.5% | 3.9 g | 6.8 g |
| SNAPMe | 59.5% | 6.8 g | 12.2 g |
Nutrition5kの皿は、Googleの社員食堂のものです。すべての食材が計量され、固定したカメラで各皿を真上から撮影しています。条件が整っており、Sobaの結果が最もよかったのはこちらです。
SNAPMeは、米国農務省とカリフォルニア大学デービス校による研究です。米国在住の95人が食べる前に自分の食事を撮影し、食事評価ツールASA24で食事記録をつけました。写真は、利用者がSobaで撮る写真に近いものです。基準値は参加者の食事記録によるもので、記録そのものにも誤差があります。2つのデータセットの差は、一部は写真の違い、一部は基準値の違いによるものです。
公表された研究との比較
Rodríguez-Jiménezらの研究(Nutrients、2025年)は、SNAPMeの74食の写真だけでChatGPT-5をテストしました。糖質の平均絶対誤差は12.99 g、中央値は8.75 gと報告されています。
| 写真のみ | 食事数 | 誤差の平均 | 誤差の中央値 |
|---|---|---|---|
| ChatGPT-5(論文の値) | 74 | 12.99 g | 8.75 g |
| Soba | 200 | 12.2 g | 6.8 g |
著者らは食事の選び方が異なり、一部の基準値を手作業で修正しているため、2行はおおまかにしか比較できません。誤差の水準は同程度です。同じ研究では、食事の脂質、糖分、肉についての短いメモを加えると、誤差の平均が11.29 gに下がりました。Sobaでは、SNAPMeの200食で食品名の補足を加えると、誤差の平均が12.2 gから10.2 gに下がりました。
Sobaが使うモデル
最初の200食で、Sobaの指示を使って8つのモデルを実行しました。
| モデル | 10 g以内 | 所要時間の中央値 |
|---|---|---|
| Google Gemini 3.7 Flash | 73.0% | 3.7秒 |
| Google Gemini 3.8 Flash | 71.5% | 4.8秒 |
| Google Gemini 3.5 Flash-Lite | 69.0% | 2.1秒 |
| Google Gemini 3.6 Flash | 67.5% | 3.3秒 |
| OpenAI GPT-6 Luna | 65.0% | 6.9秒 |
| OpenAI GPT-6 Luna Pro | 63.0% | 11.7秒 |
| OpenAI GPT-6.1 Sol | 58.0% | 13.1秒 |
| Anthropic Claude Sonnet 5.5 | 53.0% | 6.0秒 |
各モデルをOpenRouter経由で1回ずつ実行し、Sobaが2026年10月より前に使っていたリクエスト設定を使いました。Claude Sonnet 5.5は、OpenRouterが選んだプロバイダー経由で、200枚のうち41枚に対して空の食品項目を返しました。残りの写真では66.7%でした。GPT-6.1 Solは、糖質を平均10 g多く推定しました。
この200食ではGemini 3.7 Flashが最も高い結果でした。8つのモデルを比べて1位になったモデルは、実力より良く見えることがよくあります。そこで、2つ目の200食で確かめました。そこではGemini 3.6 Flashと同じく70.5%で、料金はより高くなりました。Sobaは引き続きGemini 3.6 Flashを使います。
Gemini 3.6 Flashに推論の時間を長く与える設定も試しました。400食で10 g以内の割合は4.1ポイント上がりましたが、5 g以内の割合と30 gを超える誤差の件数は変わりませんでした。解析1回の時間は3.5秒から6.6秒と2倍になりました。Sobaでは速い設定を使っています。
95%区間、食事ごとのデータ、各表を再計算するスクリプトを含む比較の全文:食事写真で比べた8つのAIモデル(英語)。
テストの方法
食事の選び方
候補は、Nutrition5kの真上からの写真の公式テスト分割にある505皿と、食べる前に撮影されたSNAPMeの写真1,457枚です。その前に22件を除外しました。値が無効な皿と食事、および1つの食事記録に一意に対応づけられないSNAPMeの写真です。
乱数シードを固定したスクリプトで、各データセットから100食ずつ選びました。糖質の範囲を4等分し、それぞれから25食です。同じ10分間に撮影された食堂の皿は似ていることが多いため、スクリプトは1つの10分間から選ぶ皿の数を制限しました。続いて同じ方法で2つ目の200食を選び、最初のセットとは写真も食事も重ならないようにしました。
2つのセット
誤差の分析とSobaの指示の変更は、最初の200食だけで行いました。2つ目の200食は、結果が再現するかの確認に使いました。上で述べたGemini 3.7 Flashの結果は、この方法で見抜きました。
Sobaの実行
各写真は、アプリと同じサーバーのコードで処理しました。指示、モデル、設定もアプリと同じです。写真は、アプリが送信前に行うのと同じように、長辺1,024ピクセルに縮小しました。メインの実行では、文章の補足、深度カメラのデータ、後からの修正はいずれも使っていません。補足や深度データを使った実行も同じコードで行い、変えたのはその入力だけです。アプリの言語はロシア語に設定しました。
誤差の測り方
Sobaは糖質(食物繊維を除いた値)と食物繊維を別々に返します。データセットには炭水化物の総量が記載されているため、Sobaの糖質と食物繊維の合計を総量と比較しました。主な指標は、差が10 g以下の食事の割合です。解析に失敗した場合は外れとして数える予定でしたが、失敗はありませんでした。95%区間は10,000回の再標本化によるブートストラップで求め、SNAPMeの同じ参加者の食事や、食堂の同じ10分間の皿は1つのまとまりとして扱いました。
このテストの限界
- すべての食事は米国のものです。Nutrition5kの皿は、1種類のカメラ設定で真上から撮影されています。
- 基準値には誤差があります。SNAPMeの値は自己申告の食事記録によるものです。Nutrition5kの一部の皿では、写っている食品がラベルから抜けています。
- テストしたのは写真からの解析です。文章での入力、バーコード検索、手動入力はテストの対象外です。
- テストの補足はデータセットの記録どおりに食品名を記載したもので、その効果は2つのセットで大きく異なりました(「文章による補足」を参照)。
- 深度の結果は、すべて真上から撮影されたNutrition5kの写真200枚だけが対象です。
- 測定したのは糖質です。たんぱく質、脂質、カロリーはこのページの対象外です。
- モデルの提供元はモデルを更新します。結果は2026年10月時点のSobaについてのものです。
Sobaは医療機器ではありません。数値は推定です。お皿の上の料理や食品の表示と照らして確認し、ご自身の糖尿病の療養計画に従ってください。
テスト後の変更
- SobaのOpenAIの予備モデルが動作していませんでした。リクエスト設定の1つであるtemperatureをOpenAIのモデルが受け付けず、リクエストはすべての設定を受け付けるプロバイダーだけを許可していたためです。この設定を削除しました。メインのモデルの結果は、設定ありで68.9%、なしで68.5%で、繰り返し実行したときの通常のばらつきの範囲内です。現在の予備モデルはGemini 3.7 FlashとGPT-6 Lunaです。
- テストのリクエスト3,614件のうち9件(0.25%)で、Geminiが同じ語句を繰り返し、解析に35〜87秒かかりました。現在のSobaは回答の長さを制限しており、このような繰り返しを早く止めます。
データと出典
食事ごとの結果(CSV、400行、英語):データセットのID、基準となる糖質、写真だけからのSobaの推定値、補足の文章、補足ありと深度データありの推定値。このファイルはSNAPMeのライセンスCC BY-SA 4.0に従います。
- Thames Q, Karpur A, Norris W, et al. Nutrition5k: Towards Automatic Nutritional Understanding of Generic Food. CVPR 2021. arXiv:2103.03375. データセット:github.com/google-research-datasets/Nutrition5k、CC BY 4.0。
- Larke JA, Chin EL, Bouzid YY, et al. Surveying Nutrient Assessment with Photographs of Meals (SNAPMe): A Benchmark Dataset of Food Photos for Dietary Assessment. Nutrients. 2023;15(23):4972. PMC10708545. データ:USDA Ag Data Commons、CC BY-SA 4.0。
- Rodríguez-Jiménez et al. Image-Based Dietary Energy and Macronutrients Estimation with ChatGPT-5: Cross-Source Evaluation Across Escalating Context Scenarios. Nutrients. 2025;17(22):3613. PMC12655113.