Esta filial usa as novas APIs TF.Contrib.Seq2SEQ no Tensorflow R1.1. Para usuários R1.0, verifique a filial TF1.0
Esta é uma implementação do modelo de sequência em sequência usando um codificador GRU bidirecional e um decodificador GRU. Este projeto tem como objetivo ajudar as pessoas a começar a trabalhar em resumo abstrato de texto curto imediatamente. E, esperançosamente, também pode funcionar nas tarefas de tradução da máquina.
Por favor, verifique Harvardnlp/Sent-Summary.
Download
Se você deseja treinar o modelo e ter GPUs NVIDIA (como GTX 1080, GTX Titan, etc.), configure o ambiente CUDA e instale o Tensorflow-GPU.
> pip3 install -U tensorflow-gpu==1.1
Você pode verificar se a GPU funciona
> python3
>>> import tensorflow
>>>
e verifique se não há saídas de erro.
Se você não possui uma GPU, ainda pode usar os modelos pré -tenhados e gerar resumos usando sua CPU.
> pip3 install -U tensorflow==1.1
Os arquivos devem ser organizados assim.

Encontre esses arquivos no Harvardnlp/Sent-Summary e renomeie-os como
duc2003/input.txt -> test.duc2003.txt
duc2004/input.txt -> test.duc2004.txt
Giga/input.txt -> test.giga.txt
> python3 script/train.py pode reproduzir os experimentos mostrados abaixo.
Ao fazer isso, treinará primeiro lotes de 200k. Em seguida, faça a geração em [giga, duc2003, duc2004] com Beam_size em [1, 10] respectivamente, a cada 20k lotes. Terá terminado em lotes de 300 mil. Além disso, o modelo será salvo a cada 20k lotes.

> python3 script/test.py usará automaticamente o modelo mais atualizado para fazer geração.

Para fazer o teste personalizado, coloque dados de entrada como
data/test.your_test_name.txt
Alterar script/test.py Linha 13-14 de
datasets = ["giga", "duc2003", "duc2004"]
geneos = [True, False, False]
para
datasets = ["your_test_name"]
geneos = [True]
Para usuários avançados, python3 src/summarization.py -h pode imprimir ajuda. Verifique o código para obter detalhes.
No Tensorflow R0.11 e anterior, o uso de baldes é recomendado. O R1.0 fornece a estrutura dinâmica do RNN SEQ2SEQ, que é muito mais fácil de entender do que o mecanismo complicado de baldes.
Usamos o RNN dinâmico para gerar gráfico de computação. Existe apenas um gráfico de computação em nossa implementação. No entanto, ainda dividimos o conjunto de dados em vários baldes e usamos dados do mesmo balde para criar um lote. Ao fazer isso, podemos adicionar menos preenchimento, levando a uma melhor eficiência.
O mecanismo de atenção segue Bahdanau et. al.
Seguimos a implementação em tf.contrib.seq2seq. Refinamos a função SoftMax na atenção para que os padrões sempre fiquem 0.
Para simplificar e flexibilidade, implementamos o algoritmo de pesquisa de feixe em Python enquanto deixamos a parte da rede no TensorFlow. Nos testes, consideramos batch_size como feam_size. O gráfico do tensorflow gerará apenas 1 palavra, então algum código Python criará um novo lote de acordo com o resultado. Ao fazer isso iterativamente, o resultado da pesquisa de feixe é gerado.
Verifique step_beam(...) em bigru_model.py para obter detalhes.
Treinamos o modelo para 300 mil lotes com tamanho de lotes 80. Nós prendemos todos os resumos para 75 bytes. Para conjuntos de dados DUC, eliminamos o EOS e geramos 12 palavras. Para o conjunto de dados GIGA, deixamos o modelo gerar EOS.

| Conjunto de dados | Tamanho do feixe | 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 |
| Giga | 1 | 0,3185 | 0,38779 | 0,3391 | 0,14542 | 0,17537 | 0,15393 | 0,29925 | 0,363 | 0,3181 |
| Giga | 10 | 0,30179 | 0,41224 | 0,33635 | 0,14378 | 0.1951 | 0.15936 | 0,28447 | 0,38733 | 0,31664 |