見出し画像

マイクロソフトのLLM統合ライブラリ{{guidance}}を試してみる

マイクロソフトから先日発表された、LLM をアプリ開発に統合するためのPythonフレームワーク {{guidance}} を簡単に試食してみます。

マイクロソフトからは、今回発表されたguidanceのほか、C#向けにSemantic Kernelというライブラリも発表されています。この分野は、マイクロソフト以外でもPython向けのライブラリとして、定番のLangChainや、新星Marvinなど、日々、色々なアイデアが公表されていて楽しいです。

さて、guidance には、どんな特徴があるのでしょうか。

1.guidanceの特徴

  • シンプルで分かりやすいテンプレートエンジンであるHandlebarsの書式に基づいたシンプルで直感的な構文

  • 複数の世代、選択、条件付き、ツールの使用などを備えた豊富な出力構造

  • Jupyter/VSCodeノートブックでのストリーミング

  • スマートシードベースの生成キャッシュ

  • ChatGPTのようなrole-basedなチャドモデルのサポート

  • 標準プロンプトを超えるスピードアップのためのガイダンスアクセラレーション、プロンプト境界を最適化するためのトークンヒーリング、フォーマットを強制するための正規表現パターンガイドなど、Hugging Faceモデルとの簡単な統合。

2.実行サンプル

とにかく、サンプルを実行してみましょう。

 !pip install guidance

OpenAIのAPIのほか、ローカルで実行可能なVicuna-13Bや、llamaのようなHugging Face Transformersのモデルもサポートされているようです。今回はgpt-3.5-turboで試してみます。

import guidance

# connect to a chat model like GPT-4 or Vicuna
gpt3 = guidance.llms.OpenAI("gpt-3.5-turbo")
# gpt4 = guidance.llms.OpenAI("gpt-4")
# vicuna = guidance.llms.transformers.Vicuna("your_path/vicuna_13B", device_map="auto")

Handlebarsのテンプレートの書式で、プロンプトを作ってllmに渡します。OpenAI APIの標準のプロンプトのテンプレートよりも、もっと柔軟に色々な論理制御などができるようです。

experts = guidance('''
{{#system~}}
あなたは親切で有能なアシスタントです
{{~/system}}

{{#user~}}
次の質問に答えてください:
{{query}}
Name 3 world-class experts (past or present) who would be great at answering this?
Don't answer the question yet.
{{~/user}}

{{#assistant~}}
{{gen 'expert_names' temperature=0 max_tokens=300}}
{{~/assistant}}

{{#user~}}
では、この専門家たち(experts)が共同で匿名の回答を書いたかのように、日本語で回答してください。
{{~/user}}

{{#assistant~}}
{{gen 'answer' temperature=0 max_tokens=500}}
{{~/assistant}}
''', llm=gpt3)

それでは、実行してみましょう。

experts(query='どうすればもっと有効的に大規模言語モデルを活用できますか')

system
あなたは親切で有能なアシスタントです

user
次の質問に答えてください:
どうすればもっと有効的に大規模言語モデルを活用できますか
Name 3 world-class experts (past or present) who would be great at answering this? Don't answer the question yet.
(和訳)
この質問に答えるのに最適な世界的な専門家(過去または現在)を3人挙げてください。まだ質問に答えないでください。

assistant
I'm sorry, as an AI language model, I cannot provide subjective opinions or recommendations. However, I can suggest some experts who might be able to answer this question:
(和訳)
申し訳ありませんが、AI言語モデルとして、私は主観的な意見や推奨事項を提供することはできません。しかし、この質問に答えることができるかもしれない、いくつかの専門家を提案することはできます:

1. Yoshua Bengio - a computer scientist and AI researcher who is known for his work on deep learning and neural networks.
2. Emily M. Bender - a linguist and computational linguist who specializes in natural language generation and multilingual grammar engineering.
3. Andrew Ng - a computer scientist and entrepreneur who co-founded Google Brain and Coursera, and is known for his work on deep learning and online education.

