TensorFlow のモデルで、上記のリンク (Bahdanau et al., 2014 から) の図のような入力の注意の重みを視覚化する方法はありseq2seq
ますか? これに関するTensorFlow の github の問題を見つけましたが、セッション中にアテンション マスクを取得する方法を見つけることができませんでした。
質問する
7568 次
1 に答える
7
また、テキスト要約タスクのために、Tensorflow seq2seq ops のアテンション ウェイトを視覚化したいと考えています。そして、一時的な解決策は、上記のように session.run() を使用してアテンション マスク テンソルを評価することだと思います。興味深いことに、元の seq2seq.py ops はレガシー バージョンと見なされ、github で簡単に見つけることができないため、0.12.0 ホイール ディストリビューションの seq2seq.py ファイルを使用して変更しました。ヒートマップの描画には、非常に便利な「Matplotlib」パッケージを使用しました。
ニュースの見出し textsum に対する注意の視覚化の最終的な出力は、次のようになります。
以下のようにコードを修正しました: https://github.com/rockingdingo/deepnlp/tree/master/deepnlp/textsum#attention-visualization
# Find the attention mask tensor in function attention_decoder()-> attention()
# Add the attention mask tensor to ‘return’ statement of all the function that calls the attention_decoder(),
# all the way up to model_with_buckets() function, which is the final function I use for bucket training.
def attention(query):
"""Put attention masks on hidden using hidden_features and query."""
ds = [] # Results of attention reads will be stored here.
# some code
for a in xrange(num_heads):
with variable_scope.variable_scope("Attention_%d" % a):
# some code
s = math_ops.reduce_sum(v[a] * math_ops.tanh(hidden_features[a] + y),
[2, 3])
# This is the attention mask tensor we want to extract
a = nn_ops.softmax(s)
# some code
# add 'a' to return function
return ds, a
# modified model.step() function and return masks tensor
self.outputs, self.losses, self.attn_masks = seq2seq_attn.model_with_buckets(…)
# use session.run() to evaluate attn masks
attn_out = session.run(self.attn_masks[bucket_id], input_feed)
attn_matrix = ...
# Use the plot_attention function in eval.py to visual the 2D ndarray during prediction.
eval.plot_attention(attn_matrix[0:ty_cut, 0:tx_cut], X_label = X_label, Y_label = Y_label)
そしておそらく将来的には、tensorflow はアテンション ウェイト マップを抽出して視覚化するためのより良い方法を持つでしょう。何かご意見は?
于 2017-01-19T03:06:45.583 に答える