i4never
i4never
It's misleading. I've spend much time checking my source data.
decoder部分由于三角mask的存在、t时刻(包括t)后的token对于t时刻前的计算没有影响(softmax时被-inf mask了,attention score始终为0)、所以只需要输出t时刻生成的token对之前所有生成token的attention就可以、decoder只需要输出“last_token”、append在之前的输出后就足够了、(实际上,decoder应该可以优化成增量的attention计算、缓存之前的结果、每层只要计算dim*1就足够了)
``` m = keras.Model(bert_model.input, bert_model.get_layer('LAYER_NAME').output) m.predict([batch_token_ids, batch_segment_ids]) ```
https://github.com/bojone/bert4keras/blob/93c1b8c78a8efac7843e634ee7d5b3b1ea631f5d/examples/task_sentence_similarity_lcqmc.py#L68 看看with_pool做了什么?
unilm也不是完全不行、只不过seq2seq的decoder self attention由于三角mask可以缓存softmax后的结果、unilm的话应该至少可以缓存qkv的投影,少做几次乘法运算 推销一篇我的[blog](https://i4never.tech/2022/03/21/incremental-decoder/)看看
这是我写的一个top_k、温度参数、重复惩罚、批量解码的beam search、batch_encoder_output的shape是[batch_size, max_seq_len, vocab_size]、可以参考下 ``` def beam_search(self, batch_encoder_out, top_k: int = 1, temperature: float = 1., repetition_penalty: float = 2.) -> Generator: """ 批量beam search解码 参考bert4keras.snippets.AutoRegressiveDecoder Args: batch_encoder_out: top_k: beam_size...
@SunYanCN 没有:)
这个tf/keras有什么关系吗
看上去`d[0]`是输入文本`d[1]`是label、你能确保`d[0]`tokenize、转id后的长度与`d[1]`只差头尾的2个token吗
是根据batch中的max确定的、为啥一定要明确?