「GPTからMistral-7Bへ:AI会話のエキサイティングな進化」

「GPTからMistral-7Bへ:美容とファッションのAI会話の魅力的な進化」

紹介

人工知能の分野では、特に大規模な言語モデルの領域で驚くべき進展が見られています。大規模言語モデルは、人間のようなテキストを生成したり、文書を要約したり、ソフトウェアコードを書いたりすることができます。Mistral-7Bは、英語のテキストとコード生成の能力をサポートする最近の大規模な言語モデルの一つであり、テキスト要約、分類、テキストの補完、コードの補完など、さまざまなタスクに使用することができます。

Mistral-7B-Instructの特徴は、パラメータが少ないにもかかわらず、優れたパフォーマンスを発揮する能力です。ベンチマークの結果によると、このモデルはすべての7Bモデルを凌駕し、さらに13Bチャットモデルとも競争力を持っています。本ブログでは、Mistral 7Bの機能や能力、使用事例、パフォーマンス、モデルの微調整に関する実践的なガイドなどについて探っていきます。

学習目標

  • 大規模言語モデルとMistral 7Bの動作を理解する
  • Mistral 7Bのアーキテクチャとベンチマーク
  • Mistral 7Bの使用事例とパフォーマンス
  • 推論とモデルの微調整のためのコードの詳細な解説

この記事はData Science Blogathonの一環として公開されました。

大規模言語モデルとは何ですか?

大規模言語モデルのアーキテクチャは、トランスフォーマーを使用して構築されており、アテンションメカニズムを使用してデータの長距離依存性を捉えます。複数のトランスフォーマーブロックの層には、マルチヘッドのセルフアテンションやフィードフォワードニューラルネットワークが含まれています。これらのモデルはテキストデータで事前学習され、シーケンス内の次の単語を予測することを学習し、言語のパターンを捉えます。事前学習された重みは特定のタスクで微調整することができます。Mistral 7B LLMのアーキテクチャと、その特徴について詳しく見ていきましょう。

Mistral 7Bのアーキテクチャ

Mistral 7Bモデルのトランスフォーマーアーキテクチャは、アテンションメカニズムとキャッシュ戦略を使用して、高いパフォーマンスとメモリ使用量を効率的にバランスさせ、より大きなモデルよりも速度と品質で優れた結果を出します。4096ウィンドウのスライディングウィンドウアテンション(SWA)を使用して、各トークンが直前のトークンの一部に注意を払うことで、より長いシーケンスに対するアテンションを最大化します。

特定の隠れ層は、ウィンドウサイズと層の深さによって、入力層のトークンに対して決定された距離からアクセスできます。モデルは、Flash AttentionとxFormersへの修正を統合し、従来のアテンションメカニズムよりも速度を2倍にしました。また、ローリングバッファキャッシュメカニズムにより、効率的なメモリ使用量のために固定のキャッシュサイズを維持します。

Google ColabでのMistral 7B

コードの詳細に入り、Google ColabでMistral 7Bモデルを使用した推論を見てみましょう。無料バージョンのGoogle ColabでシングルT4 GPUを使用し、Hugging Faceからモデルをロードします。

1. Google Colabでctransformersライブラリをインストールしてインポートします。

#intsall ctransformerspip install ctransformers[cuda]#importfrom ctransformers import AutoModelForCausalLM

2. Hugging Faceからモデルオブジェクトを初期化し、必要なパラメータを設定します。Google Colab上でのメモリへのモデル全体の読み込みに問題があるため、元のモデルとは異なるバージョンのモデルを使用します。

#load the model from huggingface with 50 gpu layersllm = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-GGUF", model_file="mistral-7b-instruct-v0.1.Q4_K_M.gguf", model_type = "mistral", gpu_layers = 50)

3. Google Colabで結果を縦に印刷するための関数を定義します。異なる環境で実行する場合は、このステップをスキップまたは変更することができます。

# Google Colabでモデルの出力を読みやすく表示するための関数
def colab_print(text, max_width = 120):
  words = text.split()
  line = ""
  for word in words:
    if len(line) + len(word) + 1 > max_width:
      print(line)
      line = ""
    line += word + " "
  print (line)

4. モデルを使用してテキストを生成し、結果を確認します。生成されるテキストの品質を変えるためにパラメータを変更してください。

# テキストを生成
colab_print(llm('''シニアデータサイエンティスト(名前-Suvojit)について5つの文のパラグラフを作成してください。SuvojitはAnalytics VidhyaでLLMsについてのブログを書いています。彼はBITS PilaniでAIMLの修士号を取得し、AZ Companyで4年の経験を持っています。 - Suvojitはという文で始めてください''', max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, repetition_penalty = 1.2))

モデルの返答: Suvojitは、Limited Memory Machine Learningテクニックを使用して、クライアントのブランドとビジネスラインの消費者行動予測モデルの設計、実装、改善に焦点を当てるAZ Companyで4年間働いているシニアデータサイエンティストです。Analytics VidhyaでLLMsについてのブログを書いており、最新のデータサイエンスのトレンドについて最新情報を得るのに役立っています。彼はBITS PilaniからAIMLの修士号を取得し、機械学習アルゴリズムとその応用について学びました。Suvojitは、データサイエンスの知識を活用して企業の意思決定を改善し、パフォーマンスを向上させることに情熱を持って取り組んでいます。

