Mistral-7B-Instruct-v0.3 使ってみた

自然言語処理

はじめに

Mistral-7B-Instruct-v0.3は、Mistral-7B-v0.3をベースにインストラクションチューニングを施した大規模言語モデル(LLM)です。自然言語処理タスクにおいて優れた性能を発揮し、簡単に利用できるようデザインされています。

Mistral-7B-v0.3の特徴

Mistral-7B-v0.3は、以下の点でMistral-7B-v0.2から改良されています。

  • 語彙数が32,768に拡張
  • v3トークナイザーをサポート
  • 関数呼び出しをサポート

インストール方法

Mistral-7B-Instruct-v0.3を利用するには、mistral-inferenceライブラリを使用することをおすすめします。以下のコマンドでインストールできます。

pip install mistral_inference

モデルのダウンロード

Hugging Face Hubから必要なファイルをダウンロードします。

from huggingface_hub import snapshot_download
from pathlib import Path

mistral_models_path = Path.home().joinpath('mistral_models', '7B-Instruct-v0.3')
mistral_models_path.mkdir(parents=True, exist_ok=True)

snapshot_download(repo_id="mistralai/Mistral-7B-Instruct-v0.3", 
                  allow_patterns=["params.json", "consolidated.safetensors", "tokenizer.model.v3"],
                  local_dir=mistral_models_path)

チャットの使い方

mistral-inferenceをインストールすると、mistral-chatコマンドが使えるようになります。以下のようにコマンドを実行することで、モデルとチャットができます。

mistral-chat $HOME/mistral_models/7B-Instruct-v0.3 --instruct --max_tokens 256

Instruct-following

Mistral-7B-Instruct-v0.3は、instructionに従ってタスクを実行できます。以下のコードは、その一例です。

from mistral_inference.model import Transformer
from mistral_inference.generate import generate

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer  
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest

tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tokenizer.model.v3")
model = Transformer.from_folder(mistral_models_path)

completion_request = ChatCompletionRequest(messages=[UserMessage(content="Explain Machine Learning to me in a nutshell.")])

tokens = tokenizer.encode_chat_completion(completion_request).tokens

out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, 
                         eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])

print(result)

関数呼び出し

Mistral-7B-Instruct-v0.3は、定義された関数を呼び出すこともできます。次の例では、現在の天気を取得する関数を定義し、ユーザーのメッセージに応じて関数を呼び出しています。

from mistral_common.protocol.instruct.tool_calls import Function, Tool
from mistral_inference.model import Transformer  
from mistral_inference.generate import generate

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage  
from mistral_common.protocol.instruct.request import ChatCompletionRequest

tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tokenizer.model.v3")  
model = Transformer.from_folder(mistral_models_path)

completion_request = ChatCompletionRequest(
    tools=[
        Tool(
            function=Function(
                name="get_current_weather",
                description="Get the current weather",
                parameters={
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA",
                        },
                        "format": { 
                            "type": "string",
                            "enum": ["celsius", "fahrenheit"],
                            "description": "The temperature unit to use. Infer this from the users location.",
                        },
                    },
                    "required": ["location", "format"],
                },
            )
        )
    ],
    messages=[
        UserMessage(content="What's the weather like today in Paris?"),
        ],  
)

tokens = tokenizer.encode_chat_completion(completion_request).tokens

out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0,
                         eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])

print(result)

🤗 Transformersライブラリでの利用

HuggingFace Transformersライブラリを使ってテキスト生成を行うこともできます。

from transformers import pipeline

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]
chatbot = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.3")
chatbot(messages)  

注意点

Mistral-7B-Instruct-v0.3は、ベースモデルがファインチューニングによって高い性能を発揮できることを示すデモンストレーションモデルです。現時点ではモデレーション機構は組み込まれていません。今後、コミュニティと協力しながら、モデルが適切にガードレールを尊重し、モデレーションが必要な環境でも安全に利用できるよう改良していく予定です。

まとめ

Mistral-7B-Instruct-v0.3は、自然言語処理タスクで優れた性能を発揮する大規模言語モデルです。シンプルなインターフェースにより、初心者でも簡単に利用することができます。インストラクションに従ったタスク実行や関数呼び出しなど、幅広い用途に活用できるでしょう。一方で、現時点ではモデレーション機構が組み込まれていないため、利用には一定の注意が必要です。今後のアップデートにご期待ください。

ノートブック

Google Colab

参考サイト

mistralai/Mistral-7B-Instruct-v0.3 · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

コメント

タイトルとURLをコピーしました