在 Oracle APEX 中用 BGE_BASE 生成向量:从模型导入到历史数据更新

向量检索的第一步,是把文本转成向量。笔者这里使用 Oracle 数据库中的 ONNX 模型 BGE_BASE,并在 APEX 调用匿名块,为历史内容生成或更新向量。

01 | 导入 BGE_BASE ONNX 模型

先将 bge-base-zh-v1.5.onnx 放入数据库目录 DM_DUMP,再通过 DBMS_VECTOR.LOAD_ONNX_MODEL 导入:

sql 复制代码
BEGIN
  DBMS_VECTOR.LOAD_ONNX_MODEL(
    directory => 'DM_DUMP',
    file_name => 'bge-base-zh-v1.5.onnx',
    model_name => 'BGE_BASE',
    metadata => JSON('{
      "function": "embedding",
      "embeddingOutput": "embedding",
      "input": {"input": ["DATA"]}
    }')
  );
END;
/

导入完成后,可查询模型信息:

sql 复制代码
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE model_name = 'BGE_BASE';

结果中,BGE_BASE 的算法为 ONNX,挖掘函数为 EMBEDDING

02 | 为历史内容生成或更新向量

模型可通过 VECTOR_EMBEDDING 将文本转换为向量。例如:

sql 复制代码
SELECT VECTOR_EMBEDDING(BGE_BASE USING 'Hi, Alfred' AS DATA) AS embedding;

在历史表 t_history 中,笔者通过匿名块逐行处理内容:仅处理尚未向量化,或标记为需要更新的记录。

sql 复制代码
DECLARE
  CURSOR c_history IS
    SELECT rowid AS rid, content
    FROM t_history
    WHERE content IS NOT NULL
      AND (v IS NULL OR v_needs_update = 1);
BEGIN
  FOR r IN c_history LOOP
    UPDATE t_history
    SET v = VECTOR_EMBEDDING(BGE_BASE USING r.content AS DATA),
        v_needs_update = 0
    WHERE rowid = r.rid;
  END LOOP;
  COMMIT;
END;

其中,v 用于保存生成后的向量;v_needs_update 用于标识是否需要重新向量化。内容为空的数据不会参与处理,已完成且无需更新的数据也会被跳过。

关注我,和AI一起成长~

相关推荐
2601_962296284 天前
Pytorch转ONNX详解
pytorch·深度学习·框架·onnx·模型转换
长江后浪博客6 天前
Python + YOLOv8 疲劳驾驶 AI 视觉检测入门:从模型训练到 ONNX 实时摄像头检测完整实战
人工智能·python·yolo·疲劳驾驶检测·onnx·yolov8
JeJe同学11 天前
ONNX 的核心原理
人工智能·onnx
笑霸final14 天前
不用上传服务器!用 Vue3 + ONNX Runtime Web 在浏览器本地实现智能抠图
运维·前端·图像处理·ai·onnx·canva可画·web性能优化
大鹏的NLP博客15 天前
ONNX Runtime CUDA 推理优化实战:破解 C++ 比 Python 慢 28 倍的假象
c++·onnx·推理优化
Lee_jerome24 天前
从 PyTorch 权重到 RK3588 板端推理:ResNet18 二分类模型完整部署教程
pytorch·边缘计算·rk3588·模型部署·onnx·resnet18·int8量化
johnny2332 个月前
ONNX生态简介与实战:ONNX Runtime
onnx
大鹏的NLP博客2 个月前
深度学习模型PyTorch与ONNX数值一致性校验通用技术报告
人工智能·pytorch·深度学习·onnx
阿钱真强道2 个月前
13 YOLOv8的ONNX输出结构——9个张量如何变成检测框
目标检测·onnx·yolov8·nms·dfl