微調整、再教育、そして更なる進化:カスタムLLMで前進
『微調整、再教育、そして更なる進化:カスタムLLMで未来へ』
イントロダクション
ほとんどの方はすでにChatGPTを使用したことがあると思います。それは素晴らしいことです。なぜなら、この記事で私たちが始める旅の最初のステップを踏んでくれたからです!新しい技術をマスターするには、まずそれを使ってみることが重要です。それは水に飛び込んで泳ぎを覚えるようなものです!🏊♂️
もしGenAIを探求したいのであれば、現実の問題を選び、それを解決するためのアプリケーションの構築を始めてください。GenAIの中心にあるのは、ファウンデーションモデル(FM)とも呼ばれる大規模言語モデル(LLM)です。
モデルの消費者、調整者、ビルダーについては聞いたことがあるかもしれませんが、さらに詳しく説明します。
McKinseyは、それを受け手、形作り手、創り手として捉えており、GenAI Recogniseセッションで言及しています。
- 「AIサイバーセキュリティのスタートアップ企業、ヨーロッパと今度はアメリカからも、参集!」
- 「Google Quantum AIは、薬学、化学、および原子力エネルギーに関連する量子計算の応用を探るために3つのケーススタディを紹介します」(Google Quantum AIが、やくがく、かがく、およびげんしりょくエネルギーにかんれんするりょうしけいさんのおうようをさぐるためにみっつのけーすすたでぃをしょうかいします)
- このAI論文では、エッジコンピュータ上でも高品質な再構築とリアルタイム性能を実現するためのNeRFベースのマッピング手法が提案されています
この記事では、それぞれのレイヤーを詳しく見ていきます。
プラットフォームの増殖を使用例として
それをさらに詳しく掘り下げるために、すべてがはっきりとわかる実例に目を向けましょう。現代のテクノロジーの風景では、ほとんどのアプリが複数のプラットフォームで動作する必要があることは当然です。しかし、その中には注意点があります。各プラットフォームには独自のインターフェースと特異性があります。追加のプラットフォームへのアプリケーションのサポート拡張とそのようなマルチプラットフォームアプリケーションのメンテナンスは同じくらい困難です。
しかし、そこでGenAIが駆けつけて救いの手を差し伸べます。GenAIは、プラットフォームに関係なく、アプリケーションのために統一されたユーザーフレンドリーなインターフェースを作成することを可能にします。その魔法の材料は何でしょうか?大規模言語モデル(LLM)がこのインターフェースを自然で直感的な言語に変換するのです。
Linux、Windows、Macコマンド
さらに理解を深めるために、例えば私たちのマシンがLinux、Windows、またはMacである場合に、異なるシナリオごとに実行すべき正確なコマンドを知りたいとしましょう。以下の図は1つのシナリオを示しています:
エンドユーザーとアプリケーション開発者への価値
エンドユーザーとしては、各プラットフォームごとのコマンドを学び/知る必要がなく、自然かつ直感的に作業を完了できます。アプリケーションの開発者としては、ユーザーに見えるアプリケーションのインターフェースを、それぞれのサポートされるプラットフォームに明示的に変換する必要はありません。
参照アーキテクチャ
Open AIやAzure Open AIなどのさまざまなプロバイダーが提供するクラウドには、GPT3、GPT3.5、およびGPT4を含む複数のLLMが存在します。これらは補完、チャット補完などのさまざまなAPIを介して簡単にアクセスできます。
AIオーケストレータは、モデルとプロバイダー間のモデルとモデルの統一化されたアクセスをさらにシームレスにします。そのため、GenAIアプリケーションは、基礎となるプロバイダーやモデルと直接対話するのではなく、AIオーケストレータと対話します。そして、アプリケーションが必要とするように、構成可能で、または複数の基礎となるプロバイダーやモデルとのオーケストレーションを処理します。
柔軟性とモジュラリティのために、アプリケーションがサポートする各プラットフォームにはプラグインを持つことができます。これから続くセクションでは、これらのプラグインとオーケストレータで行えることについて詳しく説明します。
最後に、アプリケーションにはGenAIによって生成されたコマンドを実行するためにサポートするプラットフォームとの接続があります。
参照テクノロジー
- AIオーケストレータ: LangChain、Semantic Kernel
- クラウドモデル: Azure Open AI
設定
望む結果を得るために調整できる設定には数多くのものがあります。以下はセマンティックカーネルプラグインの典型的なconfig.jsonです:
{ "schema": 1, "description": "マイアプリケーション", "type": "completion", "completion": { "max_tokens": 300, "temperature": 0.0, "top_p": 0.0, "presence_penalty": 0.0, "frequency_penalty": 0.0, "stop_sequences": [ "++++++" ] }, "input": { "parameters": [ { "name": "input", "description": "コマンド実行シナリオ", "defaultValue": "" } ] }}
‘type’は、基になるLLMで実行するAPIのタイプを指定します。ここでは「completion」APIを使用しています。「temperature」はモデルの変動性や創造性を決定します。例えば、チャット中にAIが異なるフレーズで応答するようにすることで、会話を興味深く保つことができます。しかし、ここでは常に同じ正確な回答を求めています。そのため、値として0を使用しています。結果は、指定された区切り文字とともに異なるセクションで構成される場合があります。例えば、この場合は完全一致のコマンドのみを応答として出力するために、ここで「stop_sequences」を使用します。全てのパラメータを含めた入力を定義し、この場合は1つだけパラメータを使用してください。
プロンプトエンジニアリング
では、「プロンプトエンジニアリング」と呼ばれる話題について深入りしてみましょう。どのように活用できるか見ていきます。
システムメッセージ
システムメッセージは、モデルに対して正確にどのような振る舞いを期待しているかを伝えるものです。例えば、Linux bashプラグインでは、次のようなものがskprompt.txtの冒頭に記述されている可能性があります。
ユーザーの入力に基づいてLinux bashマシンのコマンドを生成する助けになるアシスタントです。あなたの応答には、コマンドのみが含まれ、説明はありません。ユーザーの入力に対しては、Linux bashのコマンドのみを考慮して応答を生成します。
これがシステムメッセージを表します。
フューショットプロンプティングと例
いくつかの質問と対応する回答の例を提供すると、モデルが正確な回答を出力しやすくなります。これは一般的にフューショットプロンプティングと呼ばれています。例えば、Linux bashプラグインでは、前述のシステムメッセージに続いて、次のような内容がskprompt.txtに記載されているかもしれません。
例
ユーザー:自分のIPを取得するアシスタント:curl ifconfig.me++++++ユーザー:サンフランシスコの天気を教えてアシスタント:curl wttr.in/SanFrancisco++++++ユーザー:"{{$input}}"アシスタント:
望む結果を得るために、適切な例や情報をシステムに調整することができます。
AIオーケストレーション
この設定とプロンプトエンジニアリングを組み合わせて、シンプルな例を作成し、意味カーネル内でAIオーケストレーションを管理する方法を見てみましょう。
import openaiimport osimport argparseimport semantic_kernel as skfrom semantic_kernel.connectors.ai.open_ai import AzureTextCompletionparser = argparse.ArgumentParser(description='GANC')parser.add_argument('platform', type=str, help='A platform needs to be specified')parser.add_argument('--verbose', action='store_true', help='is verbose')args = parser.parse_args()kernel = sk.Kernel()deployment, api_key, endpoint = sk.azure_openai_settings_from_dot_env()kernel.add_text_completion_service("dv", AzureTextCompletion(deployment, endpoint, api_key))platformFunctions = kernel.import_semantic_skill_from_directory("./", "platform_commands")platformFunction = platformFunctions[args.platform]user_query = input()response = platformFunction(user_query)print (respone)
このPythonスクリプトは、「platform」を必須の引数として受け取ります。指定されたプラットフォーム用にフォルダ「platform_commands」から適切なプラグインを読み込みます。ユーザーのクエリを受け取り、関数を呼び出して応答を返します。
最初の数回の使用では、既にLLMsには多くの知能が備わっているため、ここまでの実験だけで十分です。この単純な設定とプロンプトエンジニアリングだけでも、望む振る舞いに非常に近い結果が得られ、しかも非常に迅速です。
以下の技術は現時点ではかなり高度であり、返還対投資を検討しながら適用する必要があります。この領域では、技術はまだ進化・成熟途中です。このため、完全性と将来の展望のために、これらを一部見ていきます。
ファインチューニング
ファインチューニングは、新しいタスクとデータセットに対して事前訓練された言語モデルの重みを更新することを意味します。主に転移学習、カスタマイズ、ドメインの特化に使用されます。これにはさまざまなツールと技術があります。一つの方法は、OpenAIのCLIツールを使用することです。次のようなコマンドを使用して、データを与えてファインチューニング用のトレーニングデータを生成できます:
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
それからAzure AI Studioを使用してカスタムモデルを作成できます:
以前準備した微調整データを提供します。
カスタムLLMs
さらに深く掘り下げて実験する勇気があるなら、続けて読んでください!カスタムモデルの構築方法を見ていきます。
再トレーニング
これは、前に見た微調整に非常に似ています。以下に、トランスフォーマーを使用して行う方法を示します:
from transformers import AutoTokenizer# トークナイザを用意するtokenizer = AutoTokenizer.from_pretrained("bert-base-cased")def tokenize_function(examples): return tokenizer(examples["text"], padding="max_length", truncation=True)# 仮にデータセットがmy_datasetにロードされているとしますtokenized_datasets = my_dataset.map(tokenize_function, batched=True)# モデルをロードするfrom transformers import AutoModelForSequenceClassificationmodel = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=5)# トレーニング用の設定を行うfrom transformers import TrainingArguments, Trainertraining_args = TrainingArguments(output_dir="mydir")trainer.train()# モデルを保存する。保存ディレクトリを指定してロードして後で使用できるtrainer.save_model()
ゼロからのトレーニング
ここでは、既知のモデル構造から始めて、それらをゼロからトレーニングできます。ただし、時間とリソース、トレーニングデータが非常にかかりますが、作成されるモデルは完全に自分の制御下にあります。
ブランドニューモデル
既存のモデルを改善する可能性がある、独自のモデル構造を定義し、それから上記のプロセスに従うことができます。AmazonのTitanとCodewhispererはこのカテゴリに該当します。
結論
GenAIは多様なユースケースにおいて大きな潜在能力を秘めています。この記事では、そのマルチプラットフォーム対応と迅速なソリューション構築への適用例を示しました。GenAIに対する懐疑論はありますが、その力を引き出すための道筋は明確です。ただし、モデルのチューニングやトレーニングに踏み込むと、旅路は複雑になります。
主要なポイント:
- GenAIは非常に魅力的で、いくつかのユースケースを可能にします。
- 今回はそのようなユースケースを見て、どのように迅速にソリューションの構築を始めるかを見ました。
- 一部の人々はGenAIがバブルであるか疑問に思っています。この記事で示された手順を使って、お気に入りのユースケースを選んで自分自身で試してみて、自分自身の答えを見つけることができます!
- モデルのチューニングやトレーニングなどの領域に入ると、プロセスは非常に複雑で労力を要することがあります。
よくある質問
この記事に表示されるメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles