🚀 Phi-2モデル
Phi-2は、27億のパラメータを持つTransformerモデルです。このモデルは、自然言語処理やコード生成などのタスクに使用でき、研究コミュニティに安全面の課題を探求するための非制限的な小規模モデルを提供することを目的としています。
🚀 クイックスタート
モデル概要
Phi-2は27億のパラメータを持つTransformerモデルです。Phi-1.5と同じデータソースを使用し、様々なNLP合成テキストとフィルタリングされたウェブサイト(安全性と教育的価値のため)からなる新しいデータソースを追加して学習されました。常識、言語理解、論理的推論をテストするベンチマークで評価された場合、Phi-2は130億パラメータ未満のモデルの中でほぼ最先端の性能を示しました。
このオープンソースモデルは、毒性の低減、社会的バイアスの理解、制御性の向上など、重要な安全性の課題を探求するために、研究コミュニティに非制限的な小規模モデルを提供することを目的として作成されました。
使用方法
Phi-2はtransformers
バージョン4.37.0に統合されています。使用する際は、このバージョン以上を使用してください。
Phi-2は(FP16で)アテンションオーバーフローの問題があります。この問題に直面した場合は、PhiAttention.forward()関数でautocastを有効/無効にしてください。
想定される用途
学習データの性質上、Phi-2モデルはQA形式、チャット形式、コード形式のプロンプトに最適です。
QA形式
以下のように、プロンプトを独立した質問として提供することができます。
Write a detailed analogy between mathematics and a lighthouse.
モデルは"."の後にテキストを生成します。モデルにより簡潔な回答を書かせるために、"Instruct: \nOutput:"を使用した以下のQA形式も試すことができます。
Instruct: Write a detailed analogy between mathematics and a lighthouse.
Output: Mathematics is like a lighthouse. Just as a lighthouse guides ships safely to shore, mathematics provides a guiding light in the world of numbers and logic. It helps us navigate through complex problems and find solutions. Just as a lighthouse emits a steady beam of light, mathematics provides a consistent framework for reasoning and problem-solving. It illuminates the path to understanding and helps us make sense of the world around us.
モデルは"Output:"の後にテキストを生成します。
チャット形式
Alice: I don't know why, I'm struggling to maintain focus while studying. Any suggestions?
Bob: Well, have you tried creating a study schedule and sticking to it?
Alice: Yes, I have, but it doesn't seem to help much.
Bob: Hmm, maybe you should try studying in a quiet environment, like the library.
Alice: ...
モデルは最初の"Bob:"の後にテキストを生成します。
コード形式
def print_prime(n):
"""
Print all primes between 1 and n
"""
primes = []
for num in range(2, n+1):
is_prime = True
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
print(primes)
モデルはコメントの後にテキストを生成します。
サンプルコード
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.set_default_device("cuda")
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2", torch_dtype="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2", trust_remote_code=True)
inputs = tokenizer('''def print_prime(n):
"""
Print all primes between 1 and n
"""''', return_tensors="pt", return_attention_mask=False)
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)
✨ 主な機能
- 最先端の性能:130億パラメータ未満のモデルの中で、常識、言語理解、論理的推論のベンチマークでほぼ最先端の性能を示します。
- 多様な形式の対応:QA形式、チャット形式、コード形式のプロンプトに最適です。
- オープンソース:研究コミュニティに非制限的な小規模モデルを提供し、安全性の課題を探求することができます。
🔧 技術詳細
モデル
- アーキテクチャ:次の単語予測を目的としたTransformerベースのモデル
- コンテキスト長:2048トークン
- データセットサイズ:2500億トークン。AOAI GPT-3.5によって作成されたNLP合成データと、Falcon RefinedWebおよびSlimPajamaからのフィルタリングされたウェブデータの組み合わせで、AOAI GPT-4によって評価されました。
- 学習トークン:1400億トークン
- GPU:96台のA100-80G
- 学習時間:14日
ソフトウェア
📄 ライセンス
このモデルはMITライセンスの下で提供されています。
⚠️ 注意事項
- Phi-2の制限事項
- 不正確なコードや事実の生成:モデルは誤ったコードスニペットやステートメントを生成する可能性があります。ユーザーはこれらの出力を提案または出発点として扱い、決定的または正確な解決策としてではなく扱うべきです。
- コードの範囲が限定的:Phi-2の学習データの大部分はPythonに基づいており、"typing, math, random, collections, datetime, itertools"などの一般的なパッケージを使用しています。モデルが他のパッケージを使用するPythonスクリプトまたは他の言語のスクリプトを生成した場合、ユーザーはすべてのAPIの使用を手動で検証することを強くお勧めします。
- 命令に対する応答が信頼できない:モデルは命令微調整を受けていないため、ユーザーが提供する複雑または微妙な命令に従うのに苦労するか、または失敗する可能性があります。
- 言語の制限:モデルは主に標準英語を理解するように設計されています。非公式英語、スラング、または他の言語は理解に挑戦をもたらす可能性があり、誤解や応答のエラーにつながる可能性があります。
- 潜在的な社会的バイアス:Phi-2は学習データの安全性を確保する努力にもかかわらず、社会的バイアスを完全に排除しているわけではありません。このモデルがこれらの社会的バイアスを反映したコンテンツを生成する可能性があり、特にそのように促された場合にはその可能性が高まります。ユーザーはこの点に注意し、モデルの出力を解釈する際には注意と批判的思考を行使することをお勧めします。
- 毒性:慎重に選択されたデータで学習されているにもかかわらず、モデルは明示的に促された場合には有害なコンテンツを生成する可能性があります。このモデルを公開したのは、オープンソースコミュニティが事前学習後にモデルの毒性を最も効果的に低減する方法を開発するのを支援するためです。
- 冗長性:Phi-2はベースモデルであるため、ユーザーのプロンプトに対する最初の回答の後に、無関係または余分なテキストや応答を生成することがよくあります。これは、学習データセットが主に教科書であるため、教科書のような応答が生成されるためです。
商標
このプロジェクトには、プロジェクト、製品、またはサービスの商標またはロゴが含まれている場合があります。Microsoftの商標またはロゴの使用は、Microsoftの商標とブランドガイドラインに従う必要があります。このプロジェクトの修正バージョンでMicrosoftの商標またはロゴを使用する場合は、混乱を招いたり、Microsoftの後援を暗示したりしないようにする必要があります。第三者の商標またはロゴの使用は、それらの第三者のポリシーに従う必要があります。