NLPJCL / RAG-Retrieval

Unify Efficient Fine-tuning of RAG Retrieval, including Embedding, ColBERT, ReRanker.
MIT License
529 stars 49 forks source link

请问自己的数据集怎么构建? #2

Closed Suiji12 closed 7 months ago

NLPJCL commented 8 months ago

请问你是用在什么场景呢?搜索还是计算语义相似度?

---原始邮件--- 发件人: @.> 发送时间: 2024年3月29日(周五) 晚上9:16 收件人: @.>; 抄送: @.***>; 主题: [NLPJCL/RAG-Retrieval] 请问自己的数据集怎么构建? (Issue #2)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

Suiji12 commented 8 months ago

您好,我是想做一个垂直领域的embedding模型,微调之后 利用这个embedding模型结合大模型再进行回答问题的,

Suiji12 commented 8 months ago

还有就是,在运行train_embedding.py的时候报错: File "E:\jjx\RAG-Retrieval\rag-retrieval\embedding\train_embedding.py", line 179, in main() File "E:\jjx\RAG-Retrieval\rag-retrieval\embedding\train_embedding.py", line 166, in main trainer.train() File "E:\jjx\RAG-Retrieval\rag-retrieval\embedding\trainer.py", line 60, in train for batch_index, batch in enumerate(self.train_dataloader): File "C:\Users\jiaojiaxing.conda\envs\pinggu\lib\site-packages\accelerate\data_loader.py", line 452, in iter current_batch = next(dataloader_iter) File "C:\Users\jiaojiaxing.conda\envs\pinggu\lib\site-packages\torch\utils\data\dataloader.py", line 631, in next data = self._next_data() File "C:\Users\jiaojiaxing.conda\envs\pinggu\lib\site-packages\torch\utils\data\dataloader.py", line 675, in _next_data data = self._dataset_fetcher.fetch(index) # may raise StopIteration File "C:\Users\jiaojiaxing.conda\envs\pinggu\lib\site-packages\torch\utils\data_utils\fetch.py", line 54, in fetch return self.collate_fn(data) File "E:\jjx\RAG-Retrieval\rag-retrieval\embedding\data.py", line 74, in triplet_collate_fn all_querys.append(item['query']) TypeError: string indices must be integers 方便您看一下吗?我的库是按照您的库来装的,就是torch的版本是2.2.1+cu118

NLPJCL commented 8 months ago

看起来是训练数据的问题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

NLPJCL commented 8 months ago

您好,我是想做一个垂直领域的embedding模型,微调之后 利用这个embedding模型结合大模型再进行回答问题的,

明白,那建议利用大模型为垂直领域构造一批数据集,比如下面是RAFT论文中输入一个content生成query的例子。然后把query,content当做query和正例,来微调垂直领域的BGE-embedding等模型。

{"role": "system", "content": "You are a synthetic question-answer pair generator. Given a chunk of context about some topic(s), generate %s example questions a user could ask and would be answered using information from the chunk. For example, if the given context was a Wikipedia paragraph about the United States, an example question could be 'How many states are in the United States?'" % (x)},

Suiji12 commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

Suiji12 commented 8 months ago

您好,我是想做一个垂直领域的embedding模型,微调之后 利用这个embedding模型结合大模型再进行回答问题的,

明白,那建议利用大模型为垂直领域构造一批数据集,比如下面是RAFT论文中输入一个content生成query的例子。然后把query,content当做query和正例,来微调垂直领域的BGE-embedding等模型。

{"role": "system", "content": "You are a synthetic question-answer pair generator. Given a chunk of context about some topic(s), generate %s example questions a user could ask and would be answered using information from the chunk. For example, if the given context was a Wikipedia paragraph about the United States, an example question could be 'How many states are in the United States?'" % (x)},

请问这个有相关的代码吗?

NLPJCL commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。

NLPJCL commented 8 months ago

您好,我是想做一个垂直领域的embedding模型,微调之后 利用这个embedding模型结合大模型再进行回答问题的,

明白,那建议利用大模型为垂直领域构造一批数据集,比如下面是RAFT论文中输入一个content生成query的例子。然后把query,content当做query和正例,来微调垂直领域的BGE-embedding等模型。 {"role": "system", "content": "You are a synthetic question-answer pair generator. Given a chunk of context about some topic(s), generate %s example questions a user could ask and would be answered using information from the chunk. For example, if the given context was a Wikipedia paragraph about the United States, an example question could be 'How many states are in the United States?'" % (x)},

请问这个有相关的代码吗?

思路就是调用chatgpt来生成,这里是一个参考: https://github.com/ShishirPatil/gorilla/blob/c1b67eed241c419f5a9929993dcb4a117b6029b5/raft/raft.py#L103

Suiji12 commented 8 months ago

您好,我是想做一个垂直领域的embedding模型,微调之后 利用这个embedding模型结合大模型再进行回答问题的,

明白,那建议利用大模型为垂直领域构造一批数据集,比如下面是RAFT论文中输入一个content生成query的例子。然后把query,content当做query和正例,来微调垂直领域的BGE-embedding等模型。 {"role": "system", "content": "You are a synthetic question-answer pair generator. Given a chunk of context about some topic(s), generate %s example questions a user could ask and would be answered using information from the chunk. For example, if the given context was a Wikipedia paragraph about the United States, an example question could be 'How many states are in the United States?'" % (x)},

请问这个有相关的代码吗?

思路就是调用chatgpt来生成,这里是一个参考: https://github.com/ShishirPatil/gorilla/blob/c1b67eed241c419f5a9929993dcb4a117b6029b5/raft/raft.py#L103

好嘞 非常感谢您。

Suiji12 commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。 代码是我昨天下载下来的 我再重新试一下 如果不行就再麻烦您吧。

NLPJCL commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。 代码是我昨天下载下来的 我再重新试一下 如果不行就再麻烦您吧。

  1. 建议先直接执行data.py来debug,在下面链接这行,打印出item,看样子这个报错是item是一个字符串导致的。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L74

2.然后在data.py的read_train_data函数下,看下为什么train_data列表里面是字符串,正常来说应该是字典。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L33

Suiji12 commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。 代码是我昨天下载下来的 我再重新试一下 如果不行就再麻烦您吧。

  1. 建议先直接执行data.py来debug,在下面链接这行,打印出item,看样子这个报错是item是一个字符串导致的。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L74

2.然后在data.py的read_train_data函数下,看下为什么train_data列表里面是字符串,正常来说应该是字典。

https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L33

非常感谢您的回复 我觉得应该不是数据集的问题 单独的运行data.py文件: C:\Users\jiaojiaxing.conda\envs\pinggu\python.exe E:\jjx\RAG-Retrieval-master\rag-retrieval\embedding\data.py 100it [00:00, 3445.75it/s] 0%| | 0/16 [00:00<?, ?it/s]using triplet 16 0%| | 0/16 [00:00<?, ?it/s] torch.Size([32, 128]) torch.Size([32, 512]) torch.Size([480, 512])

Process finished with exit code 0 是没有问题的

Suiji12 commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。 代码是我昨天下载下来的 我再重新试一下 如果不行就再麻烦您吧。

  1. 建议先直接执行data.py来debug,在下面链接这行,打印出item,看样子这个报错是item是一个字符串导致的。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L74

2.然后在data.py的read_train_data函数下,看下为什么train_data列表里面是字符串,正常来说应该是字典。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L33

非常感谢您的回复 我觉得应该不是数据集的问题 单独的运行data.py文件: C:\Users\jiaojiaxing.conda\envs\pinggu\python.exe E:\jjx\RAG-Retrieval-master\rag-retrieval\embedding\data.py 100it [00:00, 3445.75it/s] 0%| | 0/16 [00:00<?, ?it/s]using triplet 16 0%| | 0/16 [00:00<?, ?it/s] torch.Size([32, 128]) torch.Size([32, 512]) torch.Size([480, 512])

Process finished with exit code 0 是没有问题的

但是运行train_embedding.py还是会报错

Suiji12 commented 8 months ago
def triplet_collate_fn(self,batch):

    all_querys = []
    all_pos_docs = []
    all_neg_docs = []

    for item in batch:
        # print(item)
        all_querys.append(item['query'])
        all_pos_docs.append(item['pos'])
        all_neg_docs.extend(item['neg'])

    all_query_tokens = self.tokenizer(all_querys,padding='max_length',truncation=True,
                        max_length=self.query_max_len,return_tensors='pt')

    all_pos_doc_tokens = self.tokenizer(all_pos_docs,padding='max_length',truncation=True,
                        max_length=self.passage_max_len,return_tensors='pt')

    all_neg_doc_tokens = self.tokenizer(all_neg_docs,padding='max_length',truncation=True,
                        max_length=self.passage_max_len,return_tensors='pt')

    toekns_batch={}

    toekns_batch['query_input_ids'] = all_query_tokens['input_ids']
    toekns_batch['query_attention_mask'] = all_query_tokens['attention_mask']

    toekns_batch['pos_doc_input_ids'] = all_pos_doc_tokens['input_ids']
    toekns_batch['pos_doc_attention_mask'] = all_pos_doc_tokens['attention_mask']

    toekns_batch['neg_doc_input_ids'] = all_neg_doc_tokens['input_ids']
    toekns_batch['neg_doc_attention_mask'] = all_neg_doc_tokens['attention_mask']

    return toekns_batch  这个是triplet_collate_fn相关的代码,
Suiji12 commented 8 months ago

1711770515926 这个是degub data的结果

NLPJCL commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。 代码是我昨天下载下来的 我再重新试一下 如果不行就再麻烦您吧。

  1. 建议先直接执行data.py来debug,在下面链接这行,打印出item,看样子这个报错是item是一个字符串导致的。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L74

2.然后在data.py的read_train_data函数下,看下为什么train_data列表里面是字符串,正常来说应该是字典。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L33

非常感谢您的回复 我觉得应该不是数据集的问题 单独的运行data.py文件: C:\Users\jiaojiaxing.conda\envs\pinggu\python.exe E:\jjx\RAG-Retrieval-master\rag-retrieval\embedding\data.py 100it [00:00, 3445.75it/s] 0%| | 0/16 [00:00<?, ?it/s]using triplet 16 0%| | 0/16 [00:00<?, ?it/s] torch.Size([32, 128]) torch.Size([32, 512]) torch.Size([480, 512]) Process finished with exit code 0 是没有问题的

但是运行train_embedding.py还是会报错

看起来data.py报错的地方没有问题,在执行train_embedding.py的时候,继续打印出item看看呢?另外需要注意:train_embedding.py需要传递readme给出的参数。

Suiji12 commented 8 months ago

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。

看起来是训练数据的问你题,需要更多的信息,请给下您的训练数据的一条例子。 或者您尝试用默认的数据格式:../../example_data/t2rank_100.json。是否可以跑通?

数据集就是您的数据集呀,我没有动的。 c13f654af31ead68850134fa46c4210

我这边没遇到这个问题,您可以先git pull下,更新到最新代码。看看问题是否存在。 如果存在,请提供下您运行程序的脚本,以及embedding下面data.py文件下,EmbeddingDataset的read_train_data的实现,看着报错,是这个函数里面导致的。 代码是我昨天下载下来的 我再重新试一下 如果不行就再麻烦您吧。

  1. 建议先直接执行data.py来debug,在下面链接这行,打印出item,看样子这个报错是item是一个字符串导致的。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L74

2.然后在data.py的read_train_data函数下,看下为什么train_data列表里面是字符串,正常来说应该是字典。 https://github.com/NLPJCL/RAG-Retrieval/blob/50a36214abd769caa76378f55ad1e6c0e01bf296/rag-retrieval/embedding/data.py#L33

非常感谢您的回复 我觉得应该不是数据集的问题 单独的运行data.py文件: C:\Users\jiaojiaxing.conda\envs\pinggu\python.exe E:\jjx\RAG-Retrieval-master\rag-retrieval\embedding\data.py 100it [00:00, 3445.75it/s] 0%| | 0/16 [00:00<?, ?it/s]using triplet 16 0%| | 0/16 [00:00<?, ?it/s] torch.Size([32, 128]) torch.Size([32, 512]) torch.Size([480, 512]) Process finished with exit code 0 是没有问题的

但是运行train_embedding.py还是会报错

看起来data.py报错的地方没有问题,在执行train_embedding.py的时候,继续打印出item看看呢?另外需要注意:train_embedding.py需要传递readme给出的参数。

感谢您的回复

NLPJCL commented 8 months ago

也有可能是跨平台的原因,建议一般深度学习代码还是在linux上跑。

Suiji12 commented 8 months ago

也有可能是跨平台的原因,建议一般深度学习代码还是在linux上跑。

好的,我这边用的是win10

Suiji12 commented 8 months ago

也有可能是跨平台的原因,建议一般深度学习代码还是在linux上跑。

抱歉又打扰您了,能借鉴一下您生成数据集的代码吗?您的代码可以运行了,就是那个调用openai生成数据集的代码还是没看太明白。我是主要做微调embedding模型,然后再利用这个embedding模型结合RAG以及LLM进行问题回答的。(针对一个垂直领域)

NLPJCL commented 8 months ago

我想问下,是什么原因导致的之前遇到的问题呀? 不好意思,我这边也没有实践生成数据集。我理解主要就是调用openai,需要key,是有免费的额度的,promt之间参考它的就行,你可以搜索下其他人的方法。 或者如果硬件允许的话,直接下载开源的大模型(yi-6b-chat),来生成也行。

Suiji12 commented 8 months ago

我想问下,是什么原因导致的之前遇到的问题呀? 不好意思,我这边也没有实践生成数据集。我理解主要就是调用onpenai,需要key,是有免费的额度的,promt之间参考它的就行,你可以搜索下其他人的方法。 或者如果硬件允许的话,直接下载开源的大模型(yi-6b-chat),来生成也行。

好的 感谢您

Suiji12 commented 8 months ago

我想问下,是什么原因导致的之前遇到的问题呀? 不好意思,我这边也没有实践生成数据集。我理解主要就是调用onpenai,需要key,是有免费的额度的,promt之间参考它的就行,你可以搜索下其他人的方法。 或者如果硬件允许的话,直接下载开源的大模型(yi-6b-chat),来生成也行。

是您说的 有的参数没有在代码中给出,给出之后就可以运行了