Phi-1 是一款拥有 13 亿参数的 Transformer 语言模型,专为基础 Python 编程任务设计。其训练数据融合了多源内容,包括来自 The Stack v1.2 的 Python 代码子集、StackOverflow 的问答内容、code_contests 的竞赛代码,以及由 gpt-3.5-turbo-0301 生成的合成 Python 教材与练习题。尽管模型与训练集规模相较于当代大语言模型(LLM)偏小,Phi-1 在基础 Python 编程评测 HumanEval 中仍展现出超过 50% 的惊人准确率。
Phi-1 已集成于 transformers 4.37.0 版本,请确保您的环境使用该版本或更高版本。
基于训练数据特性,Phi-1 最适用于代码格式的提示:
def print_prime(n):
"""
Print all primes between 1 and n
"""
for num in range(2, n+1):
for i in range(2, num):
if num % i == 0:
break
else:
print(num)其中模型在注释后生成代码。(注意:这是在Python循环中正确使用else语句的合法方式。)
注意事项:
Phi-1专为代码生成目的而设计。模型生成的代码应视为潜在用例的起点,而非最终解决方案。用户在实际应用中需谨慎使用此模型。
本研究项目不涉及直接应用于生产编码任务。因此,Phi-1尚未经过测试以确保其能满足生产级代码的性能要求。更多详细信息请参阅本文档的局限性说明部分。
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):
"""
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)适用范围有限:我们的微调数据集中 99.8% 的 Python 脚本仅使用 "typing, math, random, collections, datetime, itertools" 这些包。如果模型生成了使用其他包的 Python 脚本,我们强烈建议用户手动验证所有 API 的使用情况。
在线脚本复现:由于我们的模型是基于网上找到的 Python 脚本进行训练的,因此它有可能复现这些脚本,尤其是在不同在线来源中反复出现的情况下。
生成不准确代码:该模型经常生成错误的代码。我们建议用户将这些输出视为灵感来源,而非最终解决方案。
对替代格式的响应不可靠:尽管模型似乎能理解问答或聊天等格式的指令,但它经常给出不准确的答案,即使显得很自信。其在非代码格式上的能力明显更为有限。
自然语言理解限制:作为一款编程助手,Phi-1 主要专注于帮助解决与编码相关的问题。虽然它可能具备一定的自然语言理解能力,但其主要功能并非进行一般性对话或像通用 AI 助手那样展示常识。其优势在于在编程和软件开发背景下提供协助和指导。
潜在偏见:与其他 AI 模型一样,Phi-1 是基于网络和合成数据进行训练的。这些数据可能包含影响 AI 性能的偏见和错误。偏见可能源于训练数据中的不平衡表征、刻板印象或争议性观点等多种来源。因此,模型有时可能会生成反映这些偏见或错误的响应。
使用 Phi-1 时,保持警惕至关重要。该模型虽然强大,但可能无意中在生成的代码中引入安全漏洞。示例包括但不限于:
目录遍历攻击:代码可能未能实施针对目录遍历攻击的安全检查,可能导致未经授权访问系统上的敏感文件。
注入攻击:可能存在字符串转义不当的情况,使应用程序易受 SQL、操作系统命令或其他注入攻击。
误解需求:模型有时可能误解或过度简化用户需求,导致不完整或不安全的解决方案。
缺乏输入验证:在某些情况下,模型可能忽略加入输入验证或清理用户输入,从而为跨站脚本(XSS)等攻击打开大门。
不安全默认设置:模型可能推荐或生成具有不安全默认设置的代码,如弱密码要求或未加密的数据传输。
错误处理失败:不当的错误处理可能无意中泄露关于系统或应用程序内部工作的敏感信息。
鉴于这些潜在缺陷以及其他未明确提及的风险,在将生成的代码部署到任何应用程序(尤其是安全敏感的应用程序)之前,必须彻底审查、测试和验证。如有疑问,请务必咨询安全专家或执行严格的渗透测试。
本模型采用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}
}本项目可能包含项目、产品或服务的商标或标识。微软商标或标识的授权使用须遵守并符合《微软商标与品牌指南》的要求。在本项目的修改版本中使用微软商标或标识时,不得造成混淆或暗示微软的赞助。任何第三方商标或标识的使用均遵循相应第三方的政策。