지즈 데이터셋

【名著】《三国演义》人物对话内容数据集

조회 879다운로드 36크기: 0.5형식: XLSX2024. 10. 15.

개요

**《三国演义》**是中国古代四大名著之一,由罗贯中撰写,描绘了三国时期魏、蜀、吴三国的兴衰与英雄人物的博弈。本数据集基于《三国演义》中的人物对话内容,旨在为自然语言处理(NLP)领域提供高质量的中文语料,适用于对话生成、情感分析、文本理解等多项任务。

数据集特点
  • 对话提取:从《三国演义》原文中提取了大量人物对话,去除人物名称和背景描述,专注于对话内容的分析与生成。
  • 内容丰富:数据集涵盖了三国时期重要人物之间的对话,包括曹操、刘备、孙权、诸葛亮等众多经典角色。
  • 格式清晰:数据集简洁地呈现出书中的对话内容,便于NLP任务中的处理和分析。
  • 应用广泛:该数据集适用于对话生成模型、情感分析、角色关系研究等NLP任务。
数据集用途
  1. 对话生成:适用于训练生成三国背景对话的模型,为对话系统、智能助手等提供经典文学语料。
  2. 情感分析:通过分析人物对话的情感变化,研究古代文献中的人物性格和语言表达。
  3. 文本理解:适用于文本分类、人物关系提取等任务,帮助研究者深入理解《三国演义》中的情节和人物。
数据集格式

该数据集以文本格式提供,包含《三国演义》中的对话内容,适用于自然语言处理和机器学习模型的训练。对话内容已按照原文提取,去除人物信息和上下文背景。

미리보기

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]}")
代码解释
  1. 数据加载和预处理:Dataset.from_dict 将对话和对应的标签转换为适合transformers库处理的数据格式。使用DistilBertTokenizer对对话进行Tokenize操作,转换为DistilBERT所需的格式。
  2. 模型训练:我们使用DistilBertForSequenceClassification进行二分类任务,模型会根据对话的文本内容预测其情感标签。Trainer 是Hugging Face提供的高层接口,简化了训练和评估的过程。
  3. 对话分类:定义classify_dialogue函数,用于对新对话进行情感预测。使用torch.no_grad()确保在推理过程中不计算梯度,提升效率。