12-Oracle 23ai Vector 使用ONNX模型生成向量嵌入

一、Oracle 23ai Vector Embeddings 核心概念

向量嵌入(Vector Embeddings)​​

-- 将非结构化数据(文本/图像)转换为数值向量

- - 捕获数据的语义含义而非原始内容

- 示例:"数据库" → [0.24, -0.78, 0.56, ...]

​ONNX(Open Neural Network Exchange)​​

- 开放神经网络交换格式

- 实现跨框架模型互操作(PyTorch → TensorFlow → Oracle)

- Oracle 23ai 原生支持 ONNX 模型部署

​生成方式

可使用内置,也可以使用外部的第三方API

二、关于Vector Generator

FLOAT32 Vector Generator,BINARY Vector Generator
不建议在生产数据库上使用矢量生成器。本教程可用于测试和 演示目的。

​三、环境准备(基于Oracle 23ai Free版,安装模式参考前文)

8-Oracle23 ai free True Cache OL9.6上部署和实操-已验证-CSDN博客
  1. 环境限制
  • CPU:最大 2 核
  • 数据量:≤ 12 GB
  • 内存:≤ 2 GB
  • 单实例限制:每主机仅允许一个实例

四、准备ONNX模型

  • ​步骤1:下载预训练模型​
  • - 从Hugging Face下载模型(如all-MiniLM-L12-v2):
  • - 从Hugging Face下载模型(如all-MiniLM-L12-v2):其中huggingface.co没梯子无法下载,“https://huggingface.co/sentence-transformers/all-MiniLM-L12-v2/resolve/main/onnx/model.onnx”
  • oracled OCI 地址可以下载,下载预训练模型。此次选择将命令用于本地 ,未测试将模型和数据放在对象存储的情况。​"https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/VBRD9P8ZFWkKvnfhrWxkpPe8K03-JIoM5h_8EJyJcpE80c108fuUjg7R5L5O7mMZ/n/adwc4pm/b/OML-Resources/o/all_MiniLM_L12_v2_augmented.zip"

 传输模型到服务器​,本地服务器​:复制到数据库可访问目录

[root@OL96 home]# unzip all_MiniLM_L12_v2_augmented.zip
Archive:  all_MiniLM_L12_v2_augmented.zipinflating: all_MiniLM_L12_v2.onnxinflating: README-ALL_MINILM_L12_V2-augmented.txt
[root@OL96 home]# ll
total 1618196
drwx------. 14 admin  admin          4096 Jun  2 22:54 admin
-rw-r--r--.  1 root   root      122597346 Jul 16  2024 all_MiniLM_L12_v2_augmented.zip
-rw-r--r--.  1 root   root      133322334 Jul 15  2024 all_MiniLM_L12_v2.onnx
drwx------.  4 oracle oinstall        143 Jun  3 18:56 oracle
-rw-r--r--.  1 root   root     1401096996 May  6 18:50 oracle-database-free-23ai-23.8-1.el9.x86_64.rpm
-rw-r--r--.  1 root   root           4232 Jul 15  2024 README-ALL_MINILM_L12_V2-augmented.txt
cp all_MiniLM_L12_v2.onnx /opt/oracle/models/
步骤2:数据库环境配置
  • 创建专用用户和目录
  • DB_DEVELOPER_ROLE是Oracle 23ai引入的新角色,整合了CONNECT和RESOURCE角色,并增加了更多现代开发所需的权限,比如创建多维数据模型、机器学习模型
su - oracle
sqlplus / as sysdba
alter session set container=FREEPDB1;
CREATE TABLESPACE vec_ts DATAFILE 'vector_ts.dbf' SIZE 2G AUTOEXTEND ON;
CREATE USER vector_user IDENTIFIED BY Oracle_4U DEFAULT TABLESPACE vec_ts;
GRANT DB_DEVELOPER_ROLE TO vector_user;CREATE OR REPLACE DIRECTORY MODEL_DIR AS '/opt/oracle/models/';
GRANT READ, WRITE ON DIRECTORY MODEL_DIR TO vector_user;
步骤3:加载ONNX模型到数据库​

