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