Keras:文本摘要的注意机制

时间:2018-06-17 03:43:20

标签: python-3.x keras-2

我试图实现<?php namespace Vendor\Extension\Domain\Model; class FeUser extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser { /** * @var string */ $myNewField = ''; /* in Database: `my_new_field` */ // optional some more code ... /** * Sets the myNewField value * * @param string $myNewField * @api */ public function setMyNewField ($myNewField ) { $this->myNewField = $myNewField; } /** * Returns the myNewField value * * @return string * @api */ public function getMyNewField () { return $this->myNewField; } } 机制,以便使用AttentionGitHub线程中获取大量帮助来使用Keras生成抽象文本摘要。关于实施的信息性讨论。我很难理解代码的某些非常基本的部分,以及我需要修改哪些才能成功获得输出。我知道attention是通过所有先前时间戳的所有隐藏状态生成的上下文向量的加权和,这是我们在下面尝试做的。

数据:

我得到了BBC新闻数据集,包括新闻文本和各种类别的头条新闻,如政治,娱乐和体育。

参数:

n_embeddings = 64
vocab_size = len(voabulary)+1
max_len = 200
rnn_size = 64

代码:

_input = Input(shape=(max_len,), dtype='int32')

embedding = Embedding(input_dim=vocab_size, output_dim=n_embeddings, input_length=max_len)(_input)
activations = LSTM(rnn_size, return_sequences=True)(embedding)

# compute importance for each step
attention = Dense(1, activation='tanh')(activations) 
attention = Flatten()(attention)
attention = Activation('softmax')(attention)
attention = RepeatVector(units)(attention)
attention = Permute([2, 1])(attention)

# apply the attention
sent_representation = merge([activations, attention], mode='mul')
sent_representation = Lambda(lambda xin: K.sum(xin, axis=1))(sent_representation)

probabilities = Dense(max_len, activation='softmax')(sent_representation)

model = Model(input=_input, output=probabilities)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[])
print(model.summary())

我的问题:

  • 链接的线程正在尝试使用Attention进行分类,而我想生成文本序列(摘要),那么我应该如何利用sent_probabilites和解码来生成摘要?
  • 这里使用的RepeatVector是什么?是否可以在时间戳activation获取每个单词的T和注意概率?
  • 我对Permute图层的作用没有多少解释?
  • 什么是Lambda(lambda xin: K.sum(xin, axis=1))(sent_representation)
  • model.fit()怎么样?我创建了固定长度为Xy的填充序列。

我非常感谢您提供的任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:0)

我发现大多数研究倾向于将张量流用于此任务,因为使用张量流比使用keras模型更容易实现seq2seq模型

blog详细介绍了如何以一种非常优化的方式构建文本摘要器,它解释了一种dongjun-Lee,这是最容易实现的高效实现方式

Code可以在此处找到,可以在Google colab上实现

如果您喜欢这个主意,则可以检查所有blog series

希望这会有所帮助