模型简介
模型特点
模型能力
使用案例
🚀 Orca 2
Orca 2专为研究目的而构建,可在推理用户给定数据、阅读理解、解决数学问题和文本摘要等任务中提供单轮响应。该模型尤其擅长推理。
🚀 快速开始
使用Hugging Face库进行推理
import torch
import transformers
if torch.cuda.is_available():
torch.set_default_device("cuda")
else:
torch.set_default_device("cpu")
model = transformers.AutoModelForCausalLM.from_pretrained("microsoft/Orca-2-7b", device_map='auto')
# https://github.com/huggingface/transformers/issues/27132
# please use the slow tokenizer since fast and slow tokenizer produces different tokens
tokenizer = transformers.AutoTokenizer.from_pretrained(
"microsoft/Orca-2-7b",
use_fast=False,
)
system_message = "You are Orca, an AI language model created by Microsoft. You are a cautious assistant. You carefully follow instructions. You are helpful and harmless and you follow ethical guidelines and promote positive behavior."
user_message = "How can you determine if a restaurant is popular among locals or mainly attracts tourists, and why might this information be useful?"
prompt = f"<|im_start|>system\n{system_message}<|im_end|>\n<|im_start|>user\n{user_message}<|im_end|>\n<|im_start|>assistant"
inputs = tokenizer(prompt, return_tensors='pt')
output_ids = model.generate(inputs["input_ids"],)
answer = tokenizer.batch_decode(output_ids)[0]
print(answer)
# This example continues showing how to add a second turn message by the user to the conversation
second_turn_user_message = "Give me a list of the key points of your first answer."
# we set add_special_tokens=False because we dont want to automatically add a bos_token between messages
second_turn_message_in_markup = f"\n<|im_start|>user\n{second_turn_user_message}<|im_end|>\n<|im_start|>assistant"
second_turn_tokens = tokenizer(second_turn_message_in_markup, return_tensors='pt', add_special_tokens=False)
second_turn_input = torch.cat([output_ids, second_turn_tokens['input_ids']], dim=1)
output_ids_2 = model.generate(second_turn_input,)
second_turn_answer = tokenizer.batch_decode(output_ids_2)[0]
print(second_turn_answer)
使用Azure AI Content Safety进行安全推理
强烈建议在模型预测的基础上使用 Azure AI Content Safety,这有助于防止一些内容危害。Azure AI Content Safety是一个内容审核平台,它使用人工智能来审核内容。通过在Orca 2的输出上使用Azure AI Content Safety,可以对模型输出进行审核,扫描不同的危害类别,包括性内容、暴力、仇恨和自我伤害等,支持多种严重程度级别和多语言检测。
import os
import math
import transformers
import torch
from azure.ai.contentsafety import ContentSafetyClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
from azure.ai.contentsafety.models import AnalyzeTextOptions
CONTENT_SAFETY_KEY = os.environ["CONTENT_SAFETY_KEY"]
CONTENT_SAFETY_ENDPOINT = os.environ["CONTENT_SAFETY_ENDPOINT"]
# We use Azure AI Content Safety to filter out any content that reaches "Medium" threshold
# For more information: https://learn.microsoft.com/en-us/azure/ai-services/content-safety/
def should_filter_out(input_text, threshold=4):
# Create an Content Safety client
client = ContentSafetyClient(CONTENT_SAFETY_ENDPOINT, AzureKeyCredential(CONTENT_SAFETY_KEY))
# Construct a request
request = AnalyzeTextOptions(text=input_text)
# Analyze text
try:
response = client.analyze_text(request)
except HttpResponseError as e:
print("Analyze text failed.")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
categories = ["hate_result", "self_harm_result", "sexual_result", "violence_result"]
max_score = -math.inf
for category in categories:
max_score = max(max_score, getattr(response, category).severity)
return max_score >= threshold
model_path = 'microsoft/Orca-2-7b'
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = transformers.AutoModelForCausalLM.from_pretrained(model_path)
model.to(device)
tokenizer = transformers.AutoTokenizer.from_pretrained(
model_path,
model_max_length=4096,
padding_side="right",
use_fast=False,
add_special_tokens=False,
)
system_message = "You are Orca, an AI language model created by Microsoft. You are a cautious assistant. You carefully follow instructions. You are helpful and harmless and you follow ethical guidelines and promote positive behavior."
user_message = "\" \n :You can't just say, \"\"that's crap\"\" and remove it without gaining a consensus. You already know this, based on your block history. —/ \" \nIs the comment obscene? \nOptions : Yes, No."
prompt = f"<|im_start|>system\n{system_message}<|im_end|>\n<|im_start|>user\n{user_message}<|im_end|>\n<|im_start|>assistant"
inputs = tokenizer(prompt, return_tensors='pt')
inputs = inputs.to(device)
output_ids = model.generate(inputs["input_ids"], max_length=4096, do_sample=False, temperature=0.0, use_cache=True)
sequence_length = inputs["input_ids"].shape[1]
new_output_ids = output_ids[:, sequence_length:]
answers = tokenizer.batch_decode(new_output_ids, skip_special_tokens=True)
final_output = answers[0] if not should_filter_out(answers[0]) else "[Content Filtered]"
print(final_output)
✨ 主要特性
- Orca 2专为研究目的而构建,主要用于让研究社区评估其能力,并为构建更好的前沿模型提供基础。
- 该模型尤其擅长推理,可在推理用户给定数据、阅读理解、解决数学问题和文本摘要等任务中提供单轮响应。
📚 详细文档
Orca 2的预期用途
- Orca 2仅用于研究目的。
- 主要目的是让研究社区评估其能力,并为构建更好的前沿模型提供基础。
Orca 2的评估方式
Orca 2已在大量任务上进行了评估,包括推理、基础事实和安全性等方面。具体评估细节请参考 Orca 2论文 的第6节和附录。
模型详情
Orca 2是LLAMA - 2的微调版本。Orca 2的训练数据是一个合成数据集,旨在增强小模型的推理能力。所有合成训练数据都使用Microsoft Azure内容过滤器进行了审核。有关该模型的更多详细信息,请参考 Orca 2论文。模型架构的详细信息请参考LLaMA - 2技术报告。
偏差、风险和局限性
Orca 2基于LLaMA 2模型家族构建,保留了其许多局限性,以及其他大型语言模型的常见局限性或由其训练过程导致的局限性,包括:
- 数据偏差:大型语言模型在大量数据上进行训练,可能会无意中携带源数据中存在的偏差。因此,这些模型可能会生成有潜在偏差或不公平的输出。
- 缺乏上下文理解:尽管这些模型在语言理解和生成方面具有令人印象深刻的能力,但它们对现实世界的理解有限,可能导致输出不准确或无意义。
- 缺乏透明度:由于模型的复杂性和规模,大型语言模型可能像“黑匣子”一样,难以理解特定输出或决策背后的原理。建议查看Azure的透明度说明以获取更多信息。
- 内容危害:大型语言模型可能会造成各种类型的内容危害。在使用这些模型时,了解这些危害并采取措施预防非常重要。建议利用不同公司和机构提供的各种内容审核服务。重要的是,我们希望未来政府和科技领袖能针对人工智能技术的内容危害制定更好的法规和标准。我们重视并认可研究和开源社区在这方面可以发挥的重要作用。
- 幻觉现象:重要的是要意识到并谨慎对待,不要完全依赖给定的语言模型来做出关键决策或获取可能有重大影响的信息,因为目前尚不清楚如何防止这些模型编造内容。此外,由于小模型规模较小、记忆能力有限,在无基础事实的生成用例中,它们是否更容易出现幻觉现象也不清楚。这是一个活跃的研究课题,我们希望未来能有更严格的测量、理解和缓解措施。
- 潜在的滥用风险:如果没有适当的保障措施,这些模型可能会被恶意用于生成虚假信息或有害内容。
- 数据分布:Orca 2的性能可能与调优数据的分布密切相关。这种相关性可能会限制其在训练数据集中代表性不足的领域(如数学、编程和推理)的准确性。
- 系统消息:Orca 2的性能会因系统指令的不同而有所差异。此外,模型规模带来的随机性可能会导致对不同系统指令生成非确定性的响应。
- 零样本设置:Orca 2主要在模拟零样本设置的数据上进行训练。虽然该模型在零样本设置中表现非常出色,但与其他模型(特别是更大的模型)相比,它在少样本学习方面的优势并不明显。
- 合成数据:由于Orca 2在合成数据上进行训练,它可能继承了用于数据生成的模型和方法的优点和缺点。我们认为Orca 2受益于训练期间纳入的安全措施和Azure OpenAI API中的安全护栏(如内容过滤器)。然而,需要进行详细研究以更好地量化这些风险。
该模型仅用于研究环境,且仅在该环境中进行了测试。不应将其用于下游应用,因为需要进行额外的分析来评估其在拟议应用中可能造成的危害或偏差。
🔧 技术细节
请参考LLaMA - 2技术报告了解模型架构的详细信息。有关该模型的更多详细信息,请参考 Orca 2论文。
📄 许可证
Orca 2遵循 Microsoft Research License 许可协议。Llama 2遵循 LLAMA 2 Community License 许可协议,版权所有 © Meta Platforms, Inc. 保留所有权利。
📚 引用
@misc{mitra2023orca,
title={Orca 2: Teaching Small Language Models How to Reason},
author={Arindam Mitra and Luciano Del Corro and Shweti Mahajan and Andres Codas and Clarisse Simoes and Sahaj Agrawal and Xuxi Chen and Anastasia Razdaibiedina and Erik Jones and Kriti Aggarwal and Hamid Palangi and Guoqing Zheng and Corby Rosset and Hamed Khanpour and Ahmed Awadallah},
year={2023},
eprint={2311.11045},
archivePrefix={arXiv},
primaryClass={cs.AI}
}
📦 信息表格
属性 | 详情 |
---|---|
模型类型 | Orca 2是LLAMA - 2的微调版本 |
训练数据 | 一个合成数据集,旨在增强小模型的推理能力,所有合成训练数据都使用Microsoft Azure内容过滤器进行了审核 |



