QwenLong-L1:实现长文本推理的强化学习模型
QwenLong-L1 项目地址: https://gitcode.com/gh_mirrors/qw/QwenLong-L1
项目介绍
QwenLong-L1 是一个基于强化学习(Reinforcement Learning, RL)的长文本推理模型框架。它旨在帮助大型语言模型(Large Reasoning Models, LRM)从对短文本的熟练处理过渡到对长文本的稳健泛化。QwenLong-L1 的核心在于通过渐进式上下文扩展,在 RL 训练期间增强短文本 LRMs 的能力。
项目技术分析
QwenLong-L1 框架结合了三种核心组件,以提升长文本推理能力:
- 预热监督微调(Supervised Fine-Tuning, SFT)阶段:此阶段旨在初始化一个稳健的策略,为后续的 RL 训练打下基础。
- 基于课程学习的 RL 阶段:通过逐步增加上下文长度的方式,促进模型从短文本到长文本的稳定适应。
- 难度感知回顾采样机制:该机制通过在不同阶段调整训练复杂度,激励策略的探索。
QwenLong-L1 还整合了最新的 RL 算法,如 GRPO 和 DAPO,并使用混合奖励函数,结合基于规则和基于模型的二元结果奖励,以平衡精度和召回率。此外,通过策略优化中的组相对优势策略,引导 LRM 学习有效的推理模式,实现长文本的有效定位和优越的推理能力。
项目及技术应用场景
QwenLong-L1 模型特别适用于需要处理长文档问答(Document Question Answering, DocQA)的场景,如学术研究、法律咨询、金融分析等。以下是一些具体的应用场景:
- 学术研究:处理长篇学术论文的问答,支持研究者快速定位关键信息。
- 法律咨询:分析法律文档,为客户提供准确的咨询响应。
- 金融分析:解读复杂的财务报告和市场分析,辅助决策。
项目特点
QwenLong-L1 模型具有以下显著特点:
- 强化学习框架:通过 RL 训练,使模型能够更好地适应长文本推理。
- 渐进式上下文扩展:在训练过程中逐步增加上下文长度,增强模型的泛化能力。
- 混合奖励函数:结合规则和模型基础的二元结果奖励,平衡模型的精度和召回率。
- 表现卓越:在七个长文本 DocQA 基准测试中表现出领先性能,超过其他旗舰 LRM,如 OpenAI-o3-mini 和 Qwen3-235B-A22B。
实践应用
QwenLong-L1 已经在实践中展示了其强大的性能。以下是模型的快速入门示例,展示了如何使用 🤗 Transformers 库加载和运行模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "<MODEL_NAME_HERE>"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 模拟上下文和问题
context = "<YOUR_CONTEXT_HERE>"
question = "<YOUR_QUESTION_HERE>"
prompt = f"Please read the following text and answer the question below. <text>{context}</text> {question} Format your response as follows: 'Therefore, the answer is (insert answer here)'."
# 生成模型输入
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 文本生成
generated_ids = model.generate(
**model_inputs,
max_new_tokens=10000,
temperature=0.7,
top_p=0.95
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
# 解析思考内容
index = len(output_ids) - output_ids[::-1].index(151649) if output_ids[::-1].index(151649) else 0
thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")
content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")
print("thinking content:", thinking_content)
print("content:", content)
QwenLong-L1 作为一个开源项目,已经在多个领域显示了其巨大的潜力,是当前长文本推理领域的一个突破性进展。对于需要进行长文本处理的开发者和研究
QwenLong-L1 项目地址: https://gitcode.com/gh_mirrors/qw/QwenLong-L1
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考