集智数据集

宋词数据集

浏览 663下载 31数据大小: 1.25文件格式: TXT2024/09/07

数据集简介

       该数据集收集了大量宋词,每一首词都遵循宋词的规范,即按照不同的词牌名(如《浣溪沙》、《菩萨蛮》等)编写,每首词通常由若干句组成,每句的字数固定,并且讲究音律和谐。数据集以纯文本(txt)格式存储,旨在为诗词爱好者、文学研究者以及自然语言处理领域的技术人员提供一个丰富且高质量的资源库。

       数据集特点:

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

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

数据预览

气和玉烛,睿化著鸿明缇管一阳生郊禋盛礼燔柴毕,旋轸凤凰城森罗仪卫振华缨载路溢欢。#严夜警,铜莲漏迟迟清禁肃,森陛戟,羽卫俨皇闱角声励,钲鼓攸宜金管成雅奏,逐吹逶。#承宝运,驯致隆平鸿庆被寰瀛时清俗阜,治定功成遐迩咏由庚严郊祀,文物声明会天正、。#雨恨云愁,江南依旧称佳丽水村渔市一缕孤烟细天际征鸿,遥认行如缀平生事此时凝睇谁。#春早柳丝无力,低拂清门道暖日笼啼鸟初坼桃花小遥望碧天净如扫曳一缕、轻烟缥缈堪惜。#春色将阑,莺声渐老红英落尽青梅小画堂人静雨濛濛,屏山半掩馀香袅密约沈沈,离情杳。#塞草烟光阔渭水波声咽春朝雨霁轻尘歇征鞍发指青青杨柳,又是轻攀折动黯然、知有后会。#水陌轻寒,社公雨足东风慢定巢新燕湿雨穿花转象尺熏炉,拂晓停针线愁蛾浅飞红零乱侧。#城上风光莺语乱城下烟波春拍岸绿杨芳草几时休,泪眼愁肠先已断情怀渐变成衰晚鸾鉴朱。#锦箨参差朱槛曲露濯文犀和粉绿未容浓翠伴桃红,已许纤枝留凤宿嫩似春荑明似玉一寸芳。#二社良辰,千家庭院翩翩又见新来燕凤凰巢稳许为邻,潇湘烟暝来何晚乱入红楼,低飞绿。#长忆钱塘,不是人寰是天上万家掩映翠微间处处水潺潺异花四季当窗放出入分明在屏障别。#长忆钱塘,临水傍......

示例代码(Python 加载)

       我们可以使用GPT(Generative Pre-trained Transformer)模型来处理宋词数据集。GPT是一种基于Transformer架构的语言模型,适用于生成任务。下面是一个使用GPT-2模型来处理宋词数据集的基础代码示例,用于生成新的宋词。

       首先,确保安装了必要的库:

pip install transformers torch

       以下是使用PyTorch和Hugging Face的Transformers库构建一个简单的GPT-2模型来处理宋词数据集的基础代码:

       数据准备

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

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

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

file_path = 'path_to_your_songs.txt'  # 替换为你的文件路径
songs = read_songs(file_path)

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

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

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

    def __getitem__(self, item):
        song = str(self.songs[item])
        encoding = self.tokenizer.encode_plus(
            song,
            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 = SongDataset(songs, 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_song(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_song = generate_song(model, tokenizer, device, prompt)
print("Generated Song:")
print(generated_song)

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