Resolver etiquetas conceptuales a identificadores estandarizados de bases de datos existentes es un requisito fundamental en el proceso de anotación de datos biomédicos. Si bien están disponibles varios servicios de anotación, incluido el bioportal y el servicio de resolución de nombre del traductor, la mayoría de ellos dependen de mecanismos de correspondencia directos (respectivamente MGREP y Solr). Desafortunadamente, estos mecanismos a menudo se quedan cortos cuando se trata de etiquetas conceptuales que exhiben variaciones sustanciales de identificadores estandarizados o cuando se trata de sinónimos.
Proponemos explorar el uso de la búsqueda de similitud vectorial para mejorar la precisión de la resolución conceptual. Aprovecharemos el extenso conjunto de datos reunido por el Proyecto Traductor Babel, que incluye un vasto depósito de identificadores, etiquetas y sinónimos del dominio biomédico (Pubchem, Chembl, Uniprot, Mondo, Omim, HGNC, DrugBank y más).
Durante el hackathon de anotación vinculada biomédica, nuestros objetivos clave son los siguientes:
El servicio de resolución de nombre se expusirá como una API descrita de OpenAPI que toma una etiqueta conceptual como entrada y devuelve una lista de entidades coincidentes, representada por un diccionario con el puntaje y su ID Curie, etiqueta, sinónimos.
| Nombre | Creación | Estrellas de Github | Escrito | SDK para | Lenguaje de consulta/API* | Implementar funciones vectoriales | Comentario |
|---|---|---|---|---|---|---|---|
| Qdrant | Julio de 2020 | ~ 14k | Óxido | Python, JS, Rust, Go, .net | Openapi, GRPC | coseno, euclid, punto | Se puede utilizar como herramienta independiente local, en la memoria o persistente en el disco, sin implementar un servicio web |
| Milvus | Octubre de 2019 | ~ 24k | Ir | Python, JS, Java, Go | Openapi ❓️ | coseno, euclid, producto interno | también conocido como. Zilliz Cloud |
| Croma | Octubre de 2022 | ~ 9k | Pitón | Python, JS | Openapi ❓️ | ||
| Tejido | Marzo de 2016 | ~ 8k | Ir | Python, JS, Java, Go | API GraphQL | coseno, euclides | |
| pgvector | Abril de 2021 | ~ 6.5k | do | A través de Postgres SDK ❓️ | Sql | coseno, euclid, producto interno, taxi | Integrado en PostgreSQL |
*El lenguaje de consulta/API especifica qué tipo de lenguaje de consulta o API se puede utilizar para consultar la información dentro de la base de datos de Vector
Todos esos productos son de código abierto, y todos proponen una interfaz de usuario web simple para explorar la base de datos Vector.
La mayoría de ellos tienen una API moderna y simple (aparte de Pgvector que vive dentro de PostgreSQL)
Referencia de referencia para modelos de incrustaciones de texto: https://huggingface.co/blog/mteb
Tabla de clasificación: https://huggingface.co/spaces/mteb/leaderboard
Modelos de incrustación populares:
bge-large-en-v1.5text-embedding-ada-002sentence-transformers/all-MiniLM-L6-v2jina-embeddings-v2-base-enembed-english-v3.0 Ser definido.
Puntos de referencia existentes para bases de datos vectoriales:
Resultados preliminares en el 19/01/2024 (sinónimos de Babel aún no cargados completamente, faltantes archivos después del fármaco: gen, proteínas, organismos, vía, UML): la mayoría de los problemas parecen resolverse aparte de la "rata" y la dosis de "ACP-044 A" (no se hace tiempo de tiempo, pero no hay resultados interesantes)
Servicios de inicio:
docker compose up -d Entra en el contenedor workspace para ejecutar los scripts de carga.
Descargue los sinónimos de Babel y cargándolos en el vectordb:
make load(experimental) Carga de pubdictorios en PGVector:
python src/pubdict_load.pylimit del vectordB (si los 2 primeros resultados del vectordB son del mismo punto, entonces solo devolveremos 1 resultados, lo que no coincidirá con el límite de 2 solicitado por el usuario)La posible solución sería usar Postgres y PGVector, con 2 tablas (una para incrustaciones, una para Concept Infos), pero eso haría que el sistema sea mucho más complejo que una tienda JSON.
¿Hay algún vectordB autohospedado que pueda admitir múltiples vectores sin nombre para un solo punto? (Qdrant actualmente solo admite múltiples vectores con nombre que no se ajustan a nuestro caso de uso)
Introducción Presentación: https://docs.google.com/presentation/d/1_ntmf-lthvybbbvfusdxsdbeb0wm_yr_bvnnt-ivlktc/edit
Experimento de pubdictorios: https://docs.google.com/document/d/1nipvy2zhzedmf5bjcuzcbgzifn22v9kpzfo4etxl89m/edit
Conclusión Presentación: https://docs.google.com/presentation/d/1sjeuo4oegnmamtrvcawb0tzjzr9sgnyh-efwtjf99lg/edit
Preprint biohackrxiv Paper: http://preview.biohackrxiv.org/papers/bdda0f94-f526-4f35-8768-8faf62d731fa/paper.pdf
API de demostración: https://concept-resolver.137.120.31.102.nip.io