创新项目实训--题目向量编码

这段代码的作用是将一组数学问题的文本数据转化为向量,并使用 FAISS 向量数据库进行存储,以便后续进行快速的相似性搜索。具体步骤如下:

首先导入所需的包

import json
from langchain_community.embeddings import ModelScopeEmbeddings
import os
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_core.documents import Document
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS

os.environ["DASHSCOPE_API_KEY"] = "sk-6519ac2ecc7b4efeb7c7989cd263a5f8"
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
  • 加载嵌入模型

    • 加载一个用于将文本转化为向量表示的中文嵌入模型 damo/nlp_corom_sentence-embedding_chinese-base
  • 确定目录路径

    • 获取当前脚本所在目录的路径,以及上一级和上上一级目录的路径。
    • 构建JSON数据文件和向量存储文件夹的路径。
  • 创建向量存储文件夹

    • 如果向量存储文件夹不存在,则创建它。
  • 读取JSON文件

    • 逐行读取JSON文件中的数据,并将每条数据(数学问题)存储在 problem_list 列表中。
# embedding模型
model_id = "damo/nlp_corom_sentence-embedding_chinese-base"
embeddings_model = ModelScopeEmbeddings(model_id=model_id)

# 获取当前脚本所在目录
current_dir = os.path.dirname(__file__)

# 获取上上一层目录
parent_dir = os.path.abspath(os.path.join(current_dir, os.pardir))
grandparent_dir = os.path.abspath(os.path.join(parent_dir, os.pardir))

# 构建json文件的路径
data_file_path = os.path.join(grandparent_dir, 'exercise\\exercise_data.json')

# 构建向量文件夹的路径
vector_path = os.path.join(grandparent_dir, 'exercise\\exercise_vector')

# 创建向量存储文件夹
os.makedirs(vector_path, exist_ok=True)

# 读取json文件
problem_list = []
with open(data_file_path, 'r', encoding='utf-8') as file:
    for line in file:
        data = json.loads(line.strip())
        problem_list.append(data)
  • 准备文档数据

    • 将每条数学问题数据格式化为包含 labeltextansequation 的文本,并将其存储为 Document 对象,加入 documents 列表中。
  • 批量处理文档数据

    • 以批量处理的方式将 documents 列表中的数据分批进行处理,每批次包含最多1000个文档。
    • 对每个批次的文档,使用嵌入模型将其转化为向量表示,并使用 FAISS 向量数据库进行存储。
    • 将每个批次的向量数据保存到本地文件中,文件路径基于批次索引生成
documents=[]
for i, problem in enumerate(problem_list):
    text = "label:" + problem["label"] + " text:" + problem["text"] + " ans:" + problem["ans"] + " equation:" + problem[
        "equation"]
    document = Document(page_content=text)
    documents.append(document)

batch_size = 1000  # Adjust batch size as needed
for i in range(0, len(documents), batch_size):
    batch_documents = documents[i:i + batch_size]
    vectorstore = FAISS.from_documents(
        batch_documents,
        embedding=embeddings_model
    )
    vector_file_path = os.path.join(vector_path, str(i // batch_size))
    vectorstore.save_local(vector_file_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值