-
Notifications
You must be signed in to change notification settings - Fork 5
de_input_ids 和 候选关键词概率计算的问题 #7
Copy link
Copy link
Open
Description
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是如何对齐的?

Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels