การแก้ไขฉลากแนวคิดไปยังตัวระบุมาตรฐานจากฐานข้อมูลที่มีอยู่เป็นข้อกำหนดพื้นฐานในกระบวนการของการใส่คำอธิบายประกอบข้อมูลชีวการแพทย์ ในขณะที่บริการคำอธิบายประกอบหลายรายการรวมถึง Bioportal และบริการความละเอียดของชื่อนักแปลมีให้บริการส่วนใหญ่อาศัยกลไกการจับคู่ตรงไปตรงมา (ตามลำดับ MGREP และ SOLR) น่าเสียดายที่กลไกเหล่านี้มักจะสั้นเมื่อต้องรับมือกับฉลากแนวคิดที่แสดงการเปลี่ยนแปลงที่สำคัญจากตัวระบุมาตรฐานหรือเมื่อต้องรับมือกับคำพ้องความหมาย
เราเสนอให้สำรวจการใช้การค้นหาความคล้ายคลึงกันของเวกเตอร์เพื่อปรับปรุงความแม่นยำของการแก้ไขแนวคิด เราจะใช้ประโยชน์จากชุดข้อมูลที่ครอบคลุมโดยโครงการนักแปล Babel ซึ่งรวมถึงที่เก็บข้อมูลที่กว้างใหญ่ของตัวระบุฉลากและคำพ้องความหมายจากโดเมนชีวการแพทย์ (PubChem, Chembl, Uniprot, Mondo, Omim, HGNC, DrugBank และอื่น ๆ )
ในระหว่างการเชื่อมโยงคำอธิบายประกอบชีวการแพทย์ที่เชื่อมโยงกันวัตถุประสงค์หลักของเรามีดังนี้:
บริการความละเอียดของชื่อจะถูกเปิดเผยเป็น API ที่กำหนดโดย OpenAPI ซึ่งใช้ฉลากแนวคิดเป็นอินพุตและส่งคืนรายการเอนทิตีที่ตรงกันแสดงโดยพจนานุกรมที่มีคะแนนและรหัส Curie, Label, คำพ้องความหมาย
| ชื่อ | การสร้าง | GitHub Stars | เขียนใน | SDK สำหรับ | สอบถามภาษา/API* | ใช้ฟังก์ชั่นเวกเตอร์ | การแสดงความคิดเห็น |
|---|---|---|---|---|---|---|---|
| qdrant | กรกฎาคม 2563 | ~ 14K | สนิม | Python, JS, Rust, Go, .net | openapi, grpc | Cosine, Euclid, dot | สามารถใช้เป็นเครื่องมือแบบสแตนด์อโลนท้องถิ่นในหน่วยความจำหรือถาวรบนดิสก์โดยไม่ต้องปรับใช้บริการเว็บ |
| Milvus | ตุลาคม 2562 | ~ 24K | ไป | Python, JS, Java, ไป | Openapi ❓ | Cosine, Euclid, ผลิตภัณฑ์ภายใน | aka. ซิลลิซคลาวด์ |
| โครมา | ตุลาคม 2565 | ~ 9K | งูหลาม | Python, JS | Openapi ❓ | ||
| ทอผ้า | มีนาคม 2559 | ~ 8K | ไป | Python, JS, Java, ไป | graphql api | โคไซน์ | |
| pgvector | เมษายน 2564 | ~ 6.5k | C | ผ่าน Postgres SDK ❓ | SQL | Cosine, Euclid, ผลิตภัณฑ์ภายใน, Taxicab | รวมอยู่ใน postgreSQL |
*ภาษาคิวรี/API ระบุประเภทของภาษาคิวรีหรือ API ที่สามารถใช้ในการสืบค้นข้อมูลภายในฐานข้อมูลเวกเตอร์
ผลิตภัณฑ์ทั้งหมดเหล่านั้นเป็นโอเพ่นซอร์สและพวกเขาทั้งหมดเสนอเว็บ UI อย่างง่ายเพื่อสำรวจฐานข้อมูลเวกเตอร์
ส่วนใหญ่มี API ที่ทันสมัยและเรียบง่าย (นอกเหนือจาก PGVector ซึ่งอาศัยอยู่ภายใน PostgreSQL)
เกณฑ์มาตรฐานอ้างอิงสำหรับรุ่น Embeddings: https://huggingface.co/blog/mteb
laderboard: https://huggingface.co/spaces/mteb/leaderboard
โมเดลการฝังที่ได้รับความนิยม:
bge-large-en-v1.5text-embedding-ada-002sentence-transformers/all-MiniLM-L6-v2jina-embeddings-v2-base-enembed-english-v3.0 ที่จะกำหนด
เกณฑ์มาตรฐานที่มีอยู่สำหรับฐานข้อมูลเวกเตอร์:
ผลลัพธ์เบื้องต้นเกี่ยวกับ 19/01/2024 (คำพ้องความหมายของบาเบลยังไม่ได้โหลดอย่างสมบูรณ์, ไฟล์ที่หายไปหลังจากยาเสพติด: ยีน, โปรตีน, สิ่งมีชีวิต, ทางเดิน, UMLS): ปัญหาส่วนใหญ่ดูเหมือนจะได้รับการแก้ไขนอกเหนือจาก "หนู" และ "ACP-044 ปริมาณ A" (ไม่หมดเวลา แต่ไม่มีผลลัพธ์ที่น่าสนใจ)
เริ่มบริการ:
docker compose up -d เข้าไปในคอนเทนเนอร์ workspace เพื่อเรียกใช้สคริปต์การโหลด
ดาวน์โหลดคำพ้องความหมายของ Babel และโหลดใน Vectordb:
make load(ทดลอง) โหลด PubDictionaries ใน PGVector:
python src/pubdict_load.pylimit อย่างถูกต้องจาก vectordb (หากผลลัพธ์ 2 ครั้งแรกจาก vectordb มาจากจุดเดียวกันเราจะส่งคืนผลลัพธ์เพียง 1 ผลลัพธ์ซึ่งจะไม่ตรงกับขีด จำกัด ของ 2 ที่ผู้ใช้ถาม)วิธีแก้ปัญหาที่เป็นไปได้คือการใช้ postgres และ pgvector โดยมี 2 ตาราง (หนึ่งสำหรับ Embeddings หนึ่งอันสำหรับ Concept Infos) แต่นั่นจะทำให้ระบบมีความซับซ้อนมากกว่าร้าน JSON
มี vectordb โฮสต์ตัวเองที่สามารถรองรับเวกเตอร์ที่ไม่มีชื่อหลายตัวสำหรับจุดเดียวหรือไม่? (ปัจจุบัน QDrant รองรับเวกเตอร์ชื่อหลายตัวเท่านั้นซึ่งไม่เหมาะกับกรณีการใช้งานของเรา)
บทนำการนำเสนอ: https://docs.google.com/presentation/d/1_ntmf-lthvybbvfusdxsdbeb0wm_yr_bvnnt-ivlktc/edit
PubDictionaries Experiment: https://docs.google.com/document/d/1nipvy2zhzedmf5bjcuzcbgzifn222v9kpzfo4etxl89m/edit
บทสรุปการนำเสนอ: https://docs.google.com/presentation/d/1sjeuo4oegnmamtrvcawb0tzjzr9sgnyh-efwtjf99lg/edit
preprint biohackrxiv กระดาษ: http://preview.biohackrxiv.org/papers/bdda0f94-f526-4f35-8768-8faf62d731fa/papaper.pdf
Demo API: https://concept-resolver.137.120.31.102.nip.io