기존 데이터베이스에서 표준화 된 식별자로 개념 레이블을 해결하는 것은 생체 의학 데이터 주석을 달성하는 과정에서 기본 요구 사항입니다. Bioportal 및 Translator Name Resolution Service를 포함한 여러 주석 서비스는 이용 가능하지만 대부분은 간단한 매칭 메커니즘 (각각 MGREP 및 SOLR)에 의존합니다. 불행히도, 이러한 메커니즘은 표준화 된 식별자의 상당한 변형을 나타내는 개념 레이블을 다룰 때 또는 동의어를 다룰 때 종종 부족합니다.
우리는 개념 해상도의 정확성을 향상시키기 위해 벡터 유사성 검색의 사용을 탐색 할 것을 제안합니다. Biomedical Domain (Pubchem, Chembl, Uniprot, Mondo, Omim, HGNC, Drugbank 등)의 방대한 식별자, 레이블 및 동의어 리포지토리, 레이블 및 동의어가 포함 된 번역기 Babel Project에서 수집 한 광범위한 데이터 세트를 활용할 것입니다.
생의학 연결된 주석 해커 톤 동안, 우리의 주요 목표는 다음과 같습니다.
Name Resolution Service는 개념 레이블을 입력으로 취하는 OpenApi가 설명한 API로 노출되며, 점수와 ID 퀴리, 레이블, 동의어가있는 사전으로 표시되는 일치 엔티티 목록을 반환합니다.
| 이름 | 창조 | Github 스타 | 작성 | SDK | 쿼리 언어/API* | 벡터 함수를 구현합니다 | 논평 |
|---|---|---|---|---|---|---|---|
| qdrant | 2020 년 7 월 | ~ 14K | 녹 | Python, JS, Rust, Go, .NET | OpenApi, Grpc | 코사인, 유클리드, 도트 | 웹 서비스를 배포하지 않고 로컬 독립형 도구, 메모리 또는 디스크에서 영구적으로 사용할 수 있습니다. |
| 밀버 | 2019 년 10 월 | ~ 24K | 가다 | Python, JS, Java, Go | OpenApi .️ | 코사인, 유클리드, 내부 제품 | 일명. Zilliz Cloud |
| 크로마 | 2022 년 10 월 | ~ 9k | 파이썬 | 파이썬, JS | OpenApi .️ | ||
| 직조 | 2016 년 3 월 | ~ 8k | 가다 | Python, JS, Java, Go | GraphQL API | 코사인, 유클리드 | |
| pgvector | 2021 년 4 월 | ~ 6.5k | 기음 | Postgres SDK ❓️을 통해 | SQL | 코사인, 유클리드, 내부 제품, 택시 | PostgreSQL에 통합 |
*Query Language/API는 벡터 데이터베이스 내부의 정보를 쿼리하는 데 어떤 유형의 쿼리 언어 또는 API를 지정합니다.
이러한 모든 제품은 오픈 소스이며 벡터 데이터베이스를 탐색하기 위해 간단한 웹 UI를 제안합니다.
그들 대부분은 현대적이고 간단한 API를 가지고 있습니다 (PostgreSQL 내에 사는 pgvector를 제외하고)
텍스트 임베딩 모델에 대한 참조 벤치 마크 : https://huggingface.co/blog/mteb
리더 보드 : 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(실험) PGVECTOR의 부하 PubDictionaries :
python src/pubdict_load.pylimit 기능을 올바르게 사용하지 못하게합니다 (VectordB의 첫 번째 결과가 같은 시점에서 나온 경우 1 개의 결과 만 반환하면 사용자가 요청한 2의 한계와 일치하지 않습니다).가능한 솔루션은 2 개의 테이블 (임베딩 용, 컨셉트 인포를위한 하나)와 함께 Postgres 및 PGVector를 사용하는 것입니다.
단일 지점에 대해 여러 개의 이름없는 벡터를 지원할 수있는 자체 주최 vectordB가 있습니까? (Qdrant는 현재 사용 사례에 맞지 않는 다중 이름의 벡터 만 지원합니다)
소개 프레젠테이션 : https://docs.google.com/presentation/d/1_ntmf-lthvybbvfusdxsdbeb0wm_yr_bvnnt-ivlktc/edit
PubDictionaries 실험 : https://docs.google.com/document/d/1nipvy2zhzedmf5bjcuzcbgzifn2v9kpzfo4etxl89m/edit
결론 프레젠테이션 : https://docs.google.com/presentation/d/1sjeuo4oegnmamtrvcawb0tzjzr9sgnyh-efwtjf99lg/edit
Preprint Biohackrxiv 논문 : http://preview.biohackrxiv.org/papers/bdda0f94-f526-4f35-8768-8faf62d731fa/paper.pdf
데모 API : https://concept-resolver.137.120.31.102.nip.io