FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

reranker的512token计算问题,确认一下

Open mechigonft opened this issue 1 year ago • 4 comments

请问一下,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作为过滤的阈值了

mechigonft avatar Jan 19 '24 06:01 mechigonft

为什么问这个问题,因为我按照上述的逻辑过滤了一次我自己的训练数据后,然后开始训练,仍然会弹出少量的警告信息: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的情况了 少量

mechigonft avatar Jan 19 '24 06:01 mechigonft

可以这样计算长度:

item = tokenizer.encode_plus(
            query,
            pos,
            truncation=True
        )
l = len(item['input_ids'])

不过,我理解你这样计算长度是没有问题的,出现这种情况应该是没有过滤neg,query+neg超过了512。

staoxiao avatar Jan 19 '24 09:01 staoxiao

不是的哦,我对query+pos和query+neg都分别计算了

mechigonft avatar Jan 19 '24 09:01 mechigonft

不是的哦,我对query+pos和query+neg都分别计算了

抱歉,理解错了,你这样算会少一些token,程序会在两个文本之间加入一个sep 特殊token。

staoxiao avatar Jan 19 '24 10:01 staoxiao