Task2 baseline学习记录 Datawhale AI 夏令营

#Datawhale AI 夏令营

参考链接:Docs

本次主要讲一下在运行baseline时需要注意的一些小问题。

一、提前准备:

        本次baseline与Task1使用相同数据集,所以与Task1时一样,需要上传数据集压缩文件并解压。具体方法参考Docs 。

        需要注意的是,由于baseline中的load_data函数等函数在读取或生成文件时需要提前创建该文件路径,否则会报没有找到相关文件的错误。所以在执行baseline前,需要先在终端执行以下命令,在/MT/下生成保存模型用的model文件夹和保存测试集结果用的results文件夹。

mkdir ../model
mkdir ../results

二、配置环境:

本次baseline需要额外安装如下四个库:

  • torchtext :是一个用于自然语言处理(NLP)任务的库,它提供了丰富的功能,包括数据预处理、词汇构建、序列化和批处理等,特别适合于文本分类、情感分析、机器翻译等任务。

  • jieba是一个中文分词库,用于将中文文本切分成有意义的词语。

  • sacrebleu:用于评估机器翻译质量的工具,主要通过计算BLEU(Bilingual Evaluation Understudy)得分来衡量生成文本与参考译文之间的相似度。

  • spacy:是一个强大的自然语言处理库,支持70+语言的分词与训练。

  前三个库安装如下:

!pip install torchtext    
!pip install jieba
!pip install sacrebleu

我们需要注意的是spacy库的安装:

在线安装:不同环境的安装请参考:Install spaCy · spaCy Usage Documentation,如果使用魔搭平台,可按照下图中的配置进行安装:

离线安装:在线安装非常的慢,经常会安装失败,因此我们可以离线安装

首先使用 pip show spacy 命令在终端查看spacy的版本,这里可以看到版本为3.7.5。

然后我们从该路径下:Releases · explosion/spacy-models · GitHub 安装对应版本的 en_core_web_trf 语言包,可以看到我的 en_core_web_trf 3.7.3 版本的要求 spaCy >=3.7.2,<3.8.0,刚好满足 3.7.5的 spacy。将下载到本地的压缩包上传到你的魔搭平台上的 dataset 目录下。

然后使用 !pip install ../dataset/en_core_web_trf安装英文语言包:

!pip install -U pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install -U 'spacy[cuda12x]' -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install ../dataset/en_core_web_trf-3.7.3-py3-none-any.whl

三、模型训练时的参数影响

        在训练模型时,调参也是重中之重。选择参数不当,会使模型造成欠拟合或者过拟合现象,从而影响模型性能。以下是代码中的一些可供调整的部分参数,如果运行baseline性能不是很好,可以尝试调整以下参数:

# 定义常量
MAX_LENGTH = 100  # 最大句子长度
BATCH_SIZE = 32
DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
N = 10000   # 采样训练集的数量

train_path = '../dataset/train.txt'
dev_en_path = '../dataset/dev_en.txt'
dev_zh_path = '../dataset/dev_zh.txt'
test_en_path = '../dataset/test_en.txt'

train_loader, dev_loader, test_loader, en_vocab, zh_vocab = load_data(
    train_path, dev_en_path, dev_zh_path, test_en_path
)


print(f"英语词汇表大小: {len(en_vocab)}")
print(f"中文词汇表大小: {len(zh_vocab)}")
print(f"训练集大小: {len(train_loader.dataset)}")
print(f"开发集大小: {len(dev_loader.dataset)}")
print(f"测试集大小: {len(test_loader.dataset)}")
# 主函数
if __name__ == '__main__':
    
    N_EPOCHS = 5
    CLIP=1
    # 模型参数
    INPUT_DIM = len(en_vocab)
    OUTPUT_DIM = len(zh_vocab)
    EMB_DIM = 128
    HID_DIM = 256
    N_LAYERS = 2
    DROPOUT = 0.5
    
    # 初始化模型
    model = initialize_model(INPUT_DIM, OUTPUT_DIM, EMB_DIM, HID_DIM, N_LAYERS, DROPOUT, DEVICE)
    print(f'The model has {sum(p.numel() for p in model.parameters() if p.requires_grad):,} trainable parameters')

    # 定义损失函数
    criterion = nn.CrossEntropyLoss(ignore_index=zh_vocab['<pad>'])
    # 初始化优化器
    optimizer = initialize_optimizer(model)

    # 训练模型
    train_model(model, train_loader, dev_loader, optimizer, criterion, N_EPOCHS, CLIP)

    通过调整参数,可以提高模型翻译的性能,最大程度地发挥模型性能。

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值