Global Encoding for Abstractive Summarization (ACL 2018) 论文代码复现——生成式文本摘要
生成式文本摘要论文复现
-
General-Purpose Embedding Model for Abstractive Text Summarization (ACL 2018)
-
项目的执行步骤:
-
- 第一步. 环境参数设置:
- **服务器端环境参数设置
- 第一步. 环境参数设置:
-
- 数据处理
-
- 模型训练:
-
- 1)缺少项目相关文件
-
- 2)lcsts.yaml参数配置设置
-
- 3)启动训练脚本执行
-
-
4)将模型训练任务设置为后台自动执行
- 4.模型训练结果
- 5.待试验的问题
-
Global Encoding for Abstractive Summarization (ACL 2018)
原论文代码github地址:https://github.com/lancopku/Global-Encoding
这篇论文的模型是使用了生成式文本摘要中经典的带attention的seq2seq模型来作为论文的基线模型,代码结构十分清晰,bug很少,而且使用了中文的文本摘要数据集,因此可以作为生成式摘要的代码学习的一个参考。
该论文的解读:
Global Encoding for Abstractive Summarization论文解读
项目运行流程 :
1.项目环境配置:
Ubuntu 16.0.4
Python 3.5
Pytorch 0.4.1
pyrouge
该代码无法在Windows环境中直接执行...由于该代码包含了针对Linux终端的操作指令
服务器环境配置
安装anaconda以搭建虚拟环境,并设置所需的python环境参数。(更多conda命令自行搜索)
使用conda命令创建一个名为name并配置为Python 3.5版本的新虚拟环境。
列出当前系统中存在的所有已安装并运行中的虚拟环境。
进入名为name并配置为Python 3.5版本的新激活状态。
退出当前激活的状态。
准备好一个独立的Python环境后,在命令行界面中执行命令 source activate py3(假设name为py3)以启动该环境中Python程序,并随后进入PyTorch开发模式。随后进行PyTorch配置
pytorch 0.4.1
pyrouge
注意:还有一些常用的库如Matplotlib等,在运行程序时可能会出现缺少库的情况,请确保您已经安装了所有必要的依赖项。
下载地址推荐清华源,下载速度极快
链接地址如下:
该链接位于Tsinghua University的Tuna mirrors服务器上。
在conda配置文件中添加新的通道,在指定位置输入该URL链接,在Anaconda官方包管理界面完成配置设置
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/?tdsourcetag=s_pctim_aiomsg
打开conda的下载来源显示
conda config --set show_channel_urls yes
请确保根据您的服务器配置选择合适的CUDA版本!
conda install pytorch=0.4.1 cuda100 -c pytorch
安装完成除了pyrouge
2.处理数据
数据集:LCSTS中文数据集
数据集来源于Qingcai Chen、Baotian Hu和Fangze Zhu的研究团队,在他们的论文《LCSTS: A Large Scale Chinese Short Text Summarization Dataset》中首次提出(Chen et al., 2015)。
由哈尔滨工业大学深圳研究生院提供,并作为开放资源发布。
数据大小:

数据处理流程,获取数据集后,数据格式是类似XML的数据:
<doc id=0>
<summary>
林志颖公司疑涉虚假营销无厂房无研发
</summary>
<short_text>
日前,方舟子发文直指林志颖旗下爱碧丽推销假保健品,引起哗然。调查发现,爱碧丽没有自己的生产加工厂。其胶原蛋白饮品无核心研发,全部代工生产。号称有“逆生长”功效的爱碧丽“梦幻奇迹限量组”售价高达1080元,实际成本仅为每瓶4元!
</short_text>
</doc>
生成脚本用于获取上面文件中的摘要和<short_text>短文本,并将它们分配至六个文档
训练源数据 (训练集的输入(短文本))
训练目标摘要 (训练集的输出(摘要))
测试源数据 (测试集的输入(短文本))
测试目标摘要 (测试集的输出(摘要))
验证源数据 (验证集的输入(短文本))
验证目标摘要 (验证集的输出(摘要))
将这6个文件放到一个文件夹中。
接下来的操作涉及使用特定命令来处理相关数据 ... 。建议您在执行上述操作之前进入Global-Encoding-master项目根目录
python3 preprocess.py -load_data path_to_data -save_data path_to_store_data
存储位置:包含指定六个文件的原始数据存储路径
目标存储路径:用于存放处理后数据的目标存储路径
3.训练模型:
这里就标志着整个项目的核心环节的开始,这也是除了配置pyrouge之外最为棘手的环节。
在开始阶段,我们首先要解决以下几个关键问题:
1)项目文件缺失
源代码位于models目录中缺少了loss.py模块,
但目录中包含了一个.pyc文件(如loss.cpython-35.pyc);
我们可以通过反编译这个pyc文件恢复原始的loss.py模块;
具体方法请参考文档中的相关内容或从以下链接获取。

2)lcsts.yaml配置文件设置
仅需修改前两行内容:首先确定数据集存储的位置;即是,在步骤2中处理后的数据所处的目录结构。
data: ‘/home/wu/Global-Encoding-master/data/’
运行日志应该保存在的文件夹
logF: ‘/home/wu/Global-Encoding-master/lcsts/’
选择评价标准
metrics: [‘rouge’]
要使用Bleu则改成
metrics: [‘bleu’]
3)执行训练脚本
-log log_name:指定日志文件夹的位置,并存储相关信息。
-config lcsts.yaml:配置运行时使用的配置文件路径。
-gpus id:指定需要使用的GPU设备编号。
python3 train.py -log log_name -config lcsts.yaml -gpus id
4)将模型的训练置于后台自动运行
使用nohup
nohup python3 train.py -log log0 -config lcsts.yaml > train.log 2>&1 &
日志文件 2>&1 & 被用来收集所有运行时的日志记录。
使用tail命令窗口显示最后五行日志信息(-n选项指定显示多少行),这有助于实时监控脚本的实际运行状态。
4.模型训练结果
在.yaml文件中可配置每隔一定次数(默认为3 个千次)自动生成checkpoint文件;同样可设定每隔一定次数(默认为1万次)进行验证集输出结果的记录。此外,在选定评价指标的基础上也会自动保存最优模型版本。

1.模型文件,.pt文件,可以使用
运行Python 3脚本 train.py,并配置相关参数:
具体来说,
使用[log_name]指定日志文件路径,
设置配置文件为[config_yaml],
指定GPU ID为[id],
恢复检查点,
设置运行模式为[eval].
运行预训练好的模型对文本数据进行生成摘要
预测结果输出后,在后续步骤中采用Rouge程序对生成摘要和参考摘要进行评估,并计算所得的结果与论文中lcsts数据集所对应的Rouge值相近(其数值约为30余)。
5.待试验的问题
中文数据集的处理方式:字&词
在采用分词技术生成的数据序列作为学习素材的情况下,在经过大规模预训练阶段后(如10万条数据量),模型的表现能力仍有待提升。尽管以单词为基本单位构建更大的词汇库可能有助于提升模型的效果(如分类准确性),但这种做法可能会导致学习过程耗时较长。因此,在目前情况下仍无法完全否定基于分词语料的训练效果是否具有显著优势
将数据中的中文字符逐个分隔开后,在经过预训练处理后观察到结果较为理想。随后采用了全部240万的数据样本进行系统性训练,并取得了令人满意的成果。
数据集具有简短和较长两种类型的特征
根据研究结果,在该模型中对英语数据集表现出色。然而,原始论文中的英语数据集并未公开获取,因此目前尚未进行相关实验。