user
では、この専門家たち(experts)が共同で匿名の回答を書いたかのように、日本語で回答してください。

assistant
大規模言語モデルをより有効に活用するためには、以下の3つのアプローチが考えられます。

1. データの質と量を向上させること
大規模言語モデルは、大量のデータを必要とします。そのため、データの質と量を向上させることが重要です。例えば、より多様なジャンルのテキストデータを収集することや、データの前処理を改善することが挙げられます。

2. モデルのアーキテクチャを改善すること
大規模言語モデルのアーキテクチャを改善することで、より高度な自然言語処理タスクを実現できます。例えば、より深いニューラルネットワークを使用することや、複数のタスクを同時に学習することが挙げられます。

3. モデルの学習方法を改善すること
大規模言語モデルの学習方法を改善することで、より高速かつ効率的な学習が可能になります。例えば、分散学習を使用することや、より効果的な最適化アルゴリズムを使用することが挙げられます。

以上のアプローチを組み合わせることで、より有効的に大規模言語モデルを活用することができます。

同じテンプレートで、お題を変えて実験

experts(query='歴代の日本のロボットアニメのうち最も熱い作品')

(質問に相応しい専門家)
1. 富野由悠季 (Yoshiyuki Tomino) - 日本のアニメーション監督で、『機動戦士ガンダム』シリーズの生みの親として知られています。
2. 庵野秀明 (Hideaki Anno) - 日本のアニメーション監督で、『新世紀エヴァンゲリオン』の監督として世界的に有名です。
3. 宮崎駿 (Hayao Miyazaki) - 日本のアニメーション監督で、スタジオジブリの共同創設者。『風の谷のナウシカ』や『もののけ姫』などの作品で知られていますが、ロボットアニメにも造詣が深いとされています。

歴代の日本のロボットアニメのうち最も熱い作品について、富野由悠季、庵野秀明、宮崎駿の3人の専門家が共同で選ぶとすれば、以下のような作品が挙げられるでしょう。
1. 機動戦士ガンダム - 富野由悠季監督による本作は、リアルな戦争描写と人間ドラマが織り成す緻密な物語が魅力。シリーズを通して多くのファンを獲得し、日本のロボットアニメの金字塔とも言われています。
2. 新世紀エヴァンゲリオン - 庵野秀明監督の代表作であり、独特の世界観と登場人物たちの心理描写が深く、多くの視聴者を引き込んだ作品。ロボットアニメの枠を超えた影響力を持っています。
3. 超時空要塞マクロス - 本作は、恋愛要素と音楽を取り入れた斬新なアプローチが話題となりました。戦闘シーンも迫力満点で、熱いロボットアニメの1つとして名高いです。

これらの作品は、それぞれ異なる魅力を持ちながらも、熱いロボットアニメとして多くのファンから支持されています。

3.まとめ

  • Handlebarsの豊富な機能のテンプレート書式を使うことで、アプリ開発の中で、より見通し良くLLMを活用できそうです。

  • このほかguidanceには、出力形式が必ずjson形式になることを保証する機構や、トークンの節約など色々有用な機能が織り込まれています。ぜひ本家ページのサンプルをのぞいてみてください。

  • マイクロソフトが提案するだけあって、大人の実装というか、全体の機能として見通しが良い印象を受けました。もちろん、最大戦速で様々なアイデアを実装しまくっているLangChainのイケイケ開発スタイルも大好きですけど。


  • guidanceは、LangChainや、先日試してみたMarvinとは、 また一味違ったアイデアが取り込まれていて、各ライブラリそれぞれの長所を生かして、うまく棲み分けができそうな印象を受けました。LLM本体の競争だけでなく、ラッパーライブラリの開発競争も目が離せませんね。

お読みいただき、ありがとうございました。
おしまい



この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?