Skip to content

de_input_ids 和 候选关键词概率计算的问题 #7

@izhuyouqian

Description

@izhuyouqian

1、de_input_ids 的问题

de_input_ids = tokenizer(de_input, max_length=30, padding="max_length", truncation=True, return_tensors="pt")["input_ids"]
de_input_ids[0, 0] = 0
output = model(input_ids=en_input_ids, attention_mask=en_input_mask, decoder_input_ids=de_input_ids)[0]

Q1:model中的参数decoder_input_ids需要手动添加 bos 标志,为什么代码中直接将第一个token替换为bos? 而不是增加一个bos标志?

2、候选关键词概率计算

template_len = tokenizer(temp_de, return_tensors="pt")["input_ids"].shape[1] - 3
for i in range(template_len, de_input_ids.shape[1] - 3):
    logits = output[:, i, :]
    logits = logits.softmax(dim=1)  # 对词表做归一化
    logits = logits.cpu().numpy()
    # 计算 1/lc^a * 生成候选词的概率
    for j in range(de_input_ids.shape[0]):  # batch size
        if i < dic["de_input_len"][j]:
            score[j] = score[j] + np.log(logits[j, int(de_input_ids[j][i + 1])])
        elif i == dic["de_input_len"][j]:
            score[j] = score[j] / np.power(dic["de_input_len"][j] - template_len, length_factor)

Q2:tokenizer的时候会自动添加 eos 标志,但为什么长度要-3,而不是-1?
Q3:进行解码时,第i+1个decoder input id 对应 第i个logit,但 de_input_ids 在tokenizer的时候并没有向右偏移一位,请问decoder_input_ids 和 logits是如何对齐的?
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions