UniLM v1实现中文文本摘要

本文不探讨原理知识,这方面可以自行看论文。本文旨在运用开源UniLM实现中文文本摘要。这里要感谢开源者:知乎详解

0. 准备工作

  • UniLM开源地址:UniLM中文模型
  • 环境:python3.6、pytorch、win/linux
    步骤:
  1. git clone上面的github项目,将目录改名为UNILM,然后新建data文件夹
  2. 下载torch模型:百度网盘,密码etwf。下载后文件夹重命名为“model”,然后把内容拖入UNILM/data/文件夹
  3. 下载微调数据集:百度云盘,密码htmh。下载后重命名为“weibo”,然后把weibo文件夹拖入UNILM/data/文件夹。如何用自己数据集进行fine-tuning会在后面讲
  4. 在data下新建文件夹:UNILM/data/output_dir
  5. pip install transformers==2.5.1,其他版本的transformers会报错
    最终结构如下图:
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

1. 实现文本摘要

1.1 fine-tuning

所谓微调,就是在已有模型上,利用自己的数据集继续训练,以更偏向自己的数据集。这里开源的“pytorch_model.bin”已经能直接用了,如果想直接拿来用,可以跳过这一步,进入下一步

这里用的是weibo的数据集进行微调,打开"weibo/train_data.json"可以发现,其每一行类似于:

{'src_text':'正文部分','tgt_text':'摘要部分'}

因此,如果我们想用自己的数据集进行微调,也需要将自己的数据集处理成这个形式而且还不用自己分词分句(貌似开源代码里已经处理好了,有空读源码了再来记录)。

我们可以在UNILM目录下运行powershell或者git-bash,执行命令,且说明如下:

python -u run_seq2seq.py --data_dir ./data/weibo/ --src_file train_data.json --model_type unilm --model_name_or_path ./data/model/ --output_dir ./data/output_dir/ --max_seq_length 512 --max_position_embeddings 512 --do_train --do_lower_case --train_batch_size 2 --learning_rate 1e-5 --num_train_epochs 3
  1. github上是后台运行,但我想实时调试,所以去掉的nohup相关部分
  2. 由于我是windows平台,因此每个地址前面都要加上.标识当前目录,否则无法识别地址。
  3. data_dir:微调数据集存放地址
  4. src_file:训练文件
  5. model_name_or_path:model地址。我们想拿pytorch_model.bin继续训练,就把地址指向该模型所在文件夹。
  6. output_dir:微调后训练出的新model的存放文件夹
  7. train_batch_size:如果出现CUDA内存不足,就修改它吧。我的辣鸡6g显存只能运行batchsize=2,github上可是32…人都麻了。
  8. num_train_epochs:你想继续训练几轮。默认继续3轮差不多了。

1.2 文本摘要

上面微调结束后,会生成"model.3.bin"的model文件,我们就是要用它了。如果你跳过了微调阶段,那就直接拿"pytorch_model.bin"就行,注意下面参数里修改一下模型所在的文件地址就可。

  1. 首先在"weibo"文件夹下新建空白"predict.json"文件,否则最后输出时候会因为找不到文件报错。
  2. 运行如下命令:
python -u decode_seq2seq.py --model_type unilm --model_name_or_path ./data/model/ --model_recover_path ./data/output_dir/model.3.bin --max_seq_length 512 --input_file ./data/weibo/test_data.json --output_file ./data/weibo/predict.json --do_lower_case --batch_size 8 --beam_size 5 --max_tgt_length 128

然后打开predict.json就可以发现,准确性蛮高的。请添加图片描述

请添加图片描述

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
好的,DQN算法是一种比较经典的深度强化学习算法。Pendulum-v1是一个经典的强化学习环境,其中智能体需要控制一个单摆来保持竖直。下面是DQN算法在Pendulum-v1环境中的实现步骤: 1. 确定状态空间、动作空间和奖励函数:在Pendulum-v1环境中,状态空间为一个三维向量,包括单摆的角度、角速度和角加速度。动作空间为一个连续的动作,即施加的扭矩大小。奖励函数为当前状态下的负平方误差。 2. 构建深度神经网络:使用深度神经网络作为Q函数的估计器。神经网络的输入是当前状态,输出是每个动作的Q值。 3. 初始化经验回放缓存:使用经验回放机制来平衡数据的相关性和效率。将所有的经验数据存储在一个缓存池中,每次训练时从中随机采样一批数据进行训练。 4. 进行训练:在每个时间步中,智能体根据当前状态选择一个动作,使用选择的动作与环境进行交互,得到下一个状态和奖励,将这些经验加入经验回放缓存中。然后从经验回放缓存中随机采样一批数据进行训练,并更新深度神经网络的参数。 5. 执行策略:在每个时间步中,根据当前状态和深度神经网络的参数计算出每个动作的Q值,选择具有最大Q值的动作执行。 6. 调整超参数:根据实验效果调整超参数,如神经网络的结构、学习率、折扣因子等。 以上就是DQN算法在Pendulum-v1环境中的实现步骤,需要注意的是,由于动作空间是连续的,所以需要采用一些技巧来处理。比如可以使用深度确定性策略梯度(DDPG)算法来解决连续动作空间的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值