许可证: mit
许可证链接: https://huggingface.co/microsoft/phi-1/resolve/main/LICENSE
语言:
模型概述
Phi-1语言模型是一个拥有13亿参数的Transformer模型,专为Python基础编程而设计。其训练数据涵盖多种来源,包括来自The Stack v1.2的Python代码子集、StackOverflow的问答内容、code_contests的竞赛代码,以及由gpt-3.5-turbo-0301生成的合成Python教材与练习题。尽管该模型与当代大语言模型(LLMs)相比规模较小,Phi-1在简单Python编程基准测试HumanEval中仍展现出超过50%的准确率,表现令人瞩目。
使用方法
Phi-1已集成至transformers
库4.37.0版本,请确保您的版本不低于此。
适用场景
基于训练数据特性,Phi-1最适配以下代码格式的提示:
代码格式示例:
def print_prime(n):
"""
打印1到n之间的所有质数
"""
for num in range(2, n+1):
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
模型将在注释后生成代码。(注:此处else语句在Python循环中的用法正确且合法)
注意事项:
示例代码
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.set_default_device("cuda")
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-1", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-1")
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-1的局限性
-
功能局限:微调数据集中99.8%的Python脚本仅使用"typing, math, random, collections, datetime, itertools"包。若模型生成涉及其他包的代码,强烈建议人工验证所有API调用。
-
在线脚本复现:由于训练数据包含网络Python脚本,模型可能少量复现高频出现的网络代码片段。
-
错误代码生成:模型常生成错误代码,建议用户将其视为灵感来源而非最终方案。
-
非代码格式响应不可靠:尽管能理解问答或聊天等格式指令,模型常返回错误答案(即使表现自信),其非代码格式处理能力显著受限。
-
自然语言理解局限:作为编程助手,Phi-1核心能力在于解决编程问题。虽具备基础自然语言理解能力,但无法像通用AI助手般进行常识对话,其优势集中于软件开发领域的协助。
-
潜在偏见:与所有AI模型类似,Phi-1的训练数据(网络及合成数据)可能包含影响表现的偏见或错误,包括但不限于数据不平衡、刻板印象或争议观点。
安全风险警告
使用Phi-1时需高度警惕,模型可能无意中引入以下安全漏洞(包括但不限于):
-
目录遍历攻击:代码可能缺失安全校验,导致未授权访问系统敏感文件。
-
注入攻击:字符串转义处理不当可能引发SQL/OS命令注入等漏洞。
-
需求误解:模型可能过度简化需求,生成不完整或不安全的解决方案。
-
输入验证缺失:未对用户输入进行验证或净化,可能引发XSS等攻击。
-
不安全默认设置:代码可能包含弱密码要求或未加密传输等危险默认配置。
-
错误处理缺陷:不当的错误处理可能泄露系统敏感信息。
鉴于上述风险(及其他未列明隐患),在安全敏感场景中部署生成代码前,必须进行彻底审查、测试与验证。存疑时请咨询安全专家或执行严格渗透测试。
训练详情
模型参数
- 架构:基于Transformer的下一个词预测模型
- 训练token量:540亿token(70亿唯一token)
- 精度:fp16
- GPU:8块A100
- 训练时长:6天
依赖软件
许可证
模型采用MIT许可证。
引用文献
@article{gunasekar2023textbooks,
title={Textbooks Are All You Need},
author={Gunasekar, Suriya and Zhang, Yi and Aneja, Jyoti and Mendes, Caio C{\'e}sar Teodoro and Del Giorno, Allie and Gopi, Sivakanth and Javaheripi, Mojan and Kauffmann, Piero and de Rosa, Gustavo and Saarikivi, Olli and others},
journal={arXiv preprint arXiv:2306.11644},
year={2023}
}
商标声明
本项目可能包含第三方项目、产品或服务的商标标识。微软商标的使用须遵循微软商标与品牌指南。对本项目的修改若涉及微软商标,不得造成混淆或暗示微软赞助。第三方商标的使用受其所属方政策约束。