集智データセット

元曲データセット

閲覧 492ダウンロード 9サイズ: 0.43形式: TXT2024/09/07

概要

       该数据集收集了大量的元曲作品,涵盖了元代戏曲和散曲等多种形式。元曲是中国古代文学的重要组成部分,以其独特的艺术风格和深刻的社会意义著称。数据集以纯文本(txt)格式存储,旨在为文学爱好者、研究者以及自然语言处理领域的技术人员提供一个丰富且高质量的资源库。

       数据集特点:

      • 文学形式:元曲(包括戏曲和散曲)
      • 数据规模:几万首
      • 文本格式:纯文本(txt)
      • 内容涵盖:元代经典作品
      • 应用场景:文学研究、文本生成、自然语言处理、机器学习模型训练、自动诗词生成等

       通过本数据集,用户可以深入探索元曲的艺术魅力和技术特性,无论是用于文学分析还是开发自动文本生成系统,都能从中获得宝贵的资源。

プレビュー

半世为人,不曾教大人心困虽是搽胭粉,只争不裹头巾,将那等不。#男儿人若不依本分,一个抢白是非两家分壮鼻凹硬如石铁,教满耳。#等不得水温,一声要面盆;恰递与面盆,一声要手巾;却执与手巾。#入得房门,怎回身?厅独卧房儿窄窄别别,有甚铺呈?燕燕己身有。#卧地观经史,坐地对圣人你观的国风、雅、颂施诂训,诵的典谟训。#这书房存得阿马,会得客宾翠筠月朗龙蛇印,碧轩夜冷灯香信,绿。#更做道一家生女,百家求问才说贞烈,那里取一个时辰?见他语言。#无男儿只一身,担寂寞受孤闷;有男儿呓梦入劳魂,心肠百处分知。#自勘婚,自说亲,也是"贱媳妇责媒人"往常我冰清玉洁难亲近,。#怕不依随蒙君一夜恩,争奈忒达地、忒知根,兼上亲上成亲好对门。#教人道"眼里无珍一世贫";成就了又怕辜恩若往常烈焰飞腾情性。#一个个背槽抛粪,一个个负义忘恩,自来鱼雁无音信自思忖,不审。#忽地却掀帘,兜地回头问,不由我心儿里便亲你把那并枕睡的日头。#年例寒食,邻姬每斗来邀会,去年时没人将我拘管收拾打秋千,闲。#因甚把玉粳米牙儿抵,金莲花攒枕倚?或嗔或喜脸儿多?哎!你、。#莫不是郊外去逢着甚邪祟?又不疯又不呆痴,面没罗、呆答孩、死。#见我这般......

サンプルコード (Python ローダ)

       使用GPT-2进行训练和生成

       为了使用GPT-2模型处理元曲数据集并生成新的元曲作品,我们需要先准备好数据,并对其进行适当的预处理,以便能够输入到GPT-2模型中。

       数据准备

       假设您的数据集是一个纯文本文件,每一行包含一段完整的元曲作品。我们将读取这些数据,并使用GPT-2的tokenizer进行预处理。

import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel
from torch.utils.data import Dataset, DataLoader

# 读取数据
def read_yuanqu(file_path):
    yuanqu = []
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            yuanqu.append(line.strip())
    return yuanqu

file_path = 'path_to_your_yuanqu.txt'  # 替换为你的文件路径
yuanqu = read_yuanqu(file_path)

# 初始化GPT-2的tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# 自定义数据集类
class YuanQuDataset(Dataset):
    def __init__(self, yuanqu, tokenizer, max_len):
        self.yuanqu = yuanqu
        self.tokenizer = tokenizer
        self.max_len = max_len

    def __len__(self):
        return len(self.yuanqu)

    def __getitem__(self, item):
        text = str(self.yuanqu[item])
        encoding = self.tokenizer.encode_plus(
            text,
            add_special_tokens=True,
            max_length=self.max_len,
            return_token_type_ids=False,
            padding='max_length',
            truncation=True,
            return_attention_mask=True,
            return_tensors='pt',
        )
        return {
            'input_ids': encoding['input_ids'].flatten(),
            'attention_mask': encoding['attention_mask'].flatten(),
        }

# 设置最大长度
max_len = 128  # GPT-2的最大输入长度
dataset = YuanQuDataset(yuanqu, tokenizer, max_len)

# 创建数据加载器
batch_size = 32
dataloader = DataLoader(dataset, batch_size=batch_size)

       模型训练

       接下来,我们将使用GPT-2模型来训练数据集,并生成新的元曲作品。

# 初始化GPT-2模型
model = GPT2LMHeadModel.from_pretrained('gpt2')

# 将模型转移到GPU上(如果有)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)

# 设置优化器
optimizer = torch.optim.Adam(model.parameters(), lr=2e-5)

# 定义损失函数
criterion = torch.nn.CrossEntropyLoss(ignore_index=tokenizer.pad_token_id)

# 训练模型
num_epochs = 5
for epoch in range(num_epochs):
    model.train()
    total_loss = 0
    for batch in dataloader:
        input_ids = batch['input_ids'].to(device)
        attention_mask = batch['attention_mask'].to(device)

        # 获取输出
        outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=input_ids)
        loss = outputs.loss
        total_loss += loss.item()

        # 反向传播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    avg_train_loss = total_loss / len(dataloader)
    print(f'Epoch [{epoch+1}/{num_epochs}], Average Training Loss: {avg_train_loss:.4f}')

       生成新的元曲

       一旦模型训练完成,我们可以使用它来生成新的元曲作品。

# 生成新的元曲
def generate_yuanqu(model, tokenizer, device, prompt=""):
    model.eval()
    input_ids = tokenizer.encode(prompt, return_tensors='pt').to(device)
    sample_output = model.generate(
        input_ids,
        do_sample=True,
        max_length=100,
        top_k=50,
        top_p=0.95,
        temperature=0.7,
    )
    generated_text = tokenizer.decode(sample_output[0], skip_special_tokens=True)
    return generated_text

prompt = "【仙吕】赏花时"  # 输入提示词
generated_yuanqu = generate_yuanqu(model, tokenizer, device, prompt)
print("Generated Yuanqu:")
print(generated_yuanqu)

       这段代码展示了如何使用GPT-2模型来处理元曲数据集,并生成新的元曲作品。请注意,实际应用中可能需要根据具体数据情况进行调整,例如调整隐藏层大小、学习率等超参数。此外,这里使用了交叉熵损失(CrossEntropyLoss)作为损失函数,适合语言模型的训练任务。