Das Auflösen von Konzeptbezeichnungen für standardisierte Identifikatoren aus vorhandenen Datenbanken ist eine grundlegende Voraussetzung für den Prozess der Annotierung biomedizinischer Daten. Während mehrere Annotationsdienste, einschließlich Bioportal- und Übersetzer -Namensauflösungsdienst, verfügbar sind, stützen sich die meisten von ihnen auf einfache Matching -Mechanismen (jeweils MGREP bzw. Solr). Leider sind diese Mechanismen häufig zu kurz, wenn es sich um Konzeptbezeichnungen handelt, die wesentliche Abweichungen von standardisierten Kennungen oder beim Umgang mit Synonymen aufweisen.
Wir schlagen vor, die Verwendung der Vektor -Ähnlichkeitssuche zu untersuchen, um die Genauigkeit der Konzeptauflösung zu verbessern. Wir werden den umfangreichen Datensatz nutzen, der vom Übersetzer Babel -Projekt gesammelt wurde, das ein riesiges Repository von Kennungen, Etiketten und Synonymen aus dem biomedizinischen Bereich enthält (Pubchem, Chembl, UniProt, Mondo, Omim, HGNC, Drugbank und mehr).
Während des biomedizinischen verknüpften Annotation -Hackathons sind unsere Hauptziele wie folgt:
Der Namensauflösungsdienst wird als eine von OpenAPI beschriebene API freigelegt, die ein Konzeptetikett als Eingabe nimmt und eine Liste der passenden Einheiten zurückgibt, die durch ein Wörterbuch mit der Punktzahl und deren ID-Curie-Etikett Synonyme dargestellt werden.
| Name | Schaffung | Github Sterne | Geschrieben in | SDK für | Abfragesprache/API* | Vektorfunktionen implementieren | Kommentar |
|---|---|---|---|---|---|---|---|
| Qdrant | Juli 2020 | ~ 14k | Rost | Python, JS, Rost, Go, .net | OpenAPI, GRPC | Cosinus, Euklid, Punkt | Kann als lokales eigenständiges Tool verwendet werden, im Speicher oder als dauerhaft auf der Festplatte, ohne einen Webdienst bereitzustellen |
| Milvus | Oktober 2019 | ~ 24k | Gehen | Python, JS, Java, Go | OpenAPI ❓️ | Cosinus, Euklid, inneres Produkt | AKA. Zilliz Cloud |
| Chroma | Oktober 2022 | ~ 9k | Python | Python, JS | OpenAPI ❓️ | ||
| Waviate | März 2016 | ~ 8k | Gehen | Python, JS, Java, Go | GraphQL API | Cosinus, Euklid | |
| pgVector | April 2021 | ~ 6,5K | C | Durch Postgres SDK ❓️ | Sql | Cosinus, Euklid, inneres Produkt, Taxi | In postgresql integriert |
*Abfragelicht/API Gibt an, welche Art von Abfragesprache oder API verwendet werden kann, um die Informationen in der Vektor -Datenbank abzufragen
Alle diese Produkte sind Open Source, und alle schlagen eine einfache Web -Benutzeroberfläche vor, um die Vektordatenbank zu untersuchen.
Die meisten von ihnen haben eine moderne und einfache API (abgesehen von PGVector, die in Postgresql lebt)
Referenz -Benchmark für Texteinbettungsmodelle: https://huggingface.co/blog/mteb
Rangliste: https://huggingface.co/spaces/mteb/leaderboard
Beliebte Einbettungsmodelle:
bge-large-en-v1.5text-embedding-ada-002sentence-transformers/all-MiniLM-L6-v2jina-embeddings-v2-base-enembed-english-v3.0 Definiert werden.
Bestehende Benchmarks für Vektordatenbanken:
Vorläufige Ergebnisse am 19.01.2024 (Babel-Synonyme, noch nicht vollständig beladen, fehlende Dateien nach Drogen: Gen, Protein, Organismen, Pfad, UMLS): Die meisten Probleme scheinen abgesehen von "Ratten" und "ACP-044-Dosis a" zu gelöst zu werden, aber keine interessanten Ergebnisse), aber keine interessanten Ergebnisse).
Dienste starten:
docker compose up -d Gehen Sie in den workspace Container, um die Ladeskripte auszuführen.
Laden Sie die Babel -Synonyme herunter und laden Sie sie im VectordB:
make load(experimentelle) Lastpubdictionaries in PGVector:
python src/pubdict_load.pylimit ordnungsgemäß aus dem VectordB verwenden (wenn die beiden ersten Ergebnisse aus dem VectordB aus demselben Punkt stammen, werden wir nur 1 Ergebnisse zurückgeben, was nicht mit der vom Benutzer gefragten Grenze übereinstimmt.Mögliche Lösung wäre, Postgres und PGVector mit 2 Tabellen (eine für Einbettungen, eine für Konzept -Infos) zu verwenden, das das System jedoch viel komplexer machen würde als ein JSON -Store.
Gibt es selbst gehostete Vektordb, die mehrere unbenannte Vektoren für einen einzelnen Punkt unterstützen können? (QDRANT unterstützt derzeit nur mehrere benannte Vektoren, die nicht zu unserem Anwendungsfall entsprechen.)
Einführungspräsentation: https://docs.google.com/presentation/d/1_ntmf-lthvybvfusdxsdbeb0wm_yr_bvnnt-ivlktc/edit
PubDictionaries Experiment: https://docs.google.com/document/d/1nipvy2zhzedmf5bjcuzcbgifn22v9kpzfo4etxl89m/edit
Fazit Präsentation: https://docs.google.com/presentation/d/1sjeuo4oEegnmamtrvcawb0tzjzr9sgnyh-efwtjf99lg/edit
Preprint biohackrxiv Papier: http://preview.biohackrxiv.org/papers/bdda0f94-f526-4f35-8768-8faf62d731fa/paper.pdf
Demo-API: https://concept-resolver.137.120.31.102.nip.io