Tree of Thoughtとは
ToT / 思考の木
推論の途中経過を木構造の分岐として展開し、評価しながら有望な経路を探索するプロンプティング手法
ひとことで言うと
考え方をいくつも枝分かれさせ、良さそうな枝だけ選んで進める、AIの考える力を高める方法。
概要
Tree of Thought(ToT)は、Chain-of-Thoughtが1本の連続した推論過程しか生成しないのに対し、各推論ステップの時点で複数の異なる思考(次の一手)を分岐として生成するプロンプティング手法。 それぞれの分岐の有望さをモデル自身に評価させながら、探索木を辿って最終的な解にたどり着く。 各ノードでの評価結果に基づき、有望でない分岐を打ち切り(枝刈り)、有望な分岐を優先的に深く探索するといった、幅優先探索や深さ優先探索に類似した探索戦略を組み合わせられる。 途中で行き詰まった場合に別の分岐へ戻ってやり直す(バックトラック)ことができるため、Chain-of-Thoughtのように1本道の推論で誤った方向へ進んでしまうと後戻りできない弱点を補える。 パズルや創作的な文章生成など、複数の候補を比較しながら試行錯誤する必要があるタスクで、Chain-of-Thoughtより高い成功率を示すことが報告されている。
背景
Chain-of-Thoughtは推論過程を言語化させることで精度を高めるが、1本道の推論であるため、途中で誤った方向へ進んでしまうと軌道修正が難しいという弱点があった。 Tree of Thoughtは、複数の思考の分岐を保持して評価・探索し、より柔軟に誤りを修正しながら解へたどり着けるようにする目的で考案された。
歴史
2023年: Yaoらが論文「Tree of Thoughts: Deliberate Problem Solving with Large Language Models」を発表し、パズル的なタスクでの有効性を示す。
ワークフロー
現在の思考状態から、モデルに次に取り得る複数の思考(分岐)を生成させる。 各分岐の有望さをモデル自身、またはルールベースの評価関数で採点する。 評価の低い分岐を打ち切り、有望な分岐を優先的に探索し、必要なら行き詰まった分岐から別の分岐へ戻りながら、最終的な解が見つかるまで繰り返す。
コード例
分岐生成と評価による探索(概念的な実装例)
def tree_of_thought(problem, llm, evaluator, breadth=3, depth=3):
states = [problem]
for _ in range(depth):
candidates = [llm.propose(s) for s in states for _ in range(breadth)]
scored = [(evaluator(c), c) for c in candidates]
states = [c for _, c in sorted(scored, reverse=True)[:breadth]]
return states[0]利点
- 複数の候補を比較・評価しながら探索するため、1本道の推論より柔軟に誤りを修正できる
- 行き詰まった場合に別の分岐へ戻れるため、複雑な探索を要するタスクへの対応力が高い
- パズルや創作的な生成タスクなど、複数の妥当な解法があるタスクで高い成功率を示す
欠点
- 複数の分岐を生成・評価するため、Chain-of-Thoughtや単純な1回推論よりモデル呼び出し回数がずっと多くなる
- 分岐の評価基準の設計次第で探索の質が左右され、チューニングの手間がかかる
- 単純なタスクでは、探索のオーバーヘッドに見合う精度向上を得にくい
比較
- Chain-of-Thought — Tree of Thoughtは、Chain-of-Thoughtの1本道の推論を複数分岐の探索木へ拡張した手法
- Self-Consistency — Self-Consistencyが独立した推論経路の多数決で答えを決めるのに対し、Tree of Thoughtは分岐を評価しながら探索する
- 探索木 — Tree of Thoughtは、探索木の考え方をLLMの推論プロセスへ応用したもの
関連用語
よくある質問
Tree of ThoughtとChain-of-Thoughtの違いは?
Chain-of-Thoughtは1本道の推論過程を生成するのに対し、Tree of Thoughtは各ステップで複数の思考を分岐させ、評価しながら有望な経路を探索する。バックトラックにより誤りの修正もしやすい。
Tree of Thoughtはどんなタスクに向いている?
パズルのように複数の手順を試行錯誤する必要があるタスクや、創作的な文章生成のように複数の候補を比較したいタスクに向いている。単純な質問応答ではオーバーヘッドに見合わないことが多い。