【名著】《三国演义》人物对话内容数据集
浏览 878下载 36数据大小: 0.5文件格式: XLSX2024/10/15
#DistilBERT#三国演义#人物对话数据集#自然语言处理#NLP#文本分类#情感分析#机器学习#深度学习#transformers库#PyTorch#对话生成#BERT#文本预处理#AI模型训练#中文NLP
数据集简介
**《三国演义》**是中国古代四大名著之一,由罗贯中撰写,描绘了三国时期魏、蜀、吴三国的兴衰与英雄人物的博弈。本数据集基于《三国演义》中的人物对话内容,旨在为自然语言处理(NLP)领域提供高质量的中文语料,适用于对话生成、情感分析、文本理解等多项任务。
数据集特点
- 对话提取:从《三国演义》原文中提取了大量人物对话,去除人物名称和背景描述,专注于对话内容的分析与生成。
- 内容丰富:数据集涵盖了三国时期重要人物之间的对话,包括曹操、刘备、孙权、诸葛亮等众多经典角色。
- 格式清晰:数据集简洁地呈现出书中的对话内容,便于NLP任务中的处理和分析。
- 应用广泛:该数据集适用于对话生成模型、情感分析、角色关系研究等NLP任务。
数据集用途
- 对话生成:适用于训练生成三国背景对话的模型,为对话系统、智能助手等提供经典文学语料。
- 情感分析:通过分析人物对话的情感变化,研究古代文献中的人物性格和语言表达。
- 文本理解:适用于文本分类、人物关系提取等任务,帮助研究者深入理解《三国演义》中的情节和人物。
数据集格式
该数据集以文本格式提供,包含《三国演义》中的对话内容,适用于自然语言处理和机器学习模型的训练。对话内容已按照原文提取,去除人物信息和上下文背景。
数据预览
| Dialogue |
|---|
| 此名《太平要术》,汝得之,当代天宣化,普救世人;若萌异心,必获恶报。 |
| 吾乃南华老仙也。 |
| 苍天已死,黄天当立;岁在甲子,天下大吉。 |
| 至难得者,民心也。今民心已顺,若不乘势取天下,诚为可惜。 |
| 今汉运将终,大圣人出。汝等皆宜顺天从正,以乐太平。 |
| 贼兵众,我兵寡,明公宜作速招军应敌。 |
| 此家必出贵人。 |
| 我为天子,当乘此车盖。 |
| 此儿非常人也! |
| 大丈夫不与国家出力,何故长叹? |
| 某姓张,名飞,字翼德。世居涿郡,颇有庄田,卖酒屠猪,专好结交天下豪杰。恰才见公看榜而叹,故此相问。 |
| 我本汉室宗亲,姓刘,名备。今闻黄巾倡乱,有志欲破贼安民,恨力不能,故长叹耳。 |
| 吾颇有资财,当招募乡勇,与公同举大事,如何。 |
| 快斟酒来吃,我待赶入城去投军。 |
| 吾姓关,名羽,字长生,后改云长,河东解良人也。因本处势豪倚势凌人,被吾杀了,逃难江湖,五六年矣。今闻此处招军破贼,特来应募。 |
| 吾庄后有一桃园,花开正盛;明日当于园中祭告天地,我三人结为兄弟,协力同心,然后可图大事。 |
| 如此甚好。 |
| 念刘备、关羽、张飞,虽然异姓,既结为兄弟,则同心协力,救困扶危;上报国家,下安黎庶。不求同年同月同日生,只愿同年同月同日死。皇天后土,实鉴此心,背义忘恩,天人共戮! |
| 此天佑我也! |
| 反国逆贼,何不早降! |
| 备愿往救之。 |
| 贼众我寡;必出奇兵,方可取胜。 |
| 近闻中郎将卢植与贼首张角战于广宗,备昔曾师事卢植,欲往助之。 |
| 我今围贼在此,贼弟张梁、张宝在颍川,与皇甫嵩、朱儁对垒。汝可引本部人马,我更助汝一千官军,前去颍川打探消息,约期剿捕。 |
| 贼依草结营,当用火攻之。 |
| 叔言汝中风,今已愈乎? |
| 儿自来无此病;因失爱于叔父,故见罔耳。 |
| 天下将乱,非命世之才不能济。能安之者,其在君乎? |
| 汉室将亡,安天下者,必此人也。 |
| 我何如人? |
| 子治世之能臣,乱世之奸雄也。 |
| 张梁、张宝势穷力乏,必投广宗去依张角。玄德可即星夜往助。 |
| 我围张角,将次可破;因角用妖术,未能即胜。朝廷差黄门左丰前来体探,问我索取贿赂。我答曰:‘军粮尚缺,安有余钱奉承天使?’左丰挟恨,回奏朝廷,说我高垒不战,惰慢军心;因此朝廷震怒,遣中郎将董卓来代将我兵,取我回京问罪。 |
| 朝廷自有公论,汝岂可造次? |
| 卢中郎已被逮,别人领兵,我等去无所依,不如且回涿郡。 |
| 此张角也!可速战! |
| 白身。 |
| 我等亲赴血战,救了这厮,他却如此无礼。若不杀之,难消我气! |
| 若不杀这厮,反要在他部下听令,其实不甘!二兄要便住在此,我自投别处去也! |
| 我三人义同生死,岂可相离?不若都投别处去便了。 |
| 若如此,稍解吾恨。 |
| 彼用妖术,我来日可宰猪羊狗血,令军士伏于山头;候贼赶来,从高坡上泼之 |
| 皇甫嵩大获胜捷,朝廷以董卓屡败,命嵩代之。嵩到时,张角已死;张梁统其众,与我军相拒,被皇甫嵩连胜七阵,斩张梁于曲阳。发张角之棺,戮尸枭首,送往京师。余众俱降。朝廷加皇甫嵩为车骑将军,领冀州牧。皇甫嵩又表奏卢植有功无罪,朝廷复卢植原官。曹操亦以有功,除济南相,即日将班师赴任。 |
| 昔高祖之得天下,盖为能招降纳顺;公何拒韩忠耶? |
| 彼一时,此一时也。昔秦、项之际,天下大乱,民无定主,故招降赏附,以劝来耳。今海内一统,惟黄巾造反;若容其降,无以劝善。使贼得利恣意劫掠,失利便投降:此长寇之志,非良策也。 |
| 不容寇降是矣。今四面围如铁桶,贼乞降不得,必然死战。万人一心,尚不可当,况城中有数万死命之人乎?不若撤去东南,独攻西北。贼必弃城而走,无心恋战,可即擒也。 |
| 此贼可擒也。 |
| 昔黄巾造反,其原皆由十常侍卖官鬻爵,非亲不用,非仇不诛,以致天下大乱。今宜斩十常侍,悬首南郊,遣使者布告天下,有功者重加赏赐,则四海自清平也。 |
| 张钧欺主。 |
示例代码(Python 加载)
下面是一个使用DistilBERT模型处理《三国演义》人物对话数据集的完整案例,旨在提供一个简洁、易于复现的解决方案。我们将使用Hugging Face的transformers库,并基于《三国演义》人物对话数据集进行文本分类任务(例如情感分析或对话生成)。
环境准备
在开始之前,请确保已经安装了必要的库:
pip install transformers torch datasets使用DistilBERT的代码示例
以下代码展示了如何使用DistilBERT来处理这个对话数据集,完成一个简单的分类任务(例如情感分类:积极或消极对话)。你可以根据需要修改为生成任务或其他用途。
步骤1:加载数据并进行预处理
import torch
from transformers import DistilBertTokenizer, DistilBertForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset, Dataset
# 加载《三国演义》对话数据集
data = {
'dialogue': [
"我不杀伯仁,伯仁却因我而死。",
"大风起兮云飞扬,威加海内兮归故乡。",
"兄弟如手足,妻子如衣服。",
"士别三日,当刮目相待。",
"君子不重则不威,学则不固。"
],
'label': [0, 1, 1, 1, 0] # 假设0代表消极对话,1代表积极对话
}
# 将数据转换为Dataset格式
dataset = Dataset.from_dict(data)
# 加载DistilBERT的Tokenizer
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
# 定义数据预处理函数
def preprocess_function(examples):
return tokenizer(examples['dialogue'], truncation=True, padding='max_length', max_length=128)
# 对数据集进行Tokenize
tokenized_dataset = dataset.map(preprocess_function, batched=True)
# 加载DistilBERT模型(用于二分类)
model = DistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased', num_labels=2)
步骤2:设置训练参数并进行训练
# 设置训练参数
training_args = TrainingArguments(
output_dir='./results',
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
num_train_epochs=3,
weight_decay=0.01
)
# 定义Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset,
eval_dataset=tokenized_dataset
)
# 开始训练
trainer.train()
步骤3:对新对话进行分类
训练完成后,你可以使用模型来预测新的《三国演义》对话的情感或其他分类任务:
# 定义分类函数
def classify_dialogue(dialogue):
inputs = tokenizer(dialogue, return_tensors="pt", truncation=True, padding=True, max_length=128)
with torch.no_grad():
logits = model(**inputs).logits
predicted_class = torch.argmax(logits, dim=1).item()
return predicted_class
# 示例对话进行分类
new_dialogue = "天下大势,分久必合,合久必分。"
prediction = classify_dialogue(new_dialogue)
label_map = {0: "消极对话", 1: "积极对话"}
print(f"对话: {new_dialogue}")
print(f"预测的情感类别: {label_map[prediction]}")
代码解释
- 数据加载和预处理:Dataset.from_dict 将对话和对应的标签转换为适合transformers库处理的数据格式。使用DistilBertTokenizer对对话进行Tokenize操作,转换为DistilBERT所需的格式。
- 模型训练:我们使用DistilBertForSequenceClassification进行二分类任务,模型会根据对话的文本内容预测其情感标签。Trainer 是Hugging Face提供的高层接口,简化了训练和评估的过程。
- 对话分类:定义classify_dialogue函数,用于对新对话进行情感预测。使用torch.no_grad()确保在推理过程中不计算梯度,提升效率。