Mejoras: NER, embeddings, dashboard, docker-compose y limpieza
This commit is contained in:
parent
6c5aff9936
commit
d508dc2058
19 changed files with 2218 additions and 1185 deletions
81
init-db/08-embeddings.sql
Normal file
81
init-db/08-embeddings.sql
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
-- init-db/08-embeddings.sql
|
||||
-- ============================================================
|
||||
-- Esquema para embeddings y relaciones semánticas entre noticias
|
||||
-- Compatible con embeddings_worker.py (usa traduccion_embeddings)
|
||||
-- y mantiene una vista "embeddings" para compatibilidad previa.
|
||||
-- ============================================================
|
||||
|
||||
-- Tabla principal de embeddings por traducción (con modelo)
|
||||
CREATE TABLE IF NOT EXISTS traduccion_embeddings (
|
||||
id SERIAL PRIMARY KEY,
|
||||
traduccion_id INT NOT NULL REFERENCES traducciones(id) ON DELETE CASCADE,
|
||||
model TEXT NOT NULL,
|
||||
dim INT NOT NULL,
|
||||
embedding DOUBLE PRECISION[] NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
UNIQUE (traduccion_id, model)
|
||||
);
|
||||
|
||||
-- Índices recomendados
|
||||
CREATE INDEX IF NOT EXISTS idx_tr_emb_traduccion_id ON traduccion_embeddings(traduccion_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tr_emb_model ON traduccion_embeddings(model);
|
||||
|
||||
-- -----------------------------------------------------------------
|
||||
-- Vista de compatibilidad "embeddings"
|
||||
-- (emula tu antigua tabla con columnas: traduccion_id, dim, vec)
|
||||
-- Ajusta el valor del WHERE model = '...' si usas otro modelo.
|
||||
-- -----------------------------------------------------------------
|
||||
DO $$
|
||||
BEGIN
|
||||
-- Si ya existe una tabla llamada embeddings, la renombramos a embeddings_legacy para evitar conflicto
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.tables
|
||||
WHERE table_schema = 'public' AND table_name = 'embeddings'
|
||||
) THEN
|
||||
EXECUTE 'ALTER TABLE embeddings RENAME TO embeddings_legacy';
|
||||
END IF;
|
||||
EXCEPTION WHEN others THEN
|
||||
-- No bloqueamos la migración por esto
|
||||
NULL;
|
||||
END$$;
|
||||
|
||||
-- Crea/actualiza la vista
|
||||
CREATE OR REPLACE VIEW embeddings AS
|
||||
SELECT
|
||||
te.traduccion_id,
|
||||
te.dim,
|
||||
te.embedding AS vec
|
||||
FROM traduccion_embeddings te
|
||||
WHERE te.model = 'sentence-transformers/all-MiniLM-L6-v2';
|
||||
|
||||
-- Nota:
|
||||
-- Si quieres que la vista siempre coja el embedding más reciente de CUALQUIER modelo:
|
||||
-- REEMPLAZA el WHERE anterior por:
|
||||
-- WHERE te.id IN (
|
||||
-- SELECT DISTINCT ON (traduccion_id) id
|
||||
-- FROM traduccion_embeddings
|
||||
-- ORDER BY traduccion_id, created_at DESC
|
||||
-- );
|
||||
|
||||
-- -----------------------------------------------------------------
|
||||
-- Relaciones semánticas entre traducciones (opcional)
|
||||
-- Esta tabla no la usa el worker directamente, pero permite cachear
|
||||
-- "noticias relacionadas" precalculadas por otro proceso/batch.
|
||||
-- -----------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS related_noticias (
|
||||
traduccion_id INT NOT NULL REFERENCES traducciones(id) ON DELETE CASCADE,
|
||||
related_traduccion_id INT NOT NULL REFERENCES traducciones(id) ON DELETE CASCADE,
|
||||
score DOUBLE PRECISION NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
PRIMARY KEY (traduccion_id, related_traduccion_id),
|
||||
CHECK (traduccion_id <> related_traduccion_id)
|
||||
);
|
||||
|
||||
-- Índices para acelerar consultas en ambos sentidos
|
||||
CREATE INDEX IF NOT EXISTS idx_related_by_tr ON related_noticias (traduccion_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_related_by_relatedtr ON related_noticias (related_traduccion_id);
|
||||
|
||||
-- Sugerencias:
|
||||
-- - Si pretendes recalcular periódicamente, podrías limpiar por ventana temporal:
|
||||
-- DELETE FROM related_noticias WHERE created_at < NOW() - INTERVAL '7 days';
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue