Jizhi Datasets

Seven-Character Regulated Verse Dataset (Qiyan Lüshi)

views 564downloads 19Size: 1.48Format: TXT09/07/2024

Overview

       该数据集收集了几万条七言律诗,每一首诗都遵循七言律诗的规范,即每句七个汉字,并且符合平仄对仗和押韵规则。数据集以纯文本(txt)格式存储,旨在为诗词爱好者、文学研究者以及自然语言处理领域的技术人员提供一个丰富且高质量的资源库。

       数据集特点:

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

       通过本数据集,用户不仅可以深入了解七言律诗的艺术魅力,还可以利用这些数据进行各种技术研究,如自然语言处理、文本生成模型的训练等。无论是文学爱好者还是技术开发者,都可以从中获得灵感和支持。

Preview

半生长以客为家#罢直初来瀚海槎#始信人间行不尽#天涯更复有天涯#南州未识异州苹#初向沙头问水神#料得行藏无用卜#乘桴人是北来人#商船夜说指江西#欲托音书未忍题#收拾乡心都在纸#两声杜宇傍人啼#自出琼州古郭门#更无平衍似中原#重重叶暗桄桹雨#知是黎人第几村#恐倾南海成秋雨#急唤西风作晚凉#净扫黎山须见骨#莫令楚客屡回肠#秋入黎山风雨多#长江不定驻惊波#翠榕叶底闻鹦鹉#自此无如客思何#岛上晴云灭复生#谁家吹笛海天明#县堂晓起西风急#半是深黎夜雨声#承恩千里出江乡#转历三关道路长#黄叶雾开山市集#见人凫雁忆横塘#童子出舂亲掩关#春来芳树伴人闲#别家五月不得信#独上西楼思远山#危楼向暮倚层空#故岁今年不得同#记取合沙元夕节#满街箫鼓雨兼风#双门此夜启崇台#次第东山好月来#自古金吾元不禁#少留大将与衔杯#故人天阙腾新荐#舍弟云溪守敝庐#未省东归何日见#挑灯细读寄来书#繁桃只称倚红扉#腊酒吹香着舞衣#楼底谁家吹玉笛#一双白鹭上云飞#更声随雨动谯门#颇似听泉宿楚原#客里青灯如骨肉#独能相待向黄昏#海上经年思杀人#绝怜京国旧交亲#过江唯有传柑使#寄得书回是暮春#清池斜步竹烟微#莺啭重门锁夕晖#退食幸堪......

Sample code (Python loader)

       为了使用BERT模型来处理七言律诗数据集,我们需要先准备好数据,并对其进行适当的预处理,以便能够输入到BERT模型中。BERT模型主要用于自然语言处理任务,因此我们需要将七言律诗转化为BERT能够理解的格式。

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

pip install transformers torch

       以下是使用PyTorch和Hugging Face的Transformers库构建一个简单的BERT模型来处理七言律诗数据集的基础代码:

       数据准备

       假设您的数据集是一个纯文本文件,每一行包含一首完整的七言律诗。我们将读取这些数据,并使用BERT的tokenizer进行预处理。

import torch
from transformers import BertTokenizer, BertForSequenceClassification
from torch.utils.data import Dataset, DataLoader

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

file_path = 'path_to_your_poems.txt'  # 替换为你的文件路径
poems = read_poems(file_path)

# 初始化BERT的tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

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

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

    def __getitem__(self, item):
        poem = str(self.poems[item])
        encoding = self.tokenizer.encode_plus(
            poem,
            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 {
            'poem_text': poem,
            'input_ids': encoding['input_ids'].flatten(),
            'attention_mask': encoding['attention_mask'].flatten(),
        }

# 设置最大长度
max_len = 128  # BERT的最大输入长度
dataset = PoemDataset(poems, tokenizer, max_len)

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

       模型训练

       这里我们假设我们的任务是分类任务,比如根据七言律诗的内容来判断其主题或情感。我们将使用BERT的预训练模型来进行微调。

from transformers import AdamW, get_linear_schedule_with_warmup

# 初始化BERT模型
model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=2)  # 假设二分类任务

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

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

# 设置总训练步数
total_steps = len(dataloader) * 5  # 假设训练5个epoch
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=0, num_training_steps=total_steps)

# 定义损失函数
criterion = nn.CrossEntropyLoss().to(device)

# 训练模型
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)
        labels = batch['label'].to(device)  # 假设标签已经存在于batch中

        optimizer.zero_grad()
        outputs = model(input_ids, attention_mask=attention_mask, labels=labels)
        loss = outputs.loss
        total_loss += loss.item()
        loss.backward()
        optimizer.step()
        scheduler.step()

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

       注意事项

      • 上述代码示例假设你有一个标签列label,你需要根据实际情况调整数据读取和标签设置部分。
      • 请确保你的文本文件每行只包含一首完整的七言律诗,并且没有额外的符号或空白行。
      • 在实际应用中,你可能需要对数据进行更详细的预处理,例如去除标点符号、停用词过滤等。
      • 你可以根据具体任务的需求调整模型结构、超参数和训练细节。