该分支在Tensorflow R1.1中使用新的TF.Contrib.Seq2Seq API。对于R1.0用户,请查看分支TF1.0
这是使用双向GRU编码器和GRU解码器的序列到序列模型的实现。该项目旨在帮助人们立即开始进行抽象短文摘要。希望它也可以在机器翻译任务上使用。
请检查Harvardnlp/Send-Summary。
下载
如果您想训练模型并具有NVIDIA GPU(例如GTX 1080,GTX Titan等),请设置CUDA环境并安装TensorFlow-GPU。
> pip3 install -U tensorflow-gpu==1.1
您可以检查GPU是否工作
> python3
>>> import tensorflow
>>>
并确保没有错误输出。
如果您没有GPU,则仍然可以使用验证的型号并使用CPU生成摘要。
> pip3 install -U tensorflow==1.1
文件应像这样组织。

请在Harvardnlp/send-summary中找到这些文件,并将其重命名为
duc2003/input.txt -> test.duc2003.txt
duc2004/input.txt -> test.duc2004.txt
Giga/input.txt -> test.giga.txt
> python3 script/train.py可以重现下面所示的实验。
通过这样做,它将首先训练200k批次。然后在[giga, duc2003, duc2004]上分别在[1, 10]中发电,每20k批次。它将以300k批次终止。此外,该模型每20k批次都会保存。

> python3 script/test.py将自动使用最新的模型进行生成。

要进行自定义测试,请将输入数据作为
data/test.your_test_name.txt
更改script/test.py行13-14
datasets = ["giga", "duc2003", "duc2004"]
geneos = [True, False, False]
到
datasets = ["your_test_name"]
geneos = [True]
对于高级用户, python3 src/summarization.py -h可以打印帮助。请检查代码以获取详细信息。
在TensorFlow R0.11及以前,建议使用铲斗。 R1.0提供了动态的RNN SEQ2SEQ框架,该框架比棘手的铲斗机制要容易得多。
我们使用动态RNN生成计算图。我们的实施中只有一个计算图。但是,我们仍然将数据集分成几个存储桶中,并使用同一存储桶中的数据来创建批处理。通过这样做,我们可以添加更少的填充物,从而提高效率。
注意机制遵循Bahdanau等。 al。
我们遵循tf.contrib.seq2seq中的实现。我们在注意力中完善了软磁性功能,以使桨板始终获得0。
为了简单性和灵活性,我们在将网络部分留在Tensorflow中时,在Python中实现了Beam搜索算法。在测试中,我们将batch_size视为beam_size。 TensorFlow图将仅生成1个字,那么一些Python代码将根据结果创建新批次。通过迭代地这样做,生成了光束搜索结果。
在bigru_model.py中检查step_beam(...)以获取详细信息。
我们训练该型号的300K批次,批次尺寸为80。我们将所有摘要夹夹为75个字节。对于DUC数据集,我们消除了EOS并生成12个字。对于GIGA数据集,我们让模型生成EOS。

| 数据集 | 梁尺寸 | R1-R | R1-P | R1-F | R2-R | R2-P | R2-F | RL-R | RL-P | RL-F |
|---|---|---|---|---|---|---|---|---|---|---|
| DUC2003 | 1 | 0.25758 | 0.23003 | 0.24235 | 0.07511 | 0.06611 | 0.07009 | 0.22608 | 0.20174 | 0.21262 |
| DUC2003 | 10 | 0.27312 | 0.23864 | 0.25416 | 0.08977 | 0.07732 | 0.08286 | 0.24129 | 0.21074 | 0.22449 |
| DUC2004 | 1 | 0.27584 | 0.25971 | 0.26673 | 0.08328 | 0.07832 | 0.08046 | 0.24253 | 0.22853 | 0.23461 |
| DUC2004 | 10 | 0.28024 | 0.25987 | 0.26889 | 0.09377 | 0.08631 | 0.08959 | 0.24849 | 0.23048 | 0.23844 |
| 千兆 | 1 | 0.3185 | 0.38779 | 0.3391 | 0.14542 | 0.17537 | 0.15393 | 0.29925 | 0.363 | 0.3181 |
| 千兆 | 10 | 0.30179 | 0.41224 | 0.33635 | 0.14378 | 0.1951 | 0.15936 | 0.28447 | 0.38733 | 0.31664 |