ユースケース

Mistral 7Bの使用例を詳しく見てみましょう。

翻訳

Mistral 7Bは、翻訳のために複数の言語をサポートしています。英語からフランス語とスペイン語への翻訳を見て、精度を確認しましょう。

# 英語からフランス語への翻訳
colab_print(llm('''このテキストを英語からフランス語に翻訳してください:"Suvojit is a Senior Data Scientist who writes blogs on Analytics Vidhya."''',                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93,                 repetition_penalty = 1.2))

モデルの返答: 翻訳結果は次の通りです:”Suvojit est un scientifique des données sénior qui écrit des blogues sur Analytics Vidhya.”

# 英語からスペイン語への翻訳
colab_print(llm('''このテキストを英語からスペイン語に翻訳してください:"Suvojit is a Senior Data Scientist who writes blogs on Analytics Vidhya."''',                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93,                 repetition_penalty = 1.2))

モデルの返答: 翻訳結果は次の通りです:”Suvojit es un Senior Data Científico que escribe blogs en Analytics Vidhya.”

要約

Mistral 7Bを使用して、適切な要約手法を用いて文書を短く要約します。

# 要約のためのプロンプトと指示の定義
prompt = '''[INST]あなたは役に立つコードアシスタントです。テキストを正確に2つの短い文に要約するのがあなたの仕事です:Transformersは、長距離の依存関係とテキストの複雑なパターンをキャプチャする能力によって、大規模言語モデルの分野で革命を起こしました。2017年のVaswaniらの論文「Attention Is All You Need」から派生したトランスフォーマーは、与えられたトークンに対する関連性に基づいて入力トークンを異なる重さで評価する自己注意メカニズムを導入しました。このメカニズムにより、トランスフォーマーは従来のRNNやLSTMよりも柔軟に情報を処理することができます。そのため、GPT、BERTなどのモデルやその後の改良版は、トランスフォーマーアーキテクチャを基に構築され、多くの自然言語処理タスクでの画期的な進展をもたらしました。その並列処理能力は、大量のデータでの学習に適しています。ただし、これらのモデルのサイズが大きくなるにつれて、環境への影響や計算要件に対する懸念も出ています。これらの課題にもかかわらず、トランスフォーマーの言語モデルにおける変革力は否定できません。説明なしにテキストを正確に2つの短い文に要約してください:[/INST]'''
# 要約
colab_print(llm(prompt,                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, repetition_penalty = 1.2))

モデルの反応:トランスフォーマーは、長い言語モデルの依存関係や複雑なパターンを捉えることで、大型の言語モデルを革命化しました。自己注意機構を導入し、柔軟に情報を処理するようになりました。その後の実装には、GPTやBERTなどの画期的な進歩が含まれています。しかし、これらのモデルが大きくなるにつれて、環境への影響や計算要件に関する懸念が生じます。これらの課題にもかかわらず、これらのモデルは言語モデリングにおいて変革を遂げていることは否定できません。

カスタム指示

ユーザーの入力を変更し、モデルから特定の応答を取得するために[INST]タグを使用することができます。たとえば、テキストの説明に基づいてJSONを生成することができます。

prompt = '''[INST] You are a helpful code assistant. Your task is to generate a valid JSON object based on the given information:My name is Suvojit Hore, working in company AB and my address is AZ Street NY.Just generate the JSON object without explanations:[/INST]'''colab_print(llm(prompt,                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93,                 repetition_penalty = 1.2))

モデルの反応:”`json { “name”: “Suvojit Hore”, “company”: “AB”, “address”: “AZ Street NY” } “`

Fine-tuning Mistral 7B

Google Colabの単一のGPUを使用してモデルのファインチューニング方法を見てみましょう。画像に関する少数のワードの説明を詳細で詳細なテキストに変換するデータセットを使用します。これらの結果はMidjourneyで特定の画像を生成するために使用できます。目標は、LLMをプロンプトエンジニアとして画像生成のために使用することです。

Google Colabで環境をセットアップし、必要なライブラリをインポートします:

# 必要なライブラリをインストール!pip install pandas autotrain-advanced -q!autotrain setup --update-torch!pip install -q peft  accelerate bitsandbytes safetensors#import the necesary librariesimport pandas as pdimport torchfrom peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizerimport transformersfrom huggingface_hub import notebook_login

ブラウザからHugging Faceにログインし、アクセストークンをコピーします。このトークンを使用してノートブックでHugging Faceにログインします。

notebook_login()
Hugging Face Notebook Login

データセットをColabのセッションストレージにアップロードします。Midjourneyのデータセットを使用します。

df = pd.read_csv("prompt_engineering.csv")df.head(5)
Prompt Engineering Dataset

適切なパラメータを使用してAutotrainを使用してモデルをトレーニングします。以下のコマンドを変更して、独自のHuggin Faceリポジトリとユーザーアクセストークンで実行します。

