1.安装指定版本tensorflow跑通最基本的seq2seq翻译模型
conda 更新:conda install 版本号
2.学会了attention的实现,使用了attentionMechanism和wrapper包裹cell(忘了具体操作)
学会了beam_search的实现:
先对于encoder的output、state和encoder_inpus_length、batch_size都进行tile_batch,((放在构建decoder_cell之前,因为我的用了attention处理decoder_cell,其中attention需要参数encoder_outputs
之后就是在test阶段使用beam_search,要注意贪心和beam都要有,因为在train阶段是贪心的。
之后不是用training中的GreedyTrainingHelper,而是使用BeamSearchDecoder来训练。
具体传入哪些参数我还不明白,学的不够好,接触新东西接受的很慢,总是抗拒记住它。
3.tf.identity的作用
:之前查过,还是不知道是干嘛的。
4.对于整个训练过程,我还是有些地方不明白,特此记录:
- 计算结果和loss(是我自己没记住)
- self.decoder_logit_train = tf.identity(decoder_ouputs.rnn_output)
- self.decoder_predict_train = tf.argmax(self.decoder_logits_train,axis =-1,name='decoder_pred_train')
- elif self.mode == 'decode‘:
- 使用beam_search
5.明天4号再看一次。
6.BeamSearchDecoder在tf中是怎么实现
- 网上有beamsearch的变式,length_normal(句子不能太短)和coverage penalty(更好的翻译句子?),会不会有帮助呢,没看论文不知道怎么弄的。
- 1step函数的功能:
- 先是调用`cell_outputs, next_cell_state = self._cell(inputs, cell_state)`函数执行RNNCell,得到本时刻的输出和状态
- 接下来会将其shape由[batch_size*beam_szie, vocab_size]转换为[batch_szie, beam_size, vocab_szie]的格式
- 调用_beam_search_step()函数选择输出并产生下一时刻的输入
- 问题:如何标识序列是否已经解码完毕呢,就是加一个finished和length变量,记录每个序列是否编码结束以及最终的长度。
- 4,pytorch的实现版本漂亮多了。
- 5
7.对于predict的时候,如果由模型的输出生成最后的句子结果,一步一步敲代码理解。
8.attention部分。
直接使用了LuongAttention。大概学习了LuongAttention和B-Attention的不同。
前者是乘法attention,后者是加法attention。
对于lstm中decoder的输入情况,暂且不学习。应该和encoder不一样吧?
9.lstm中,
- 输出:概率分布向量,对应词典里每个词的一个概率,
- softmax就是将数字都e一下,然后得到每个所占的比例
- p(y|x) = softmax(Ws*ht),得到的是
- log(softmax(x)),我不清楚我们的函数里有没有用到,可能在backward中取了log,因为有score
- 可能score中用到-log,对,/////loss?
都是干啥的,再次清晰,
10.从昨天看到今天(12.04到12.05跨度好大)
效率不高,不愿意沉下心去看,第一次看别人的完整的代码。下次要改正。要慢慢的///专注的///不着急的///的去看。
- MMI_rerank里有三个文件,其中一个perl看不懂,另外两个,分别是
- tune_bleu,导入生成的N-best,导入p(sourve|target)生成的score中的(t|s)和(s|t),不太明白。
- 和tune_length,在N-best中,直接对于score的(t|s)和(s|t),进行加权,然后找到最好的。对于最好的最基本的函数可以学习一下。
- 本来就是这样的,最开始看的时候总是想不明白,是没有把这一点牢牢的记住;总是抱着一会儿看代码理解的心态,自己没有主动的猜一猜。
- 对于p(sourve|target)生成的score中的(t|s)和(s|t)