微調整、再教育、そして更なる進化:カスタムLLMで前進

『微調整、再教育、そして更なる進化:カスタムLLMで未来へ』

イントロダクション

ほとんどの方はすでにChatGPTを使用したことがあると思います。それは素晴らしいことです。なぜなら、この記事で私たちが始める旅の最初のステップを踏んでくれたからです!新しい技術をマスターするには、まずそれを使ってみることが重要です。それは水に飛び込んで泳ぎを覚えるようなものです!🏊‍♂️

もしGenAIを探求したいのであれば、現実の問題を選び、それを解決するためのアプリケーションの構築を始めてください。GenAIの中心にあるのは、ファウンデーションモデル(FM)とも呼ばれる大規模言語モデル(LLM)です。

モデルの消費者、調整者、ビルダーについては聞いたことがあるかもしれませんが、さらに詳しく説明します。

McKinseyは、それを受け手、形作り手、創り手として捉えており、GenAI Recogniseセッションで言及しています。

この記事では、それぞれのレイヤーを詳しく見ていきます。

プラットフォームの増殖を使用例として

それをさらに詳しく掘り下げるために、すべてがはっきりとわかる実例に目を向けましょう。現代のテクノロジーの風景では、ほとんどのアプリが複数のプラットフォームで動作する必要があることは当然です。しかし、その中には注意点があります。各プラットフォームには独自のインターフェースと特異性があります。追加のプラットフォームへのアプリケーションのサポート拡張とそのようなマルチプラットフォームアプリケーションのメンテナンスは同じくらい困難です。

しかし、そこで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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

「Amazon SageMakerの最新機能を使用することで、モデルのデプロイコストを平均で50%削減します」

組織がモデルを本番環境に展開するにつれて、彼らは常に最新のアクセラレーター(AWS InferentiaやGPUなど)で実行される基盤...

データサイエンス

このAI研究では、優れた画像分類のためにランダムスライスデータ拡張(RSMDA)を提案します:ニューラルネットワークの精度と堅牢性を向上させるための新しいアプローチ

データ拡張は深層学習における重要な技術であり、既存のサンプルを変更して新しいトレーニングデータを作成することを含みま...

AI研究

ディープマインドのこの機械学習研究は、動的な環境での高度な計画に対してベクトル量子化モデル(VQ)を導入しています

技術の絶え間ない進歩により、人間の脳力を模倣することで、人間と同じように思考し学習することができるようになった人工知...

AIニュース

A.I.はいつか医療の奇跡を起こすかもしれませんしかし今のところ、役立つのは書類作業です

医師たちは、健康管理における生成的AIの最適な活用法は、彼らが毎日数時間を費やしている文書作業の負担を軽減することだと...