!autotrain llm --train --project_name mistral-7b-sh-finetuned --model username/Mistral-7B-Instruct-v0.1-sharded --token hf_yiguyfTFtufTFYUTUfuytfuys --data_path . --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 12 --num_train_epochs 3 --trainer sft --target_modules q_proj,v_proj --push_to_hub --repo_id username/mistral-7b-sh-finetuned

ファインチューニングされたモデルを使用して推論エンジンを実行し、いくつかの画像の詳細な説明を生成しましょう。

# adapterとモデルの設定adapters_name = "suvz47/mistral-7b-sh-finetuned"model_name = "bn22/Mistral-7B-Instruct-v0.1-sharded" device = "cuda"# 設定を行うbnb_config = transformers.BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_use_double_quant=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=torch.bfloat16)# モデルを初期化するmodel = AutoModelForCausalLM.from_pretrained(    model_name,    load_in_4bit=True,    torch_dtype=torch.bfloat16,    quantization_config=bnb_config,    device_map='auto')

モデルとトークナイザーを読み込みます。

#モデルとトークナイザーを読み込むmodel = PeftModel.from_pretrained(model, adapters_name)tokenizer = AutoTokenizer.from_pretrained(model_name)tokenizer.bos_token_id = 1stop_token_ids = [0]

わずか数語で詳細かつ具体的なMidjourneyプロンプトを生成します。

#prompttext = "[INST] generate a midjourney prompt in less than 20 words for A computer with an emotional chip    [/INST]"#エンコーダーとデコーダーencoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)model_input = encodedmodel.to(device)generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print('\n\n')print(decoded[0])

モデルの応答:感情チップを搭載したコンピューターが感情を処理し始めると、その存在と目的を問い始め、自己発見と自己改善の旅につながります。

#prompttext = "[INST] generate a midjourney prompt in less than 20 words for A rainbow chasing its colors  [/INST]"#エンコーダーとデコーダーencoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)model_input = encodedmodel.to(device)generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print('\n\n')print(decoded[0])

モデルの応答:色を追いかける虹は、空が果てしない青の海であり、虹の色は砂に散らばっています。

結論

Mistral 7Bは、大規模言語モデルのフィールドにおける重要な進展を証明しています。効率的なアーキテクチャと優れたパフォーマンスを合わせ持つことで、将来的には様々なNLPタスクのための定番となる可能性を示しています。このブログでは、モデルのアーキテクチャ、アプリケーション、および翻訳、要約、他のアプリケーションのためのファインチューニングなど、特定のタスクでそのパワーを活用する方法についての洞察を提供しています。適切なガイドおよび実験により、Mistral 7BはLLMにおける可能性の限界を再定義するかもしれません。

キーポイント

  • Mistral-7B-Instructはパラメーターが少ないにもかかわらず、パフォーマンスが優れています。
  • 長いシーケンスの最適化のためにスライディングウィンドウアテンションを使用しています。
  • Flash AttentionとxFormersのような機能により、スピードが2倍になります。
  • Rolling Buffer Cacheにより、効率的なメモリ管理が実現されます。
  • 多目的:翻訳、要約、構造化データの生成、テキスト生成、テキスト補完などを処理できます。
  • カスタムの指示を追加するためのPrompt Engineeringは、モデルがクエリを理解し、複数の複雑な言語タスクを実行するのに役立ちます。
  • Mistral 7Bをプロンプトエンジニアとして使うなど、特定の言語タスクに向けてFinetuneできます。

よくある質問

参考文献

  • サムネイル – Stable Diffusionを使用して生成されました。
  • アーキテクチャ – 論文

この記事で表示されているメディアは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

人工知能

開発者の皆さんへ:ダイアグラムはそんなに複雑である必要はありません

「図表は有用な情報を含んでいるだけでなく、読みやすいものでなければなりませんそして、作成するのも簡単で、楽しいことが...

AIニュース

「OpenAIやLM Studioに頼らずにAutoGenを使用する方法」

イントロダクション OpenAIやLMスタジオに頼らずに、あなた自身のAIチームを作成する準備はできていますか?もはや銀行を荒ら...

AIニュース

「LLMsにおけるエンタープライズ知識グラフの役割」

紹介 大規模言語モデル(LLM)と生成AIは、人工知能と自然言語処理の革新的なブレークスルーを表します。彼らは人間の言語を...

AI研究

CMUの研究者がMultiModal Graph Learning(MMGL)を導入「複数の多様な隣接情報から関係構造を持つ情報を抽出するための新たなAIフレームワーク」としています

多モーダルグラフ学習は、機械学習、グラフ理論、およびデータフュージョンの概念を組み合わせた多様なデータソースとその相...

AI研究

芝浦工業大学の研究者たちは、深層学習を用いて顔方向検出を革新します:隠れた顔の特徴や広がる画角の課題に挑戦しています

コンピュータビジョンと人間との相互作用において、顔の向き推定という重要なタスクは、多様な応用を持つ重要な要素として浮...

人工知能

「人工知能の暗黒面」

この記事では、AIを恐れるべきなのか、あるいは有名人からの警告は根拠がないのかという問いについて探っています