许可证:apache-2.0
语言:
标签:
ConvoSenseGenerator模型卡
ConvoSenseGenerator是一款生成式模型,能够为对话上下文生成常识推理,涵盖10种常见社交常识类型,包括情绪反应、动机、原因、后续事件等!
该模型基于大规模数据集ConvoSense训练而成,该数据集通过ChatGPT3.5合成收集。
ConvoSenseGenerator生成的推理被人类评价为具有高合理性、高新颖信息率以及高细节度,优于基于以往人工编写数据集训练的模型。
模型描述
模型训练
ConvoSenseGenerator基于我们最新的数据集ConvoSense训练,其骨干模型为T5-3b。
使用方法
ConvoSenseGenerator支持以下常识类型,对应问题如下:
commonsense_questions = {
"cause": '导致最后这句话发生的原因可能是什么?',
"prerequisities": '最后这句话发生需要哪些前提条件?',
"motivation": '基于刚才的话,Speaker可能受到什么情绪或人类动机的驱动?',
"subsequent": 'Speaker说完这句话后可能会发生什么?',
"desire": 'Speaker接下来想做什么?',
"desire_o": '基于Speaker刚才的话,Listener接下来会想做什么?',
"react": 'Speaker在说完这句话后的感受如何?',
"react_o": '因为Speaker的话,Listener的感受如何?',
"attribute": '基于刚才的话,Speaker可能具备什么特征?',
"constituents": '如何将最后这句话分解为一系列必要的子事件?'
}
根据论文实验,ConvoSenseGenerator最佳性能的生成配置如下:
generation_config = {
"repetition_penalty": 1.0,
"num_beams": 10,
"num_beam_groups": 10,
"diversity_penalty": 0.5
}
以下为调用模型的简单代码示例:
import torch
from transformers import AutoTokenizer, T5ForConditionalGeneration
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained("sefinch/ConvoSenseGenerator")
model = T5ForConditionalGeneration.from_pretrained("sefinch/ConvoSenseGenerator").to(device)
def format_input(conversation_history, commonsense_type):
prefixed_turns = [
f"{'Speaker' if i % 2 == 0 else 'Listener'}: {u}"
for i, u in enumerate(reversed(conversation_history))
][::-1]
truncated_turns = prefixed_turns[-7:]
conversation_string = '\n'.join(truncated_turns)
input_text = f"根据对话提供合理答案:\n{conversation_string}\n\n[问题] {commonsense_questions[commonsense_type]}\n[答案]"
return input_text
def generate(conversation_history, commonsense_type):
input_text = format_input(conversation_history, commonsense_type)
inputs = tokenizer([input_text], return_tensors="pt").to(device)
outputs = model.generate(
inputs["input_ids"],
repetition_penalty=1.0,
num_beams=10,
num_beam_groups=10,
diversity_penalty=0.5,
num_return_sequences=5,
max_new_tokens=400
)
inferences = tokenizer.batch_decode(outputs, skip_special_tokens=True)
return inferences
conversation = [
"嘿,我想说服父母养狗,但他们说太麻烦了。",
"你可以承诺承担所有照顾工作呀,试过吗?",
"但我不想冬天还得带狗出去散步!"
]
inferences = generate(conversation, "cause")
print('\n'.join(inferences))
引用
如果本资源对您有帮助,请引用我们的工作:
@article{convosense_finch:24,
author = {Finch, Sarah E. and Choi, Jinho D.},
title = "{ConvoSense: Overcoming Monotonous Commonsense Inferences for Conversational AI}",
journal = {Transactions of the Association for Computational Linguistics},
volume = {12},
pages = {467-483},
year = {2024},
month = {05},
issn = {2307-387X},
doi = {10.1162/tacl_a_00659},
url = {https://doi.org/10.1162/tacl\_a\_00659},
eprint = {https://direct.mit.edu/tacl/article-pdf/doi/10.1162/tacl\_a\_00659/2369521/tacl\_a\_00659.pdf},
}