reranker的512token计算问题,确认一下
请问一下,reranker微调时,512长度的token的计算是将query和pos/neg直接相连接(add)然后计算的吗?代码层面有没有再添加一些过渡性的链接两者的短语/句子?
我的过滤训练数据的计算逻辑: from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('reranker路径')
def get_token_count(query): return len(tokenizer(query)['input_ids'])
query = 'xxx' pos = 'xxx' if get_token_count(query + pos) > 512: continue
我这边逻辑写的比较死,就是512,没有留缓冲,不知道代码里面有没有加默认的过渡性的链接两者的短语/句子?如果有的话,我就不能用512作为过滤的阈值了
为什么问这个问题,因为我按照上述的逻辑过滤了一次我自己的训练数据后,然后开始训练,仍然会弹出少量的警告信息:Be aware, overflowing tokens are not returned for the setting you have chosen, i.e. sequence pairs with the 'longest_first' truncation strategy. So the returned list will always be empty even if some tokens have been removed.
这个警告信息应该是训练数据超出512被截断了
理论来说,如果是query+pos/neg直接拼接,然后计算token的话,应该不会出现token>512的情况了
可以这样计算长度:
item = tokenizer.encode_plus(
query,
pos,
truncation=True
)
l = len(item['input_ids'])
不过,我理解你这样计算长度是没有问题的,出现这种情况应该是没有过滤neg,query+neg超过了512。
不是的哦,我对query+pos和query+neg都分别计算了
不是的哦,我对query+pos和query+neg都分别计算了
抱歉,理解错了,你这样算会少一些token,程序会在两个文本之间加入一个sep 特殊token。