开源协议: mit
协议链接: https://huggingface.co/microsoft/phi-2/resolve/main/LICENSE
支持语言:
- 英文
任务类型: 文本生成
标签:
- 自然语言处理
- 代码
模型概述
Phi-2 是一个拥有 27亿 参数的 Transformer 模型。其训练数据源与 Phi-1.5 相同,并新增了包含各类 NLP 合成文本及经过安全性筛选的网页数据(具备教育价值)。在常识理解、语言能力和逻辑推理等基准测试中,Phi-2 展现了接近最先进的性能表现(在参数量小于 130 亿的模型中)。
本模型未经过人类反馈强化学习微调。我们开源这个模型的初衷,是为研究社区提供一个无限制的小型模型,用以探索关键的安全挑战,例如降低毒性、理解社会偏见、增强可控性等。
使用方法
Phi-2 已集成至 transformers
4.37.0 版本,请确保使用该版本或更高版本。
已知 Phi-2 存在注意力溢出问题(FP16 精度下)。若遇到此问题,请在 PhiAttention.forward() 函数中启用/禁用自动类型转换。
适用场景
基于训练数据特性,Phi-2 模型最适合以下格式的提示:问答格式、对话格式和代码格式。
问答格式:
可直接输入独立问题作为提示:
写一个关于数学与灯塔之间的详细类比。
模型将在句号后生成文本。
若希望获得更简洁的回答,可尝试以下指令格式:"Instruct: <提示>\nOutput:"
Instruct: 写一个关于数学与灯塔之间的详细类比。
Output: 数学如同灯塔。正如灯塔指引船只安全靠岸,数学在数字与逻辑的世界中提供指引之光。它帮助我们穿越复杂问题并找到解决方案。如同灯塔发出稳定的光束,数学为推理和问题解决提供一致的框架。它照亮理解之路,帮助我们认知周遭世界。
模型将在"Output:"后生成文本。
对话格式:
Alice: 不知道为什么,我学习时总是难以保持专注。有什么建议吗?
Bob: 你试过制定学习计划并严格执行吗?
Alice: 试过,但效果不太明显。
Bob: 或许你可以尝试在图书馆这类安静环境中学习。
Alice: ...
模型将在第一个"Bob:"后生成文本。
代码格式:
def print_prime(n):
"""
打印1到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
加载模型以避免副作用。
示例代码
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):
"""
打印1到n之间的所有质数
"""''', return_tensors="pt", return_attention_mask=False)
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)
Phi-2 的局限性
-
生成不准确的代码与事实:模型可能产生错误的代码片段和陈述。用户应将这些输出视为建议而非准确解决方案。
-
代码范围有限:训练数据主要基于 Python 及常用包(如 typing, math, random 等)。若模型生成使用其他包或其他语言的脚本,强烈建议用户手动验证所有 API 调用。
-
指令响应不可靠:模型未经过指令微调,可能无法遵循复杂或微妙的用户指令。
-
语言局限:模型主要理解标准英语。非正式英语、俚语或其他语言可能导致理解错误。
-
潜在社会偏见:尽管训练数据经过安全筛选,模型仍可能反映社会偏见。用户需保持警惕并批判性看待输出内容。
-
毒性内容:即使训练数据经过严格筛选,模型在被明确诱导时仍可能生成有害内容。我们开源此模型旨在帮助社区研发降低预训练模型毒性的有效方法。
-
冗余输出:作为基础模型,Phi-2 常会在首次回答后产生无关文本。这是因其训练数据主要来自教科书,导致回答呈现教科书式风格。
训练详情
模型架构
- 基础架构:基于 Transformer 的下一词预测模型
- 上下文长度:2048 tokens
- 数据集规模:2500 亿 tokens,包含 AOAI GPT-3.5 生成的 NLP 合成数据及经 GPT-4 评估筛选的 Falcon RefinedWeb 和 SlimPajama 网络数据
- 训练 tokens:1.4 万亿 tokens
- 硬件配置:96 块 A100-80G GPU
- 训练时长:14 天
软件依赖
开源协议
本模型采用 MIT 协议授权。
商标声明
本项目可能包含项目、产品或服务的商标标识。微软商标的使用须遵循 微软商标使用规范。对本项目的任何修改不得导致与微软产生混淆或暗示微软赞助。第三方商标的使用受其所属方政策约束。