Oracle Database 23ai introdujo la Busqueda Vectorizada por IA, una nueva y emocionante función que revoluciona la búsqueda de similitud semántica mediante la generación de vectores mediante modelos de transformación dentro de la base de datos. Con los vectores, podemos realizar búsquedas de similitud que aprovechan la semántica de los datos, más allá de la simple coincidencia de texto, para encontrar información relevante basada en el significado y el contexto.
Para ello, oracle ofrece una versión descargable del modelo MiniLM-L12-v2 de Hugging Face en formato ONNX.
Este modelo se puede cargar directamente en la base de datos mediante las funciones DBMS_VECTOR.LOAD_ONNX_MODEL o DBMS_DATA_MINING.IMPORT_ONNX_MODEL.
El modelo incluye la tokenización y los pasos de posprocesamiento necesarios para generar embeddings vectoriales sin problemas con Busqueda Vectorizada por IA en base de datos Oracle 23ai.
¿Qué es all-MiniLM-L12-v2?
El modelo all-MiniLM-L12-v2 es un modelo de transformación de oraciones compacto pero potente, ampliamente utilizado para optimizar diversas tareas de procesamiento del lenguaje natural (PLN). La documentación indica que busca la eficiencia y el alto rendimiento, y cuenta con una arquitectura de 12 capas diseñada para destacar en tareas como la similitud de oraciones y la clasificación de texto.
Su diseño ligero permite un procesamiento más rápido y reduce la demanda computacional en comparación con modelos más grandes. A pesar de su tamaño compacto, se caracteriza por su alta precisión y fiabilidad, lo que lo convierte en una opción versátil para desarrolladores que implementan soluciones de PLN.
Cargar el modelo aumentado en la base de datos Oracle Autonoma
Repasemos los pasos para usar el modelo aumentado de embedding en la base de datos.
- Cargar el modelo a la base de datos desde el Object Storage.
- Generar los embeddings vectors.
Cargar el modelo a la base de datos. Especifica el nombre del archivo del modelo ONNX y la URI de ubicación del objeto en el Object Storage.
DECLARE
ONNX_MOD_FILE VARCHAR2(100) := 'all_MiniLM_L12_v2.onnx';
MODNAME VARCHAR2(500);
LOCATION_URI VARCHAR2(200) := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
BEGIN
DBMS_OUTPUT.PUT_LINE('Nombre del archivo del modelo ONNX en el Object Storage es: '||ONNX_MOD_FILE);
--------------------------------------------
-- Define un nombre de modelo para el modelo local
--------------------------------------------
SELECT UPPER(REGEXP_SUBSTR(ONNX_MOD_FILE, '[^.]+')) INTO MODNAME from dual;
DBMS_OUTPUT.PUT_LINE('El Modelo será cargado y guardado con el nombre: '||MODNAME);
-----------------------------------------------------
-- Lee el archivo del modelo ONNX desde el Object Storage
-- al directorio data pump de la Base de Datos
-----------------------------------------------------
BEGIN
DBMS_DATA_MINING.DROP_MODEL(model_name => MODNAME);
EXCEPTION WHEN OTHERS THEN NULL; END;
DBMS_CLOUD.GET_OBJECT(
credential_name => NULL,
directory_name => 'DATA_PUMP_DIR',
object_uri => LOCATION_URI||ONNX_MOD_FILE);
-----------------------------------------
-- Carga el modelo ONNX a la base de datos
-----------------------------------------
DBMS_VECTOR.LOAD_ONNX_MODEL(
directory => 'DATA_PUMP_DIR',
file_name => ONNX_MOD_FILE,
model_name => MODNAME);
DBMS_OUTPUT.PUT_LINE('El nuevo modelo ha sido cargado exitosamente con el nombre: '||MODNAME);
END;
Nombre del archivo del modelo ONNX en el Object Storage es: all_MiniLM_L12_v2.onnx
El Modelo será cargado y guardado con el nombre: ALL_MINILM_L12_V2
El nuevo modelo ha sido cargado exitosamente con el nombre: ALL_MINILM_L12_V2
Validar que el modelo fue importado a la base de datos.
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
Generar los embeddings vectoriales
Genera los vectores de embeddings utilizando la función de puntuación SQL VECTOR_EMBEDDING. La función VECTOR_EMBEDDING tiene dos parámetros de entrada:
- El modelo de embedding vectorial
- Una expresión o nombre de columna como datos a incrustar
La salida de la función SQL VECTOR_EMBEDDING es un vector que captura las características semánticas de los datos de entrada para su uso en búsquedas de similitud en la base de datos.
Aquí, generamos vectores de incrustación utilizando "El rápido zorro marron" como entrada. A continuación se muestra una salida parcial.
SELECT VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'El rápido zorro marron' as DATA) AS embedding;
EMBEDDING
--------------------------------------------------------------------------------
[1.40532674E-002,-4.24734354E-002,-1.42729701E-002,3.90004814E-002,3.84781733E-0
02,-7.44695729E-003,-1.20800901E-002,2.60837115E-002,-3.97795811E-002,3.85206044
E-002,-8.92989617E-003,-5.55456802E-002,5.72643466E-002,3.43147628E-002,-3.51916
...
...
Crea una tabla con algunos datos y luego, vectorizala.
CREATE TABLE vec1 (
id NUMBER PRIMARY KEY,
str VARCHAR2(128),
v VECTOR
);
INSERT INTO vec1 (id, str) VALUES (1, 'Twinkle, twinkle, pequeña estrella');
INSERT INTO vec1 (id, str) VALUES (2, 'Baa baa oveja negra');
INSERT INTO vec1 (id, str) VALUES (3, 'Mary tiene una pequeña oveja');
INSERT INTO vec1 (id, str) VALUES (4, 'Jack y Jill suben a la colina');
INSERT INTO vec1 (id, str) VALUES (5, 'Humpty Dumpty tiene una gran caida');
COMMIT;
Ejemplo de como crear un vector para la columna str con id = 2.
La salida parcial se muestra a continuación.
SELECT VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING str as data) AS embedding
FROM vec1
WHERE id = 2;
EMBEDDING
--------------------------------------------------------------------------------
[-5.06732985E-002,2.79495809E-002,-2.49498505E-002,-1.40845561E-002,-4.07454036E
-002,1.19132325E-002,4.41188365E-002,-1.03995301E-001,9.50366631E-003,4.92134318
E-003,-4.72284891E-002,-8.59436914E-002,-4.93300222E-002,1.57973133E-002,-5.0117
...
...
Creando vectores para todas las columnas str.
A continuación se muestra una salida parcial.
SELECT VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING str as data) AS embedding
FROM vec1;
EMBEDDING
--------------------------------------------------------------------------------
[-5.06732985E-002,2.79495809E-002,-2.49498505E-002,-1.40845561E-002,-4.07454036E
-002,1.19132325E-002,4.41188365E-002,-1.03995301E-001,9.50366631E-003,4.92134318
E-003,-4.72284891E-002,-8.59436914E-002,-4.93300222E-002,1.57973133E-002,-5.0117
...
...
Creando una tabla basada en una tabla existente con los vectores creados en el momento.
CREATE TABLE vec2 as
SELECT
id,
str,
VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING str as data) as v
FROM vec1;
Tabla creada.
Carga el modelo aumentado en instancias locales de Oracle Database 23ai
1. Descargua y descomprime el archivo que contiene el modelo ONNX (
enlace)
$ unzip all_MiniLM_L12_v2_augmented.zip
Archive: all_MiniLM_L12_v2_augmented.zip
inflating: all_MiniLM_L12_v2.onnx
inflating: README-ALL_MINILM_L12_V2_augmented.txt
2. Inicia sesión en tu instancia de base de datos como sysdba. En este ejemplo, iniciamos sesión en una base de datos pdb llamada ORCLPDB. Reemplaza ORCLPDB con el nombre de tu base de datos.
$ sqlplus / as sysdba;
SQL> alter session set container=ORCLPDB;
3. Aplica los permisos y define el directorio de volcado de datos como la ruta donde se descomprimió el modelo ONNX. Ten en cuenta que, en este ejemplo, utilizo el esquemaOMLUSER. Reemplaza OMLUSER con el nombre de tu esquema.
SQL> GRANT DB_DEVELOPER_ROLE, CREATE MINING MODEL TO OMLUSER;
SQL> CREATE OR REPLACE DIRECTORY DM_DUMP AS '<path to ONNX model>';
SQL> GRANT READ ON DIRECTORY DM_DUMP TO OMLUSER;
SQL> GRANT WRITE ON DIRECTORY DM_DUMP TO OMLUSER;
SQL> exit
4. Inicia sesión en tu esquema.
$ sqlplus omluser/omluser@ORCLPDB;
Carga el modelo ONNX. Opcionalmente, elimina primero el modelo si ya existe uno con el mismo nombre en la base de datos.
SQL> exec DBMS_VECTOR.DROP_ONNX_MODEL(model_name => 'ALL_MINILM_L12_V2', force => true);
BEGIN
DBMS_VECTOR.LOAD_ONNX_MODEL(
directory => 'DM_DUMP',
file_name => 'all_MiniLM_L12_v2.onnx',
model_name => 'ALL_MINILM_L12_V2');
END;
/
Una vez importado, el modelo puede generar los embedings como se muestra más arriba.
Según indica Oracle, los modelos ONNX pueden ampliarse mediante una canalización especializada para funcionar con las capacidades de búsqueda vectorial de IA de Oracle Database 23ai. Esta canalización incluye pasos de preprocesamiento tanto para texto (tokenización) como para imágenes, junto con pasos de posprocesamiento como la normalización y la agrupación. Esta canalización permite a los usuarios introducir directamente datos de texto e imágenes sin procesar, ya que todo el preprocesamiento se internaliza, eliminando la necesidad de convertir manualmente las entradas a tensores. A partir de OML4Py 2.0, el cliente OML4Py optimiza este proceso ampliando los modelos de transformadores preentrenados de Hugging Face y convirtiéndolos al formato ONNX. Tras la ampliación, estos modelos pueden importarse a Oracle Database 23ai para generar embeddings para la búsqueda de similitud.
Mi nombre es José Preda.

* José es Analista de Sistemas e Ingeniero de Software con especializaciones en tecnologías de Oracle, Microsoft, redes, infraestructura tecnológica y gestión de recursos humanos. Posee más de 30 años de experiencia en el área de tecnología, es de Paraguay, vive y trabaja en San Luis, Argentina. Fue consultor, capacitador y soporte técnico para Base de Datos y herramientas de Oracle, desde el año 2013 es miembro activo del Grupo de Usuarios Oracle de Argentina del cual es miembro del directorio desde el año 2023. Es CEO de su propia Consultora: Soft San Luis, una startup especializada en brindar formación profesional, consultoría, mentoría y soluciones con tecnología Oracle y Oracle APEX a empresas, equipos de desarrollo de consultoras y a particulares. En 2025 ha sido reconocido como Oracle ACE Pro por la Corporación Oracle por sus contribuciones a la Comunidad de Usuarios de Tecnologías de Oracle
Comentarios
Publicar un comentario