🚀 语言模型Phi-1
Phi-1是一个拥有13亿参数的Transformer语言模型,专门用于基础Python编码。它使用了多种数据源进行训练,在简单Python编码基准测试HumanEval上,展现出了超过50%的准确率。
🚀 快速开始
Phi-1已集成在transformers
4.37.0版本中,请确保使用的是该版本或更高版本。
✨ 主要特性
📦 安装指南
确保你使用的transformers
版本为4.37.0或更高。
💻 使用示例
基础用法
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)
高级用法
由于文档未提供高级用法示例,暂不展示。
📚 详细文档
预期用途
鉴于训练数据的性质,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未经过测试以确保其在生产级代码中的充分性能。请参考本文档的限制部分以获取更多详细信息。
局限性
- 范围有限:微调数据集中99.8%的Python脚本仅使用了"typing, math, random, collections, datetime, itertools"这些包。如果模型生成使用其他包的Python脚本,强烈建议用户手动验证所有API的使用。
- 复制在线脚本:由于模型是在在线Python脚本上训练的,有很小的可能性会复制这些脚本,尤其是在不同在线来源中反复出现的脚本。
- 生成不准确代码:模型经常生成不正确的代码。建议用户将这些输出视为灵感来源,而非最终解决方案。
- 对其他格式响应不可靠:尽管模型似乎能理解问答或聊天等格式的指令,但通常会给出不准确的答案,即使看起来很自信。其在非代码格式方面的能力明显更有限。
- 自然语言理解有限:作为一个编码机器人,Phi-1的主要重点是帮助解决与编码相关的问题。虽然它可能有一些自然语言理解能力,但其主要功能不是进行一般对话或像通用AI助手那样展示常识。其优势在于在编程和软件开发方面提供帮助和指导。
- 潜在偏差:与其他AI模型一样,Phi-1是在网络和合成数据上训练的。这些数据可能包含影响AI性能的偏差和错误。偏差可能来自各种来源,如不平衡的表示、刻板印象或训练数据中存在的有争议的观点。因此,模型有时可能会生成反映这些偏差或错误的响应。
安全风险警告
使用Phi-1时,务必保持警惕。尽管该模型功能强大,但可能会在生成的代码中无意中引入安全漏洞,例如:
- 目录遍历:代码可能未对目录遍历攻击实施安全检查,可能允许未经授权访问系统上的敏感文件。
- 注入攻击:可能在正确转义字符串方面存在疏漏,使应用程序容易受到SQL、操作系统命令或其他注入攻击。
- 误解需求:模型有时可能误解或简化用户需求,导致不完整或不安全的解决方案。
- 缺乏输入验证:在某些情况下,模型可能会忽略输入验证或清理用户输入,从而引发跨站脚本攻击(XSS)等攻击。
- 不安全的默认设置:模型可能会推荐或生成具有不安全默认设置的代码,如弱密码要求或未加密的数据传输。
- 错误处理不当:错误处理不当可能会无意中泄露系统或应用程序内部工作的敏感信息。
鉴于这些潜在风险以及其他未明确提及的风险,在将生成的代码部署到任何应用程序(尤其是对安全敏感的应用程序)之前,务必彻底审查、测试和验证代码。如有疑问,请咨询安全专家或进行严格的渗透测试。
训练
模型信息
属性 |
详情 |
模型类型 |
基于Transformer架构,目标是进行下一个单词预测 |
训练数据 |
540亿个标记(70亿个唯一标记) |
精度 |
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}
}
商标
本项目可能包含项目、产品或服务的商标或标志。对微软商标或标志的授权使用需遵循微软商标和品牌指南。在本项目的修改版本中使用微软商标或标志不得造成混淆或暗示微软的赞助。任何第三方商标或标志的使用均需遵循这些第三方的政策。