连接创建的用户,并导入嵌入模型到数据库中。

DBMS_VECTOR.LOAD_ONNX_MODEL 是Oracle提供的存储过程,用于加载ONNX格式的机器学习模型,可以通过这个存储导入嵌入模型到数据库中。

SYS@FREE> show pdbs;CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------3 FREEPDB1                       READ WRITE NO
SYS@FREE> col algorithm for a50
SYS@FREE> aol mining_funtion for a50
SYS@FREE> col mining_funtion for a50
select model_name, algorithm, mining_function from user_mining_models where model_name = 'ALL_MINILM_L12_V2';
未选定行
SYS@FREE> !ls -lrht /opt/oracle/models
总用量 128M
-rw-r--r--. 1 root root 128M  6月  6 13:33 all_MiniLM_L12_v2.onnx
SYS@FREE> SET SERVEROUTPUT ON;
begin2    dbms_vector.drop_onnx_model (3      model_name => 'ALL_MINILM_L12_V2',4      force => true);5    dbms_vector.load_onnx_model (6      directory  => 'MODEL_DIR',7      file_name  => 'all_MiniLM_L12_v2.onnx',8      model_name => 'ALL_MINILM_L12_V2');9  end;10  /PL/SQL 过程已成功完成。
SYS@FREE> SET SERVEROUTPUT OFF;
SYS@FREE> select model_name, algorithm, mining_function from user_mining_models where model_name = 'ALL_MINILM_L12_V2';MODEL_NAME
------------------------------------------------------------------------------------------------------------------------
ALGORITHM                                          MINING_FUNCTION
-------------------------------------------------- ------------------------------
ALL_MINILM_L12_V2
ONNX                                               EMBEDDING
参数说明:

dbms_vector.drop_onnx_model :删除数据库中的同名模型。

dbms_vector.load_onnx_model :加载ONNX格式的机器学习模型。

directory => 'model_dir':指定数据库目录对象(Directory Object),需提前创建并授权访问。

file_name => 'all_MiniLM_L12_v2.onnx':模型文件名。

model_name => 'ALL_MINILM_L12_V2':模型在数据库中的注册名称。

步骤4. 验证使用数据库中的embedding模型的有效性

可以通过VECTOR_EMBEDDING调用嵌入模型将非结构化文本转换为高维向量,用于支持语义相似性搜索。

VECTOR_EMBEDDING 函数语法结构:

VECTOR_EMBEDDING ( [ schema.] model_name USING mining_attribute_clause )

