OneRel_chinese icon indicating copy to clipboard operation
OneRel_chinese copied to clipboard

ValueError: not enough values to unpack (expected 7, got 0)

Open rengar011 opened this issue 1 year ago • 8 comments

data_loader.py文件中 token_ids, masks, loss_masks, text_len, triple_matrix, triples, tokens = zip(*batch) ValueError: not enough values to unpack (expected 7, got 0) batch是个空列表😵

rengar011 avatar Oct 23 '23 11:10 rengar011

打印下加载数据是否正确

taishan1994 avatar Oct 26 '23 01:10 taishan1994

我也遇到这样的问题,你解决了吗

zjutnlper avatar Dec 03 '23 14:12 zjutnlper

你好,我也遇到了相同的问题。 我尝试了以下解决方法但是还是没有头绪 1)改变max_len=750 (虽然按照data——loader 不需要改变max——len 2)print out L105 可以打印正常的tensor 但是我的数据可以跑几个epoch 之后才出现expected 7, got 0的error。我怀疑是某段text有问题。所以我单独取出tokenizer,把所有的text,triples 给tokenize 了。没有报错。 但按照data——loader 里的内容,我理解只要能成功tokenize就一定能生成7 个变量。 我不清楚哪里出了问题,希望能得到您的建议。

XuperX avatar Feb 11 '24 16:02 XuperX

你好,我也是跑完五个循环后,eval mode……,就会报上面的错,要改max_len改成多少啊

32209056 avatar Feb 13 '24 07:02 32209056

@32209056 max_len 应该要调到比数据里最长的text大一点。 但是按照data loader里这行

    def __getitem__(self, idx):
        ins_json_data = self.json_data[idx]
        text = ins_json_data['text']
        text = ' '.join(text.split()[:self.config.max_len])
        tokens = self.tokenizer.tokenize(text)

        if len(tokens) > self.config.bert_max_len:
            tokens = tokens[: self.config.bert_max_len]
        text_len = len(tokens)

但我觉得,如果max——len 小于最长字符的话,应该只是丢失了部分数据,而不是跑不出来?

XuperX avatar Feb 13 '24 10:02 XuperX

@32209056 max_len 应该要调到比数据里最长的text大一点。 但是按照data loader里这行

    def __getitem__(self, idx):
        ins_json_data = self.json_data[idx]
        text = ins_json_data['text']
        text = ' '.join(text.split()[:self.config.max_len])
        tokens = self.tokenizer.tokenize(text)

        if len(tokens) > self.config.bert_max_len:
            tokens = tokens[: self.config.bert_max_len]
        text_len = len(tokens)

但我觉得,如果max——len 小于最长字符的话,应该只是丢失了部分数据,而不是跑不出来?

你好,这个问题我觉得是你的数据问题,我一开始也有这个问题,是因为我的数据里gold标签里的实体不在text中所以报错了,我把有问题的数据改了后就好了

zjutnlper avatar Feb 14 '24 09:02 zjutnlper

你好,我也遇到了相同的问题。 我尝试了以下解决方法但是还是没有头绪 1)改变max_len=750 (虽然按照data——loader 不需要改变max——len 2)print out L105 可以打印正常的tensor 但是我的数据可以跑几个epoch 之后才出现expected 7, got 0的error。我怀疑是某段text有问题。所以我单独取出tokenizer,把所有的text,triples 给tokenize 了。没有报错。 但按照data——loader 里的内容,我理解只要能成功tokenize就一定能生成7 个变量。 我不清楚哪里出了问题,希望能得到您的建议。

你好,这个问题我觉得是你的数据问题,我一开始也有这个问题,是因为我的数据里gold标签里的实体不在text中所以报错了,我把有问题的数据改了后就好了

zjutnlper avatar Feb 14 '24 09:02 zjutnlper

@32209056 max_len 应该要调到比数据里最长的text大一点。 但是按照data loader里这行

    def __getitem__(self, idx):
        ins_json_data = self.json_data[idx]
        text = ins_json_data['text']
        text = ' '.join(text.split()[:self.config.max_len])
        tokens = self.tokenizer.tokenize(text)

        if len(tokens) > self.config.bert_max_len:
            tokens = tokens[: self.config.bert_max_len]
        text_len = len(tokens)

但我觉得,如果max——len 小于最长字符的话,应该只是丢失了部分数据,而不是跑不出来?

你好,这个问题我觉得是你的数据问题,我一开始也有这个问题,是因为我的数据里gold标签里的实体不在text中所以报错了,我把有问题的数据改了后就好了

谢谢,确实形成的dev_json有问题,重新下载一下代码,作者有更新,能跑出来

32209056 avatar Feb 19 '24 11:02 32209056