はじめに
こんにちは、fuyu-quantです.
今回はTree of Thoughtsの紹介になります.Tree of ThoughtsはLLMに直接入力しても解くことが難しい探索や先読みが必要なタスクを解く精度を上げるLLMを利用するフレームワークになります.
記事に誤り等ありましたらご指摘いただけますと幸いです。
目次
1. Tree of Thought
ライセンス:MIT(商用利用可能)
リポジトリ:https://github.com/princeton-nlp/tree-of-thought-llm
論文:https://arxiv.org/abs/2305.10601
Language modelではさまざまなタスクを解くことができるが,探索や先読み,初期の設定が重要な役割を果たすタスクなどを解くことが難しいという課題があります.ToT(Tree of Thought)ではさまざまな推論の経路を考え,選択肢を自己評価し,意思決定を行うことができます.これによりいくつかのタスクにおいての性能を向上させました.
2. 使い方
すぐに試したい方はData Science WikiのページまたはColabのリンクから実行してみてください
今回は4つの整数(4,5,6,10)と四則演算を使い24という数字を作ることができるか?という問題設定でTree of Thoughtsを試してみます.
※現状だとこの数字の問題を解くようにアルゴリズムが実装されているみたいで,他の問題をこのOSSを使って解くことは出来なさそうです.しかし,実装は公開されているのでこのアイデアをもとに他の問題を解くための実装はできそうです.
通常のGPT-4で解く
まず初めにGPT-4だけで問題が解けないのかを確認します.
!pip install langchain
!pip install openai
以下ではLangChain経由でGPT-4を使っています.
from langchain.llms import OpenAI
model_name="gpt-4"
llm = OpenAI(temperature=0, model_name=model_name)
GPT-4に直接入力して答えが出力されるか確認してみます.他にはプロンプトの工夫があるかもしれませんが一旦は以下のような文章を入力しています.
prompt = "Can you give me a formula that uses all 4,5,6,10 and only four arithmetic operations and the answer is 24?"
output = llm(prompt)
print(output)
# 出力
Sure, here is a formula:
(10 - 4) * 6 - 5 = 24
それでは実際にTree of Thoughtsを使って解いてみましょう.
Tree of Thoughts
以下のコマンドでインストールする.
!pip install tree-of-thoughts-llm
import argparse
from tot.methods.bfs import solve
from tot.tasks.game24 import Game24Task
以下で各種設定を行います.
args = argparse.Namespace(backend='gpt-4',
temperature=0.7,
n_generate_sample=1,
n_evaluate_sample=3,
n_select_sample=5,
method_generate='propose',
method_evaluate='value',
method_select='greedy'
)
以下のコードを実行するとTree of Thoughtsが実行され,正しい答えとなる式が見つかるまで探索を行います,(結構,API費がかかります.)
task = Game24Task()
# Tree of Thoughts
ys, infos = solve(args, task, 900)
以下が出力結果になります.正しい答えを導くことができています.
print(ys[0])
# 出力
10 - 4 = 6 (left: 5 6 6)
5 * 6 = 30 (left: 6 30)
30 - 6 = 24 (left: 24)
Answer: (5 * (10 - 4)) - 6 = 24
以下のサイトにはTree of Thoughtsのコードに関する情報が記載されています.実装の詳細が気になった方はぜひ参考にしてみてください.
3. おわりに
今回はTree of Thoughtsの紹介でした.LLMが解くことが難しい問題を探索を行わせることで解かせるのはとても面白しアプローチだと思いました.一方で論文で検証されている使い方などはLLMを使わなくてもより効率的に解く手法が存在しており,Tree of Thoughtsをわざわざ使っている感じがしました.Tree of Thoughtsを積極的に使っていきたい利用シーンなどがあるといいですね.
記事に誤り等ありましたらご指摘いただけますと幸いです。