SYS@FREE>  SELECT VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'test模型向量化的有效性' as DATA) AS embedding;EMBEDDING
------------------------------------------------------------------------------------------------------------------------
[2.66404985E-003,9.65440422E-002,-1.35087622E-002,-5.54944314E-002,SYS@FREE> set linesize 300
SYS@FREE> set pagesize 300
SYS@FREE> set long 1000000
SYS@FREE> select model_name, algorithm, mining_function from user_mining_models where model_name = 'ALL_MINILM_L12_V2';MODEL_NAME                                                                                                                       ALGORITHM                                           MINING_FUNCTION
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ------------------------------
ALL_MINILM_L12_V2                                                                                                                ONNX       EMBEDDINGSYS@FREE>  SELECT VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'test模型向量化的有效性' as DATA) AS embedding;EMBEDDING
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[2.66404985E-003,9.65440422E-002,-1.35087622E-002,-5.54944314E-002,-4.43398356E-002,2.62922514E-002,2.59053931E-002,-7.91817252E-003,-9.61533338E-002,-5.10287704E-003,9.70973819E-002,-4.75466549E-002,9.48436558E-002,-2.00812109E-002,-1.11816991E-002,3.50039313E-003,2.49711871E-002,-4.08663116E-002,-
1.09921098E-002,1.97709594E-002,-4.39038612E-002,-1.07046172E-001,3.40610854E-002,1.17250914E-002,-7.20420256E-002,-4.8628971E-003,4.66601141E-002,-6.6996634E-002,1.15193594E-002,-1.86132006E-002,6.65622903E-003,1.11891717E-001,2.63250824E-002,-3.45257223E-002,2.68428884E-002,-1.63987558E-002,-2.753
36318E-002,-4.55752388E-002,3.59995365E-002,-2.89271609E-003,1.96910854E-002,-1.21251133E-003,1.0335011E-001,4.18214463E-002,6.89237565E-002,5.2454304E-002,6.04937077E-002,-6.6135779E-002,-9.3136644E-003,-3.22942957E-002,-5.8344584E-002,-3.99274416E-002,8.9949511E-002,9.88921244E-003,-2.11505666E-00

五、生成向量嵌入的SQL实操

​场景1:文本转向量​
-- 创建测试表
CREATE TABLE testdocs (id NUMBER PRIMARY KEY,content CLOB
);INSERT INTO testdocs VALUES (1, 'Oracle AI Vector Search revolutionizes data querying');
INSERT INTO testdocs VALUES (2, '机器学习模型需要高质量的数据嵌入');-- 生成向量嵌入
ALTER TABLE testdocs ADD (embedding VECTOR(384));UPDATE testdocs d
SET embedding = VECTOR_EMBEDDING(MINILM_MODEL USING d.content
);

 场景2:相似性搜索​

SELECT id, content, VECTOR_DISTANCE(embedding, VECTOR_EMBEDDING(MINILM_MODEL USING 'AI data processing'),COSINE) AS similarity
FROM testdocs
ORDER BY similarity DESC;--   --------------------------------------   ----------
1    Oracle AI Vector Search...                0.872
2    机器学习模型...                           0.215

、常见错误解决方案

  • ORA-40200:模型加载失败
    -- 检查模型访问权限
    SELECT directory_path 
    FROM ALL_DIRECTORIES 
    WHERE directory_name = 'MODEL_DIR';chmod -R 755 /opt/oracle/models
    • ORA-56904:向量维度不匹配
    • 修复​:调整表列定义 VECTOR(384)
    -- 检查模型输出维度
    SELECT vector_dimension 
    FROM USER_VECTOR_MODELS 
    WHERE model_name = 'ALL_MINILM_L12_V2';
    • CPU资源超限优化​:限制并发请求数 
    -- 监控资源使用
    SELECT * FROM VECTOR_RESOURCE_USAGE;

     ​TIPS:所有操作需在Oracle 23ai Free版限制内进行,建议生产环境使用企业版突破资源限制。此次实现Oracle 23ai的向量嵌入功能,将非结构化数据转化为可分析的语义向量,为AI搜索和分析奠定基础。 

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82731.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    用 NGINX 构建高效 POP3 代理`ngx_mail_pop3_module`

    一、模块定位与作用 协议代理 ngx_mail_pop3_module 让 NGINX 能够充当 POP3 代理:客户端与后端 POP3 服务器之间的所有请求均转发到 NGINX,由 NGINX 负责与后端会话逻辑。认证方式控制 通过 pop3_auth 指令指定允许客户端使用的 POP3 认证方法&#xf…

    每日算法 -【Swift 算法】三数之和

    Swift|三数之和(3Sum)详细题解 注释 拓展(LeetCode 15) ✨题目描述 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a, b, c,使得 a b c 0。请你找出所有和为 0 且不重…

    服务器磁盘空间被Docker容器日志占满处理方法

    事发场景: 原本正常的服务停止运行了,查看时MQTT服务链接失败,查看对应的容器服务发现是EMQX镜像停止运行了,重启也是也报错无法正常运行,报错如下图: 报错日志中连续出现两个"no space left on devi…

    令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

    文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…

    基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

    基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…

    Linux中shell编程表达式和数组讲解

    一、表达式 1.1 测试表达式 样式1: test 条件表达式 样式2: [ 条件表达式 ] 注意:以上两种方法的作用完全一样,后者为常用。但后者需要注意方括号[、]与条件表达式之间至少有一个空格。test跟 [] 的意思一样条件成立,状态返回值是0条件不成…

    深入了解JavaScript当中如何确定值的类型

    JavaScript是一种弱类型语言,当你给一个变量赋了一个值,该值是什么类型的,那么该变量就是什么类型的,并且你还可以给一个变量赋多种类型的值,也不会报错,这就是JavaScript的内部机制所决定的,那…

    【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE

    目录 1. BR/EDR(经典蓝牙)网络结构微微网(Piconet)散射网(Scatternet)蓝牙 BR/EDR 拓扑结构示意图 2. BLE(低功耗蓝牙)网络结构广播器与观察者(Broadcaster and Observer…

    C++虚函数表(虚表Virtual Table,简称vtable、VFT)(编译器为支持运行时多态(动态绑定)而自动生成的一种内部数据结构)虚函数指针vptr

    文章目录 **1. 虚函数表的核心概念**- **虚函数表(vtable)**:- **虚函数指针(vptr)**: **2. 虚函数表的生成与工作流程****生成时机**- **当一个类中至少有一个虚函数时**,编译器会为该类生成一…

    使用Python和TensorFlow实现图像分类

    最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…

    Unity UI 性能优化--Sprite 篇

    🎯 Unity UI 性能优化终极指南 — Sprite篇 🧩 Sprite 是什么?—— 渲染的基石与性能的源头 在Unity的2D渲染管线中,Sprite 扮演着至关重要的角色。它不仅仅是2D图像资源本身,更是GPU进行渲染批处理(Batch…

    【git】把本地更改提交远程新分支feature_g

    创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g

    vue中加载Cesium地图(天地图、高德地图)

    目录 1、将下载的Cesium包移动至public下 2、首先需要将Cesium.js和widgets.css文件引入到 3、 新建Cesium.js文件,方便在全局使用 4、新建cesium.vue文件,展示三维地图 1、将下载的Cesium包移动至public下 npm install cesium后​​​​​​​ 2、…

    Elasticsearch的插件(Plugin)系统介绍

    Elasticsearch的插件(Plugin)系统是一种扩展机制,允许用户通过添加自定义功能来增强默认功能,而无需修改核心代码。插件可以提供从分析器、存储后端到安全认证、机器学习等各种功能,使Elasticsearch能够灵活适应不同的应用场景和业务需求。 一、插件的核心特点 模块化扩展…

    基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南

    基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南 本文详细介绍了在 openEuler 22.03 LTS SP1 操作系统上构建 DPDK 22.11.8 开发环境的完整流程。DPDK 20 版本之后采用 mesonninja 的编译方式,与早期版本有所不同。本文内容也可作为其他 Linux 发行版…

    微服务网关SpringCloudGateway+SaToken鉴权

    目录 概念 前置知识回顾 拿到UserInfo 用于自定义权限和角色的获取逻辑 最后进行要进行 satoken 过滤器全局配置 概念 做权限认证的时候 我们首先要明确两点 我们需要的角色有几种 我们需要的权限有几种 角色 分两种 ADMIN 管理员 :可管理商品 CUSTIOMER 普通…

    Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

    Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…

    Dify中聊天助手、agent、文本生成、chatflow、工作流模式解读分析与对比

    一次解读 1. 聊天助手 (Chat Assistant) 情景定位 (Situation): 你需要创建一个可以与用户进行多轮对话的AI应用,例如客服机器人、信息查询助手、或一个特定领域的虚拟专家。目标明确 (Purpose): 核心目标是理解并响应用户的连续提问,维持对话的上下文…

    使用Node.js分片上传大文件到阿里云OSS

    阿里云OSS的分片上传(Multipart Upload)是一种针对大文件优化的上传方式,其核心流程和关键特性如下: 1. ‌核心流程‌ 分片上传分为三个步骤: 初始化任务‌:调用InitiateMultipartUpload接口创建上传任务…

    C++ if语句完全指南:从基础到工程实践

    一、选择结构在程序设计中的核心地位 程序流程控制如同城市交通网络,if语句则是这个网络中的决策枢纽。根据ISO C标准,选择结构占典型项目代码量的32%-47%,其正确使用直接影响程序的: 逻辑正确性 执行效率 可维护性 安全边界 …