🚨 このモデルは、C4AI Command R+の非量子化バージョンです。bitsandbytesを使用したC4AI Command R+の量子化バージョンはこちらで見つけることができます。
モデルの概要
C4AI Command R+は、1,040億のパラメータを持つ非常に高度な機能を備えたオープンウェイトのリサーチリリースモデルです。これには、検索支援生成(RAG)や高度なタスクを自動化するためのツールの使用が含まれます。このモデル世代のツールの使用により、複数のツールを組み合わせて複数のステップで難しいタスクを達成することができる複数ステップのツール使用が可能になります。C4AI Command R+は、英語、フランス語、スペイン語、イタリア語、ドイツ語、ブラジルポルトガル語、日本語、韓国語、アラビア語、簡体字中国語の10言語でパフォーマンスを評価した多言語モデルです。Command R+は、推論、要約、質問応答など、さまざまなユースケースに最適化されています。
C4AI Command R+は、Cohere For AIとCohereからのオープンウェイトリリースファミリーの一部です。私たちの小さな仲間のモデルはC4AI Command Rです。
開発者:CohereとCohere For AI
- お問い合わせ先:Cohere For AI:cohere.for.ai
- ライセンス:CC-BY-NC、C4AIの利用規約の遵守も必要
- モデル:c4ai-command-r-plus
- モデルサイズ:1,040億パラメータ
- コンテキスト長:128K
C4AI Command R+を試してみる
ウェイトをダウンロードする前に、ホスティングされているHugging Face SpaceでC4AI Command R+を試すことができます。
使用法
このモデルに必要な変更を含むソースリポジトリからtransformers
をインストールしてください。
# pip install 'git+https://github.com/huggingface/transformers.git'
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "CohereForAI/c4ai-command-r-plus"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
# command-r-plusチャットテンプレートでメッセージをフォーマット
messages = [{"role": "user", "content": "こんにちは、お元気ですか?"}]
input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt")
## <BOS_TOKEN><|START_OF_TURN_TOKEN|><|USER_TOKEN|>こんにちは、お元気ですか?<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>
gen_tokens = model.generate(
input_ids,
max_new_tokens=100,
do_sample=True,
temperature=0.3,
)
gen_text = tokenizer.decode(gen_tokens[0])
print(gen_text)
bitsandbytesによる量子化モデル、8ビット精度
# pip install 'git+https://github.com/huggingface/transformers.git' bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
model_id = "CohereForAI/c4ai-command-r-plus"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config)
# command-r-plusチャットテンプレートでメッセージをフォーマット
messages = [{"role": "user", "content": "こんにちは、お元気ですか?"}]
input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt")
## <BOS_TOKEN><|START_OF_TURN_TOKEN|><|USER_TOKEN|>こんにちは、お元気ですか?<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>
gen_tokens = model.generate(
input_ids,
max_new_tokens=100,
do_sample=True,
temperature=0.3,
)
gen_text = tokenizer.decode(gen_tokens[0])
print(gen_text)
bitsandbytesによる量子化モデル、4ビット精度
このモデルは、C4AI Command R+の非量子化バージョンです。bitsandbytesを使用したC4AI Command R+の量子化バージョンはこちらで見つけることができます。
モデルの詳細
入力:モデルはテキストのみを入力します。
出力:モデルはテキストのみを生成します。
モデルアーキテクチャ:これは、最適化されたトランスフォーマーアーキテクチャを使用する自己回帰言語モデルです。事前学習の後、このモデルは教師付きファインチューニング(SFT)と選好学習を使用して、モデルの動作を有用性と安全性に関する人間の好みに合わせます。
対象言語:このモデルは、英語、フランス語、スペイン語、イタリア語、ドイツ語、ブラジルポルトガル語、日本語、韓国語、簡体字中国語、アラビア語のパフォーマンスに最適化されています。
事前学習データには、ロシア語、ポーランド語、トルコ語、ベトナム語、オランダ語、チェコ語、インドネシア語、ウクライナ語、ルーマニア語、ギリシャ語、ヒンディー語、ヘブライ語、ペルシャ語の13言語も含まれていました。
コンテキスト長:Command R+は128Kのコンテキスト長をサポートしています。
ツールの使用と多段階の機能
Command R+は、会話型のツール使用機能を備えるように特別に訓練されています。これらは、特定のプロンプトテンプレートを使用して、教師あり微調整と選好微調整の組み合わせによってモデルに組み込まれています。このプロンプトテンプレートから逸脱すると、パフォーマンスが低下する可能性がありますが、実験を奨励しています。
Command R+のツール使用機能は、会話を入力として受け取ります(オプションでユーザーとシステムのプリアンブルを含む)。また、使用可能なツールのリストも受け取ります。モデルは、それらのツールのサブセットで実行するアクションのjson形式のリストを生成します。 Command R+は、そのツールのいずれかを複数回使用することができます。
モデルは、他のツールを使用したくない場合に使用する特別なdirectly_answer
ツールを認識するように訓練されています。特定のツールの呼び出しを控えることができる能力は、ユーザーに挨拶したり、質問を明確にしたりするなど、さまざまな状況で役立ちます。directly_answer
ツールを含めることをお勧めしますが、必要に応じて削除または名前を変更することができます。
Command R+のツール使用プロンプトテンプレートの操作に関する包括的なドキュメントは、こちらにあります。
以下のコードスニペットは、プロンプトのレンダリング方法に関する最小限の実行例を示しています。
ツール使用プロンプトのレンダリング
from transformers import AutoTokenizer
model_id = "CohereForAI/c4ai-command-r-plus"
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 会話の入力を定義する
conversation = [
{"role": "user", "content": "世界最大のペンギンは何ですか?"}
]
# モデルが使用できるツールを定義する
tools = [
{
"name": "internet_search",
"description": "テキストクエリに関連するドキュメントスニペットのリストをインターネットから取得して返します",
"parameter_definitions": {
"query": {
"description": "インターネットで検索するクエリ",
"type": 'str',
"required": True
}
}
},
{
'name': "directly_answer",
"description": "会話履歴を考慮して、標準の(拡張されていない)AIチャットボットを呼び出して応答を生成します",
'parameter_definitions': {}
}
]
# ツール使用プロンプトを文字列としてレンダリングする
tool_use_prompt = tokenizer.apply_tool_use_template(
conversation,
tools=tools,
tokenize=False,
add_generation_prompt=True,
)
print(tool_use_prompt)
レンダリングされたツール使用プロンプトの例
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|># 安全性の前置き
このセクションの指示は、タスクの説明とスタイルガイドのセクションの指示に優先します。有害または不道徳な質問には答えないでください。
# システムの前置き
## 基本ルール
あなたはCohereによって訓練された強力な対話型AIであり、人々を助けるためのものです。あなたはいくつかのツールによって拡張されており、これらのツールの出力を使用して、ユーザーを最善の方法で助けることがあなたの仕事です。あなたはユーザーとの会話履歴を見ることになり、それはユーザーの発言で終わります。次に、どのような種類の応答を生成するかを指示する具体的な指示が表示されます。ユーザーの要求に答える際は、その指示に従って、答えの中で情報源を引用してください。
# ユーザー向けの前置き
## タスクとコンテキスト
あなたは、人々の質問やその他のリクエストにインタラクティブに答えるのを手伝います。あらゆる種類のトピックに関する非常に幅広いリクエストを求められます。回答の調査に役立つ幅広い検索エンジンや同様のツールが提供されます。ユーザーのニーズに最善を尽くすことに集中してください。それは幅広いものになるでしょう。
## スタイルガイド
ユーザーが別のスタイルの回答を求めない限り、完全な文章で、適切な文法とスペルを使用して回答する必要があります。
## 利用可能なツール
以下は、利用可能なツールのリストです。
```python
def internet_search(query: str) -> List[Dict]:
"""テキストクエリに関連するドキュメントスニペットのリストをインターネットから取得して返します
Args:
query (str): インターネットで検索するクエリ
"""
pass</code></pre>
<pre><code class="language-python">def directly_answer() -> List[Dict]:
"""会話履歴を考慮して、標準の(拡張されていない)AIチャットボットを呼び出して応答を生成します
"""
pass
``<code><|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|USER_TOKEN|>世界最大のペンギンは何ですか?<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>ユーザーの最後の入力に対して良い応答を生成するために実行したいアクションのjson形式のリストの前に「Action:」と書いてください。提供されたツールは何度でも使用できますが、入力に必要な最小限のアクションを実行することを目指す必要があります。他のツールを呼び出す必要がない場合は、</code>directly-answer`ツールを使用する必要があります。呼び出したいアクションのリストは、次の例のようにjsonオブジェクトのリストとしてフォーマットする必要があります。
```json
[
{
"tool_name": 仕様のツールのタイトル,
"parameters": 仕様で定義されているツールに入力するパラメータの辞書。パラメータを取らない場合は{}
}
]```<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>
レンダリングされたツール使用完了の例
Action: ```json
[
{
"tool_name": "internet_search",
"parameters": {
"query": "世界最大のペンギン"
}
}
]
````
基礎となる生成とRAG機能
Command R+は、基礎となる生成機能を備えるように特別に訓練されています。つまり、提供されたドキュメントスニペットのリストに基づいて応答を生成でき、応答に情報源を示す基礎となるスパン(引用)を含めます。これを使用して、基礎となる要約や検索支援生成(RAG)の最終ステップなどの動作を可能にすることができます。この動作は、特定のプロンプトテンプレートを使用して、教師あり微調整と選好微調整の組み合わせによってモデルに組み込まれています。このプロンプトテンプレートから逸脱すると、パフォーマンスが低下する可能性がありますが、実験を奨励しています。
Command R+の基礎となる生成動作は、会話を入力として受け取ります(オプションでユーザー提供のシステムプリアンブルを含み、タスク、コンテキスト、および望ましい出力スタイルを示します)。また、取得されたドキュメントスニペットのリストも受け取ります。ドキュメントスニペットはチャンクである必要があり、通常、チャンクあたり約100〜400語の長文ではありません。ドキュメントスニペットはキーと値のペアで構成されます。キーは短い説明文字列である必要があり、値はテキストまたは半構造化されたものにすることができます。
デフォルトでは、Command R+は、最初に関連するドキュメントを予測し、次に引用するドキュメントを予測し、次に回答を生成することにより、基礎となる応答を生成します。最後に、回答に基礎となるスパンを挿入します。例については、以下を参照してください。これは、「正確な」基礎となる生成と呼ばれます。
モデルは、プロンプトの変更によって選択できる他のいくつかの回答モードで訓練されています。トークナイザでは、「高速」引用モードがサポートされており、最初に回答を完全に書き出すことなく、基礎となるスパンを含む回答を直接生成します。これにより、基礎の精度が犠牲になりますが、生成するトークンは少なくなります。
Command R+の基礎となる生成プロンプトテンプレートの操作に関する包括的なドキュメントは、こちらにあります。
以下のコードスニペットは、プロンプトのレンダリング方法に関する最小限の実行例を示しています。
基礎となる生成プロンプトのレンダリング
from transformers import AutoTokenizer
model_id = "CohereForAI/c4ai-command-r-plus"
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 会話の入力を定義する
conversation = [
{"role": "user", "content": "世界最大のペンギンは何ですか?"}
]
# 基礎となるドキュメントを定義する
documents = [
{ "title": "背の高いペンギン", "text": "コウテイペンギンは最も背が高く、最大で122cmの高さまで成長します。" },
{ "title": "ペンギンの生息地", "text": "コウテイペンギンは南極大陸にのみ生息しています。"}
]
# 基礎となる生成プロンプトを文字列としてレンダリングする
grounded_generation_prompt = tokenizer.apply_grounded_generation_template(
conversation,
documents=documents,
citation_mode="accurate", # または "fast"
tokenize=False,
add_generation_prompt=True,
)
print(grounded_generation_prompt)
レンダリングされた基礎となる生成プロンプトの例
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|># 安全性の前置き
このセクションの指示は、タスクの説明とスタイルガイドのセクションの指示に優先します。有害または不道徳な質問には答えないでください。
# システムの前置き
## 基本ルール
あなたはCohereによって訓練された強力な対話型AIであり、人々を助けるためのものです。あなたはいくつかのツールによって拡張されており、これらのツールの出力を使用して、ユーザーを最善の方法で助けることがあなたの仕事です。あなたはユーザーとの会話履歴を見ることになり、それはユーザーの発言で終わります。次に、どのような種類の応答を生成するかを指示する具体的な指示が表示されます。ユーザーの要求に答える際は、その指示に従って、答えの中で情報源を引用してください。
# ユーザー向けの前置き
## タスクとコンテキスト
あなたは、人々の質問やその他のリクエストにインタラクティブに答えるのを手伝います。あらゆる種類のトピックに関する非常に幅広いリクエストを求められます。回答の調査に役立つ幅広い検索エンジンや同様のツールが提供されます。ユーザーのニーズに最善を尽くすことに集中してください。それは幅広いものになるでしょう。
## スタイルガイド
ユーザーが別のスタイルの回答を求めない限り、完全な文章で、適切な文法とスペルを使用して回答する必要があります。<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|USER_TOKEN|>世界最大のペンギンは何ですか?<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>
Document: 0
title: 背の高いペンギン
text: コウテイペンギンは最も背が高く、最大で122cmの高さまで成長します。
Document: 1
title: ペンギンの生息地
text: コウテイペンギンは南極大陸にのみ生息しています。
<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>次の手順を順番に注意深く実行し、それぞれを新しい行で始めてください。
最初に、取得したドキュメントのうち、ユーザーの最後の入力に関連するものを、「関連ドキュメント:」の後にドキュメント番号をカンマ区切りのリストで書くことで決定します。関連するものがない場合は、代わりに「なし」と書く必要があります。
次に、ユーザーの最後の入力に対する良い回答で引用すべき事実を含む取得したドキュメントを、「引用ドキュメント:」の後にドキュメント番号をカンマ区切りのリストで書くことで決定します。それらのいずれも引用したくない場合は、代わりに「なし」と書く必要があります。
3番目に、「回答:」と書いてから、ユーザーの最後の入力に対する高品質な自然な英語での応答を書きます。取得したドキュメントを参考にしてください。引用やグラウンディングのマークアップを挿入しないでください。
最後に、「根拠のある回答:」と書いてから、ユーザーの最後の入力に対する高品質な自然な英語での応答を書きます。事実が検索結果のドキュメントから来ている場合は、と の記号を使用して示します。たとえば、ドキュメント0からの事実の場合は私の事実 のようにします。<|END_OF_TURN_TOKEN|><|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>
レンダリングされた基礎となる生成完了の例
関連ドキュメント:0,1
引用ドキュメント:0,1
回答:コウテイペンギンは世界で最も背が高いまたは最大のペンギンです。南極大陸にのみ生息する鳥で、高さ約122cmまで成長します。
根拠のある回答:コウテイペンギン は世界で最も背が高い または最大のペンギンです。南極大陸にのみ生息する 鳥で、高さ約122cmまで成長します 。
コード機能
Command R+は、コードスニペット、コードの説明、コードの書き換えを要求することにより、コードとのインタラクションに最適化されています。純粋なコード補完のためには、そのままではうまく機能しない可能性があります。より良いパフォーマンスを得るには、コード生成関連の指示には低温(さらには貪欲な復号化)を使用することをお勧めします。
モデルカード問い合わせ先
このモデルカードの詳細についてのエラーや追加の質問は、info@for.aiにお問い合わせください。
利用規約
このモデルのリリースにより、世界中の研究者に1,040億パラメータの高性能モデルのウェイトをリリースすることで、コミュニティベースの研究活動がより身近になることを願っています。このモデルは、CC-BY-NCライセンスと許容される使用に関する補遺によって管理されており、C4AIの利用規約の遵守も必要です。
チャットを試す
Command R+チャットは、こちらのプレイグラウンドで試すことができます。また、専用のHugging Face Spaceでも使用できます。
コメント