🚀 Phi-2模型
Phi-2是一个拥有27亿参数的Transformer模型。它使用与Phi-1.5相同的数据源进行训练,并增加了一个新的数据源,该数据源包含各种NLP合成文本和经过筛选的网站(出于安全和教育价值考虑)。在常识、语言理解和逻辑推理的基准测试中,Phi-2在参数少于130亿的模型中表现接近当前最优水平。
本开源模型旨在为研究社区提供一个无限制的小型模型,以探索重要的安全挑战,如减少毒性、理解社会偏见、增强可控性等。
🚀 快速开始
安装要求
Phi-2已集成在transformers
4.37.0版本中,请确保使用的是该版本或更高版本。
注意事项
Phi-2在FP16模式下存在注意力溢出问题。若遇到此问题,请在PhiAttention.forward()函数上启用或禁用自动混合精度。
✨ 主要特性
- 适用多种格式:鉴于训练数据的性质,Phi-2模型最适合使用问答格式、聊天格式和代码格式的提示。
- 开源研究价值高:未通过人类反馈强化学习进行微调,为研究社区探索安全挑战提供便利。
📦 安装指南
确保你的transformers
库版本为4.37.0或更高。
💻 使用示例
基础用法
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)
高级用法
问答格式
你可以将提示作为独立问题提供,如下所示:
Write a detailed analogy between mathematics and a lighthouse.
模型将在"."之后生成文本。
为了鼓励模型写出更简洁的答案,你也可以尝试使用以下问答格式 "Instruct: <提示>\nOutput:"
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)
模型将在注释之后生成文本。
📚 详细文档
使用注意事项
- Phi-2用于问答、聊天和代码生成。模型生成的文本/代码应被视为起点,而非确定的解决方案。用户在应用中使用时应谨慎。
- 未经评估直接用于生产任务超出了本项目的范围。Phi-2模型未经过测试以确保其在任何生产级应用中表现良好。
- 如果你使用的是
transformers<4.37.0
,请始终使用trust_remote_code=True
加载模型以防止副作用。
模型局限性
- 代码和事实不准确:模型可能会产生不正确的代码片段和陈述。用户应将这些输出视为建议或起点,而非确定或准确的解决方案。
- 代码范围有限:Phi-2的大部分训练数据基于Python,并使用常见的包,如"typing, math, random, collections, datetime, itertools"。如果模型生成使用其他包的Python脚本或其他语言的脚本,强烈建议用户手动验证所有API的使用。
- 指令响应不可靠:模型未经过指令微调,可能难以或无法遵循用户提供的复杂或细微的指令。
- 语言限制:模型主要设计用于理解标准英语。非正式英语、俚语或其他语言可能会给其理解带来挑战,导致潜在的误解或响应错误。
- 潜在社会偏见:尽管在确保训练数据安全方面做出了努力,但Phi-2并非完全没有社会偏见。它可能会生成反映这些社会偏见的内容,特别是在被明确提示或指示这样做时。
- 毒性问题:尽管使用精心挑选的数据进行训练,但如果明确提示或指示,模型仍可能产生有害内容。
- 冗长问题:Phi-2作为基础模型,在单次回复用户提示时,通常会在第一个答案之后产生不相关或多余的文本和响应。这是因为其训练数据集主要是教科书,导致其响应类似教科书。
🔧 技术细节
模型
属性 |
详情 |
模型类型 |
基于Transformer架构,目标是进行下一个单词预测 |
上下文长度 |
2048个标记 |
数据集大小 |
2500亿个标记,由AOAI GPT - 3.5创建的NLP合成数据和经过AOAI GPT - 4评估的Falcon RefinedWeb和SlimPajama的过滤网络数据组合而成 |
训练标记 |
14万亿个标记 |
GPU |
96个A100 - 80G |
训练时间 |
14天 |
软件
📄 许可证
该模型根据MIT许可证授权。
商标说明
本项目可能包含项目、产品或服务的商标或标志。对微软商标或标志的授权使用需遵守并必须遵循微软商标和品牌指南。在本项目的修改版本中使用微软商标或标志不得造成混淆或暗示微软的赞助。任何第三方商标或标志的使用均需遵守这些第三方的政策。