Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
rengar011 opened this issue Oct 23, 2023 · 8 comments
Open

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

rengar011 opened this issue Oct 23, 2023 · 8 comments

Comments

@rengar011
Copy link

rengar011 commented Oct 23, 2023

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是个空列表😵

@taishan1994
Copy link
Owner

打印下加载数据是否正确

@zjutnlper
Copy link

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

@XuperX
Copy link

XuperX commented Feb 11, 2024

你好,我也遇到了相同的问题。
我尝试了以下解决方法但是还是没有头绪
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 个变量。
我不清楚哪里出了问题,希望能得到您的建议。

@32209056
Copy link

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

@XuperX
Copy link

XuperX commented Feb 13, 2024

@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 小于最长字符的话,应该只是丢失了部分数据,而不是跑不出来?

@zjutnlper
Copy link

@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
Copy link

你好,我也遇到了相同的问题。 我尝试了以下解决方法但是还是没有头绪 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中所以报错了,我把有问题的数据改了后就好了

@32209056
Copy link

@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有问题,重新下载一下代码,作者有更新,能跑出来

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants