MATLAB で大規模言語モデル
※この投稿は 2024 年 1 月 22 日にArtificial Intelligence へ 投稿されたものの抄訳です。
MATLAB を OpenAI™ API に接続して自然言語処理を行う方法
ChatGPT™、Generative AI、大規模言語モデル(LLM, Large Language Model)、これらの革新的な技術を MATLAB と組み合わせることができることをご存じでしょうか?ブラウザで機能する MATLAB AI Chat Playground(関連ブログ投稿)に加えて、MATLAB を OpenAI™ Chat Completions API にも接続することができます。
このブログでは、LLM の背後にある技術と、MATLAB を OpenAI API に接続する方法について紹介します。また、Text Analytics Toolbox を活用して、感情分析やチャットボットの構築などの自然言語処理(NLP)タスクを実行する方法もご紹介します。
LLM ってなに?
大規模言語モデル(LLM)は、トランスフォーマーモデル(ディープラーニングモデルの特別なケース)に基づいています。トランスフォーマーは、連続したデータ内の関係性を追跡するように設計されています。それらは自己注意メカニズムに依存して、入力と出力の間のグローバルな依存関係を捉えます。LLM は NLP に革命をもたらしました。なぜなら、人間の言語に存在する単語間の複雑な関係やニュアンスを捉えることができるからです。
よく知られているトランスフォーマーモデルには、BERT と GPT のモデルがあり、どちらも MATLAB で使用することができます。MATLAB に含まれている事前訓練済みの BERT モデルを使用したい場合は、bert 関数を使用します。このブログでは、GPT モデルに焦点を当てます。
LLMリポジトリ
MATLAB から LLM にアクセスするために必要なコードは GitHub の LLM リポジトリにあります。このコードを使用して MATLAB 環境からChatGPT API を操作できます。gpt-3.5-turbo や gpt-4 もサポートされています。
セットアップ
ChatGPT API を操作するためには、OpenAI API キーを取得する必要があります。API キーの取得方法と OpenAI API の使用料金について詳しくは、OpenAI APIを参照してください。現在のフォルダに API キーをファイルとして保存しておくと便利です。
Getting Started
MATLAB で LLM を使用し始めるために、まず OpenAI Chat オブジェクトを初期化します。
chat = openAIChat(systemPrompt,ApiKey=my_key);
次のセクションでは、さまざまなユースケースに対してシステムプロンプトをどのように指定するか、およびオプションの名前-値引数を使用して OpenAI Chat オブジェクトの機能を強化する方法を紹介します。
MATLAB Online で始める
MATLAB Online で LLM を使いたい場合もあるかもしれません。MATLAB コードが含まれる GitHub リポジトリには「Open in MATLAB Online」ボタンがあります。このボタンをクリックすると、リポジトリが直接 MATLAB Online で開きます。以下のビデオをご覧になって、30秒以内で LLM リポジトリを MATLAB Online で開く方法を確認してください。
使用例
このセクションでは、MATLAB での LLM の使用例を紹介し、関連リンクを記載します。使用例には感情分析、チャットボットの構築、RAG (Retrieval Augmented Generation) などがあります。Text Analytics Toolbox を使用して、テキストを前処理し、分析し、そして「意味のある」形で表示することができます。ここではいくつかの関数を紹介しますが、詳細はリンク先をチェックしてください。
感情分析
感情分析を行う簡単な例から始めましょう。感情分析は、テキスト中の意見や感情の分類に取り組むものです。テキストの感情的なトーンは、ポジティブ、ネガティブ、またはニュートラルとして分類されることがあります。
まずシステムプロンプトを指定します。システムプロンプトは、アシスタントにどのように振る舞うかを伝えます。この場合、感情分析器として振る舞います。また、システムに感情分析を行う方法の簡単な例も提供します。
systemPrompt = "You are a sentiment analyser. You will look at a sentence and output"+... " a single word that classifies that sentence as either 'positive' or 'negative'."+.... "Examples: \n"+... "The project was a complete failure. \n"+... "negative \n\n"+... "The team successfully completed the project ahead of schedule."+... "positive \n\n"+... "His attitude was terribly discouraging to the team. \n"+... "negative \n\n";
システムプロンプトを渡して OpenAI Chat オブジェクトを初期化します。
chat = openAIChat(systemPrompt,ApiKey=my_key);
新しい文を渡して分類させます。
text = generate(chat,"The team is feeling very motivated.")
text = “positive”
正しくポジティブな感情として分類されています。
チャットボットの構築
チャットボットは人間の会話をシミュレートします。つまりユーザーがクエリを入力し、チャットボットが自然な人間の言語で応答を生成します。
LLMリポジトリの「Example: Build ChatBot」を参考に、数分でチャットボットを構築することができます。チャットボットを構築する最初の2つのステップは、(1) チャットを実行するために openAIChat のインスタンスを作成することと、(2) 会話履歴を保存するために openAIMessages 関数を使用することです。
chat = openAIChat("You are a helpful assistant. You reply in a very concise way, keeping answers "+... "limited to short sentences.",ModelName=modelName,ApiKey=my_key); messages = openAIMessages;
さらに数行のコードを追加した後、メキシコでの休暇計画に役立つチャットボットを構築しました。他の MATLAB 関数(例えば、extractBetween)を使用してチャットボットの応答をフォーマットしました。以下の図は、チャットボットとの簡潔ですが役立つチャットを示しています。チャットボットは以前のクエリからの情報を保持していることに注意してください。私は質問で「ユカタン半島」を繰り返す必要はありません。
Retrieval Augmented Generation
Retrieval-augmented generation (RAG)は、LLM によって得られた結果を向上させるための技術です。外部ソースから情報を取得することで、正確性と信頼性の両方を強化することができます。例えば、LLM に供給されるプロンプトは、より最新の情報や技術的な情報で強化することができます。
Example: Retrieval-Augmented Generation では、電力システムに関する技術報告書から情報を取得し、技術的な問い合わせのために ChatGPT を強化する方法を示しています。ここではすべての詳細を示していませんが、重要なステップをいくつか強調します。
- MATLAB 関数 (e.g., websave や fileDatastore) オンライン文書の取得および整理します。
- Text Analytics Toolbox の関数 (e.g., splitParagraphs, tokenizedDocument, や bm25Similarity) 取得した文書から使用するテキストを準備します。
- テキストの準備ができたら、指定されたコンテキストと API キーでチャットボットを初期化します。
chat = openAIChat("You are a helpful assistant. You will get a " + ... "context for each question, but only use the information " + ... "in the context if that makes sense to answer the question. " + ... "Let's think step-by-step, explaining how you reached the answer.",ApiKey=my_key);
- クエリを定義します。次に、クエリに基づいて関連文書を取得およびフィルタリングします。
query = "What technical criteria can be used to streamline new approvals for grid-friendly DPV?"; selectedDocs = retrieveAndFilterRelevantDocs(allDocs,query);
- チャットボットのプロンプトを定義し、応答を生成します。
prompt = "Context:" ... + join(selectedDocs, " ") + newline +"Answer the following question: "+ query; response = generate(chat,prompt);
可視化しやすいようにテキストを整形します。
wrapText(response)
ans =
“The technical criteria that can be used to streamline new approvals for grid-friendly DPV can include prudent screening criteria for systems that meet certain specifications.
These criteria can be based on factors such as DPV capacity penetration relative to minimum feeder daytime load.
Additionally, hosting capacity calculations can be used to estimate the point where DPV would induce technical impacts on system operations.
These screening criteria are commonly used in countries like India and the United States.”
他のユースケース
上記に示したユースケースは、LLM を使用して達成できることの一例に過ぎません。他の注目すべきユースケース(LLMリポジトリの例を含む)には、テキストの要約や関数呼び出しがあります。また、LLM を使用して、機械翻訳のような他の多くの自然言語処理(NLP)タスクにも利用することができます。
MATLAB LLMリポジトリを何に使用しますか?以下のコメント欄にご意見ください。
テキスト要約は、長いテキスト文書から短く、正確で、読みやすい要約を自動的に作成することです。Example: Text Summarizationでは、大きなテキストを小さなチャンクに分割し、ステップバイステップで各チャンクを要約する方法を紹介しています。
関数呼び出しは、LLM の NLP 機能を定義した関数と組み合わせることができる強力なツールです。しかし、ChatGPT は関数名を “Hallucinate” することがあるので、任意に生成された関数を実行することは避け、定義した関数の実行のみを許可してください。arXiv API から学術論文を自動的に分析するために関数呼び出しを使用する例については、LLMを使用した関数呼び出しを参照してください。
Key Takeaways
- MATLAB で自然言語処理タスクを実行するために GPT モデルを使用できる新しい GitHub リポジトリがあります。
- リポジトリには、感情分析やチャットボットの構築など、多くのタスクを達成するための例とユースケースが含まれています。
- MATLAB ツールを活用し、Text Analytics Toolbox の関数を使用して、テキストの取得、管理、準備などの LLM 機能を強化します。
评论
要发表评论,请点击 此处 登录到您的 MathWorks 帐户或创建一个新帐户。