File size: 1,488 Bytes
a1da864
 
7c7241f
951bc06
7c7241f
 
a1da864
 
 
 
7c7241f
 
a1da864
951bc06
a1da864
951bc06
 
 
a1da864
951bc06
a1da864
 
 
951bc06
a1da864
 
951bc06
a1da864
951bc06
7c7241f
a1da864
 
951bc06
7c7241f
951bc06
a1da864
 
951bc06
 
a1da864
951bc06
a1da864
951bc06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch


def summarize_text(text, max_length=300, min_length=50):
    """
    使用 Qwen2.5-0.5B-Instruct 生成摘要
    :param text: 输入的文章内容(支持中英文)
    :param max_length: 摘要最大长度(汉字数)
    :param min_length: 摘要最小长度(汉字数)
    :return: 生成的摘要
    """
    model_name = "Qwen/Qwen2.5-0.5B-Instruct"

    # 加载模型和分词器
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto")
    model.to(device)
    tokenizer = AutoTokenizer.from_pretrained(model_name)

    # 构建提示
    prompt = f"请将以下文章总结为{max_length}字以内的摘要:\n\n{text}"
    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=max_length + 50, temperature=0.3
    )

    # 处理生成结果
    generated_ids = [
        output_ids[len(input_ids) :]
        for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]

    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    return response