language:
- es
license: cc-by-nc-sa-4.0
library_name: transformers
tags:
- 标题党
- 新闻
- 西班牙语
- 摘要
- 摘要生成
base_model: NousResearch/Nous-Hermes-2-SOLAR-10.7B
datasets:
- Iker/NoticIA
metrics:
- rouge
pipeline_tag: text-generation
widget:
- example_title: 摘要示例
messages:
- role: user
content: '你现在是一个擅长拆解耸动或标题党标题的人工智能专家。你的任务是分析带有耸动标题的新闻,并生成一句话摘要来揭示标题背后的真相。\n这是新闻标题:给97岁祖母买外套后她的反应堪称梦幻\n标题提出了一个问题或提供了不完整的信息。你需要在新闻正文中找出一句话来回答标题所暗示的内容。尽可能引用原文,特别是当某人有直接引语时。若引用他人话语,请使用引号标明。用最简练的语言回答,不必是完整句子,只需聚焦问题核心。请始终用西班牙语回答。\n这是新闻正文:\nX用户@Kokreta1讲述了与97岁祖母的对话——当她送上生日礼物外套时。考虑到老人高龄,这位推特用户特意选了符合年龄的衣物,但奶奶并不认同。"这外套是老气款",老人看到后评价道。"我发誓我是真爱粉。明天我们俩一起去(重买)。不过得带她去Bershka",年轻女孩笑着补充。据该服装品牌(隶属Inditex集团)表示,其目标客户是追求潮流、关注音乐和社交媒体的年轻群体,因此老年人通常不穿这类风格。老太太特立独行的性格引发网友热议,该推文已获超1000点赞、近100转发及大量评论。'
基于NoticIA数据集微调的模型,可生成标题党新闻的摘要。
开源模型
评估结果
使用示例:
摘要网页新闻
import torch
from newspaper import Article
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
article_url ="https://www.huffingtonpost.es/virales/le-compra-abrigo-abuela-97nos-reaccion-fantasia.html"
article = Article(article_url)
article.download()
article.parse()
headline=article.title
body = article.text
def prompt(
headline: str,
body: str,
) -> str:
"""
生成模型提示词
参数:
headline (`str`):
新闻标题
body (`str`):
新闻正文
返回:
`str`: 格式化后的提示词
"""
return (
f"你现在是一个擅长拆解耸动或标题党标题的人工智能专家。"
f"你的任务是分析带有耸动标题的新闻,"
f"并生成一句话摘要来揭示标题背后的真相。\n"
f"这是新闻标题:{headline}\n"
f"标题提出了一个问题或提供了不完整的信息。"
f"你需要在新闻正文中找出一句话来回答标题所暗示的内容。"
f"尽可能引用原文,特别是当某人有直接引语时。"
f"若引用他人话语,请使用引号标明。"
f"用最简练的语言回答。不必是完整句子,"
f"只需聚焦问题核心。"
f"请始终用西班牙语回答。\n"
f"这是新闻正文:\n"
f"{body}\n"
)
prompt = prompt(headline=headline, body=body)
tokenizer = AutoTokenizer.from_pretrained("Iker/ClickbaitFighter-10B")
model = AutoModelForCausalLM.from_pretrained(
"Iker/ClickbaitFighter-10B", torch_dtype=torch.bfloat16, device_map="auto"
)
formatted_prompt = tokenizer.apply_chat_template(
[{"role": "user", "content": prompt}],
tokenize=False,
add_generation_prompt=True,
)
model_inputs = tokenizer(
[formatted_prompt], return_tensors="pt", add_special_tokens=False
)
model_output = model.generate(**model_inputs.to(model.device), generation_config=GenerationConfig(
max_new_tokens=32,
min_new_tokens=1,
do_sample=False,
num_beams=1,
use_cache=True
))
summary = tokenizer.batch_decode(model_output,skip_special_tokens=True)[0]
print(summary.strip().split("\n")[-1])
在NoticIA数据集上运行推理
import torch
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
dataset = load_dataset("Iker/NoticIA")
example = dataset["test"][0]
headline = example["web_headline"]
body = example["web_text"]
def prompt(
headline: str,
body: str,
) -> str:
"""
生成模型提示词
参数:
headline (`str`):
新闻标题
body (`str`):
新闻正文
返回:
`str`: 格式化后的提示词
"""
return (
f"你现在是一个擅长拆解耸动或标题党标题的人工智能专家。"
f"你的任务是分析带有耸动标题的新闻,"
f"并生成一句话摘要来揭示标题背后的真相。\n"
f"这是新闻标题:{headline}\n"
f"标题提出了一个问题或提供了不完整的信息。"
f"你需要在新闻正文中找出一句话来回答标题所暗示的内容。"
f"尽可能引用原文,特别是当某人有直接引语时。"
f"若引用他人话语,请使用引号标明。"
f"用最简练的语言回答。不必是完整句子,"
f"只需聚焦问题核心。"
f"请始终用西班牙语回答。\n"
f"这是新闻正文:\n"
f"{body}\n"
)
prompt = prompt(headline=headline, body=body)
tokenizer = AutoTokenizer.from_pretrained("Iker/ClickbaitFighter-10B")
model = AutoModelForCausalLM.from_pretrained(
"Iker/ClickbaitFighter-10B", torch_dtype=torch.bfloat16, device_map="auto"
)
formatted_prompt = tokenizer.apply_chat_template(
[{"role": "user", "content": prompt}],
tokenize=False,
add_generation_prompt=True,
)
model_inputs = tokenizer(
[formatted_prompt], return_tensors="pt", add_special_tokens=False
)
model_output = model.generate(**model_inputs.to(model.device), generation_config=GenerationConfig(
max_new_tokens=32,
min_new_tokens=1,
do_sample=False,
num_beams=1,
use_cache=True
))
summary = tokenizer.batch_decode(model_output,skip_special_tokens=True)[0]
print(summary.strip().split("\n")[-1])
引用
@misc{noticia2024,
title={NoticIA: 西班牙语标题党新闻摘要数据集},
author={Iker García-Ferrero and Begoña Altuna},
year={2024},
eprint={2404.07611},
archivePrefix={arXiv},
primaryClass={cs.CL}
}