tensorflow实现seq2seq模型细节(3):inference推理阶段解码方法,beam search 和 greedy以及解决使用beam search出现key error的错误
1.贪婪法
这种策略很简单,输入source后,decoder需要生成target,传入<s>作为序列的开始,生成下一个字符,直接选取概率最大的作为结果,用当前节点的结果作为下一个节点生成的输入,直到生成</s>结束。
2.beam search
参考https://www.zhihu.com/question/54356960/answer/138990060
参数beam width / beam size=n,n<=target_vocab_sie
假设词库为{a,b,c},设置beam size = 2.
生成第一个单词,选择概率最高的为a,c
第二次分别输入a和c,产生aa,ab,ac,ca,cb,cc选择概率最高的2个序列。
这个重复下去,最终产生2个概率最高的序列作为结果。
3.beam search出现的key error错误
在测试模型时我发现选择beam search作为解码方法,会报一个key error错误,Google后有人说需要加一句
from tensorflow.contrib.seq2seq.python.ops import beam_search_ops
确实这个问题加这个导入语句就解决了,但是具体原因我就没追究了