ラングチェーン101:パート2ab (大規模な言語)モデルについて知っておくべきすべて
ランウェイ101:パート2ab(大規模な言語)モデルについて押さえておくべきすべて
これはLangChain 101コースの2abの一部です。この記事の文脈をより良く理解するために、最初のパートをチェックすることを強くお勧めします(次のパートを見逃さないように、著者をフォローしてください):
LangChain 101: パート1. シンプルなQ&Aアプリの作成
この記事では、LangChainの基礎を紹介します。LangChainは、大規模なアプリケーションを構築するためのフレームワークです。
pub.towardsai.net
Modelsコンポーネントは、Langchainの中核です。魔法のような感覚を生むトークン生成に責任を持つコアです。
- Amazon SageMakerを使用して、ML推論アプリケーションをゼロから構築し、展開する
- 「18/9から24/9までの週のトップ重要コンピュータビジョン論文」
- このAIニュースレターは、あなたが必要とするすべてです #66
Modelsコンポーネントでは、ChatGPT、GPT-4、LLAMAなど、さまざまな言語モデルを使用できます。これらのモデルは、質問に答えることやテキストを生成することなど、複数のタスクに使用することができます。
Modelsコンポーネントは使いやすいです。テキストを生成するには、モデルにプロンプトを渡すだけで、応答を作成します。文を翻訳したり質問に答える場合も同様です。
Modelsコンポーネントは非常に多機能です。他のLangChainのコンポーネントと組み合わせることで、より複雑なシステムを作成することができます。たとえば、ModelsコンポーネントをPromptsコンポーネントと組み合わせて、コードやスクリプト、詩や音楽の作品、手紙やメールなど、さまざまな形式のテキストコンテンツを生成するチャットボットを作成することができます。ModelsコンポーネントとIndexesコンポーネントを組み合わせて、さまざまなソースからの情報を使用して質問に答える検索エンジンを作成することもできます。
すべてのコード(Colabノートブックを含む)とその他の資料はGitHubで利用できます。
概要
LangChainはさまざまなモデルをサポートしているため、自分のニーズに合ったものを選ぶことができます:
- LLMsは、入力テキストを受け取り、テキストの出力を生成するAPIを利用します
- チャットモデルは、チャットメッセージを処理し、応答を生成します
- テキスト埋め込みモデルは、テキストを数値表現に変換します
トークン化
トークン化は、人間の言語を単語やサブワードなどのより小さい単位に分割し、テキストを機械が理解できる数値表現に変換する作業です。テキストの生成やコードの生成について話す際には、トークン生成のさまざまな方法として理解します。
テキスト生成
次のフレーズの続きを生成したい場合を考えてみましょう:
「パリは都市です…」。
エンコーダは、持っているすべてのトークンに対してロジット(スコアと考えてください)を送信し、ソフトマックス関数を使用して生成用のトークンの選択確率に変換します。
テキスト生成について詳しくはこちら:
LLMはどのようにテキストを生成するのか
この記事では、トランスフォーマーや大規模言語モデルのトレーニングについては触れません。代わりに、使用方法に焦点を当てます。
pub.towardsai.net
.from_pretrained(<model>)
多くの事前学習済み言語モデルでは、トークナイザとモデルのアーキテクチャは一緒に設計され、トレーニングされています。この結びつきの理由は、トークナイザとモデルのアーキテクチャが互換性がある必要があり、一貫したトークン化とデコーディングが行えるようにするためです。
もしトークナイザとモデルのアーキテクチャが異なっていたり同期されていなかった場合、トークン化エラーや不一致の埋め込み、不正確な予測につながる可能性があります。
APIキー
利用したいLLMプロバイダーのAPIキーが必要です。パフォーマンスとコストのトレードオフを考慮して、プロプライエタリまたはオープンソースの基盤モデルを選択する必要があります。
多くのオープンソースモデルは、コミュニティハブとしてHugging Faceによって組織化され、ホストされています。オープンソースモデルは通常、プロプライエタリモデルよりも小さく能力が低く、コスト効果が高いです。
例:BLOOM(BigScience)、LLaMA(メタ)、Flan-T5(Google)など
プロプライエタリモデルは、企業が所有するクローズドソースの基盤モデルです。通常、オープンソースモデルよりも大きく、したがってパフォーマンスが優れていますが、APIの利用料が高いことがあります。
例:OpenAI、co:here、AI21 Labs、Anthropicなど
埋め込み
埋め込みは、コンピュータが言語をより効果的に理解し処理するのに役立つ、単語やエンティティのコンパクトな数値表現です。これらの表現は単語の意味と文脈をエンコードし、機械がより意味のある言語を扱い効率よく作業することができます。
- OpenAIEmbeddings
- HuggingFaceEmbeddings
- GPT4AllEmbeddings
- SpacyEmbeddings
- FakeEmbeddings
以下では、さまざまなトピックの9つの文の埋め込みを見ることができます。ヒートマップの値は視覚化のために事前にソートされています。
- 長時間のフライト用の最高の旅行用首枕
- ハイキングや旅行に適した軽量バックパック
- アウトドアの冒険に適した防水ダッフルバッグ
- インダクション調理器用のステンレス鋼の調理器具セット
- 高品質のシェフナイフセット
- ベーキング用の高性能スタンドミキサー
- フィクション文学の新刊
- 感銘を受ける伝記と回顧録
- 個人成長のためのトップの自己啓発書
気づくように、文1の類似度は2と3に近く、他の文とは比較的低い類似度です。全ての文は3つのグループに集約されることがわかります。
大規模言語とチャットモデル
言語モデルは、学習されたテキストコーパスに基づいて単語の系列の確率を生成する自然言語の確率モデルです。1つまたは複数の言語のテキストコーパスに基づいて確率を生成することができます。
大規模言語モデルは、大量のテキストデータを用いて深層学習技術を用いて訓練された高度な言語モデルです。
言語モデルは通常、チャットモデルをバックアップしますが、彼らのAPIはより構造化されています。これらのモデルは、チャットメッセージのリストを入力とし、チャットメッセージを返します。
GPTに質問する
LangChainに接続する必要はありません。以下の例では、プロンプトを準備し、openaiパッケージに接続し、抽出されたレスポンスを返します。
import openaidef get_completion(prompt, model="gpt-3.5-turbo"): """ 指定されたモデルを使用して、指定されたプロンプトの完成を生成します。 Args: prompt (str): 完成を生成するための入力プロンプト。 model (str): 完成を生成するために使用するモデルの名前。 Returns: str: 生成された完成テキスト。 """ # ユーザープロンプトを含むメッセージ辞書のリストを作成します messages = [{"role": "user", "content": prompt}] # OpenAI APIを使用してチャットの完成を生成します response = openai.ChatCompletion.create( model=model, messages=messages, temperature=0, # 確定的な出力のために温度を0に設定します ) # 生成された完成の内容を抽出して返します return response.choices[0].message["content"]
如見,簡單的問題可以由模型正確回答。但對於複雜的請求,LangChain可能是一種選擇。
多少內存?
要確定模型的大小(以字節為單位),將參數乘以所選的精確度大小。
假設我們選擇的精度是bfloat16(16位=2字節)。我們想使用BLOOM-176B模型。這意味著我們需要 1760億個參數 * 2 字節 = 352GB!
在機器學習中使用混合精度方法,理想情況下,訓練和推斷使用FP32進行,但計算使用FP16/BF16進行,以加快訓練速度。權重存儲在FP32中,使用FP16/BF16梯度來更新它們。在推斷過程中,半精度權重通常提供與FP32相似的質量,使得可以使用更少的GPU進行更快的處理。
量化是壓縮技術,可減少模型的內存使用並提高推斷效率。在訓練後量化的過程中,將預先訓練模型的權重轉換為低精度,而無需重新訓練。
在代碼中,你可能會看到以下量化參數:
# 用於4位量化的 BitsAndBytesConfig 配置bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16,)
要對量化有全面的了解,請查看我關於此主題的文章:
如何將大型語言模型放入小內存:量化
如何在本地機器上運行LLM
pub.towardsai.net
僅運行模型在CPU上
你可能會感到驚訝,但可以在CPU上運行LLM:
# 檢查模型版本 https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/tree/main!wget --output-document=llama-2-7b-chat.bin https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q8_0.binfrom langchain.llms import CTransformers# 用提供的提示、LLM和詳細設置來初始化LLMChain實例llm_chain = LLMChain(prompt=prompt, llm=llm, verbose=True)
回答需要幾分鐘的時間,但它顯示了即使在Rasberry設備上也可以運行LLM的可能性!
這是第一部分的結束。下一部分(cde)將專注於微調模型。
拍手して私についてきてください。それが私に新しい記事を書く意欲を与えます 🙂
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