Skip to main content

linear-embedding-adapter

Use al afinar retrieval RAG sin re-embeddar el corpus.

跳到安装

来源信息

仓库
Ntizar/MasterMind
最近来源活动
2026年9月3日 04:09
检测到的 SKILL.md 语言
西班牙语
星标
2
分支
0

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
linear-embedding-adapter
version
1.0.0
description
Use al afinar retrieval RAG sin re-embeddar el corpus.
tags
["rag","embeddings","retrieval","triplet-loss","chromadb","fine-tuning","busqueda-semantica"]
# Linear Embedding Adapter — Mejorar retrieval sin tocar el índice > Patrón y herramienta: `SantanderAI/linear-adapter-trainer` (29⭐, Apache-2.0, > Santander AI Lab, Python 3.12+, activo — push 2026-09-01). ## Qué es Librería para **afinar retrieval sin reentrenar el modelo de embeddings**: aprende una pequeña transformación lineal aplicada a los embeddings de QUERY en tiempo de búsqueda. El índice vectorial NO se toca. | Enfoque | Coste | ¿Re-indexar? | ¿Reversible? | |---|---|---|---| | Fine-tune del embedding model | Alto (GPU, datos) | Sí | No | | **Adaptador lineal de query (esto)** | **Bajo (CPU)** | **No** | **Sí** | | Re-ranking model | Medio (latencia) | No | Sí | **Garantía clave:** la selección de modelo siempre incluye la identidad como baseline → el adaptador entrenado **nunca puede quedar peor que tus embeddings base**. ## Cuándo usarlo en Mastermind Búsqueda semántica de skills (ChromaDB + qwen3-embedding, dim 4096, NaN API): si las queries reales no recuperan el skill correcto, se puede entrenar un adaptador sobre triplets `(query real, skill-correcto, skill-incorrecto-recuperado)` acumulados de logs de `consultar-skills.py` — **sin re-embeddar los cientos de skills**. En query-time: `adapted = adapter.transform(query_vec)` antes del NN-search. ## Pipeline (2 módulos composable) ```bash pip install "linear-adapter-trainer[sentence-transformers]" # o [openai], [all] ``` **Módulo 1 — DatasetGenerator:** triplets `(query, positive, negative)` desde una base de conocimiento (JSONL chunks). Estrategias de negativos: `hard` (más similares pero incorrectos — señal más fuerte), `semantic_opposite`, `random`, `mixed` (blend). Split train/val sin leakage. Queries con `TemplateQueryGenerator` (offline) o `LLMQueryGenerator` (naturales, necesita API key). **Módulo 2 — AdapterTrainer:** matriz lineal PyTorch (inicializada en identidad), triplet loss `L = max(0, d(adapter(q), pos) − d(adapter(q), neg) + margin)` con `d` = coseno (default) o euclidea. Métricas: precision@k, recall@k, MRR, nDCG. Guarda en **safetensors** (versioned JSON metadata, sin pickle). ### Quickstart real (verificado del README 2026-09-03) ```python from linear_adapter_trainer import ( AdapterTrainer, DatasetConfig, DatasetGenerator, KnowledgeBase, TemplateQueryGenerator, TrainingConfig, LinearAdapter) from linear_adapter_trainer.embeddings import SentenceTransformerEmbedder kb = KnowledgeBase.from_jsonl("kb.jsonl") embedder = SentenceTransformerEmbedder("sentence-transformers/all-MiniLM-L6-v2") dataset = DatasetGenerator(knowledge_base=kb, embedder=embedder, query_generator=TemplateQueryGenerator(seed=0), config=DatasetConfig(queries_per_chunk=4, strategy="mixed", val_fraction=0.2)).generate() result = AdapterTrainer(kb, embedder, TrainingConfig(epochs=30)).fit(dataset) print(result.improvement) # delta por métrica vs base result.adapter.save("adapter.safetensors") # query-time: adapter = LinearAdapter.load("adapter.safetensors") adapted = adapter.transform(embedder.embed(["mi consulta"])) ``` ### CLI (todo por TOML) ```bash linear-adapter generate config.toml # dataset linear-adapter train config.toml # entrenar + métricas linear-adapter evaluate config.toml # base vs adaptado linear-adapter run config.toml # generate → train ``` Ejemplo de output real del README: `precision@1 0.52→0.71 (+0.19)`, `mrr 0.631→0.805`, `ndcg@10 0.689→0.842`. ## Pitfalls - **El demo offline (HashingEmbedder + template queries) da delta ~0 por diseño:** las queries reutilizan tokens de los chunks → baseline ya óptimo. Para ver ganancias reales hay que usar backend semántico y queries tipo LLM. NO concluir "no funciona". - Solo adapta el lado QUERY: si los chunks están mal embebidos, el adaptador no lo arregla. - 29⭐ y proyecto joven (Beta): tratar como patrón+herramienta de laboratorio, no infraestructura crítica. Python 3.12+. - Checkpoints legacy `.pt`/`.pth` se leen con `weights_only=True` (deprecados); migrar con `LinearAdapter.migrate_checkpoint(...)`. Un `.safetensors` malformed se rechaza — nunca reintenta como torch (medida anti-pickle-RCE, buena práctica a copiar). ## Verificación 1. Comparar métricas base vs adaptado en el split val (`evaluate`) — delta ≥ 0 garantizado. 2. Tras aplicar en producción: A/B manual de 5-10 queries reales contra ChromaDB con y sin `adapter.transform`. 3. Guardar el adaptador junto al índice, versionado (safetensors + metadata JSON). ## Referencias - Repo: https://github.com/SantanderAI/linear-adapter-trainer (Apache-2.0, CI + CodeQL) - Notebook demo: `examples/santander_retrieval_demo.ipynb` (scrape → chunks → triplets → train → métricas) - Explorado por stars-explorer: 2026-09-03 - Relacionados: `ia/rag-knowledge-base`, `ia/supermemory`, scripts propios `consultar-skills.py` / `indexar-skills.py`
在 GitHub 查看