ali77sina/SEC-QA-sorted-chunks
收藏数据集概述
基本信息
- 许可证:MIT
- 任务类别:问答
- 语言:英语
- 标签:金融
- 数据量:1K<n<10K
数据内容
- 列信息:
- questions:问题列表,每个2000字的SEC文件部分生成5个问题。
- answers:由GPT-4生成的答案。
- chunks:文本片段。
- sorted_chunks:使用Dense Passage Retrieval (DPR)排序的文本片段。
数据处理
- 排序方法:
- 使用BERT模型微调的查询和上下文嵌入进行DPR处理。
- 使用FAISS和IndexFlatL2进行排序。
示例代码
-
DPR模型导入: python from transformers import DPRConfig, DPRContextEncoder, DPRQuestionEncoder, DPRQuestionEncoderTokenizer, DPRContextEncoderTokenizer
上下文编码器和分词器
tokenizer_c = DPRContextEncoderTokenizer.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base") model_c = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base", device_map = cuda)
问题编码器和分词器
tokenizer_q = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base") model_q = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base", device_map = cuda)
-
使用FAISS排序: python import faiss
sorted_chunks = []
print(f----- 总行数: {len(answers)} )
for q,a,c in tqdm(zip(questions[:], answers[:], chunks[:])): index = faiss.IndexFlatL2(768) # 假设嵌入大小为768
使用上下文编码器编码文本
encoded_texts = tokenizer_c(c, return_tensors=pt, padding = max_length)[input_ids] encoded_texts = model_c(encoded_texts.cuda()).pooler_output
使用问题编码器编码问题
encoded_question = tokenizer_q(q, return_tensors=pt)[input_ids] encoded_question = model_q(encoded_question.cuda()).pooler_output
if len(c)>4: # 执行FAISS搜索以获取前5个文本 faiss_texts = encoded_texts.detach().cpu().numpy() faiss_question = encoded_question.detach().cpu().numpy() index.add(np.array(faiss_texts)) _, faiss_topk = index.search(faiss_question, k=4) top_texts = [c[j] for j in faiss_topk[0]] top_t = for j in top_texts: top_t += j + , sorted_chunks.append(top_t)
else: # 执行FAISS搜索以获取前5个文本 faiss_texts = encoded_texts.detach().cpu().numpy() faiss_question = encoded_question.detach().cpu().numpy() index.add(np.array(faiss_texts)) _, faiss_topk = index.search(faiss_question, k=len(c)) top_texts = [c[j] for j in faiss_topk[0]] top_t = for j in top_texts: top_t += j + , sorted_chunks.append(top_t)
df = pd.DataFrame(data = {questions:questions[:], answers:answers[:], chunks:chunks[:], sorted_chunks:sorted_chunks})




