A resolução de rótulos conceituais para identificadores padronizados de bancos de dados existentes é um requisito fundamental no processo de anotação de dados biomédicos. Enquanto vários serviços de anotação, incluindo bioportal e o serviço de resolução de nomes do tradutor, estão disponíveis, a maioria deles depende de mecanismos de correspondência simples (respectivamente MGREP e SOLR). Infelizmente, esses mecanismos geralmente ficam aquém ao lidar com rótulos conceituais que exibem variações substanciais de identificadores padronizados ou ao lidar com sinônimos.
Propomos explorar o uso da pesquisa de similaridade vetorial para melhorar a precisão da resolução conceitual. Aproveitaremos o extenso conjunto de dados coletado pelo Projeto Babel, que inclui um vasto repositório de identificadores, rótulos e sinônimos do domínio biomédico (Pubchem, Chembl, Uniprot, Mondo, Omim, HGNC, DrugBank e muito mais).
Durante o hackathon da anotação vinculada biomédica, nossos principais objetivos são os seguintes:
O serviço de resolução de nome será exposto como uma API descrita em OpenAPI que toma um rótulo conceitual como entrada e retornará uma lista de entidades correspondentes, representadas por um dicionário com a pontuação e seu id curie, etiqueta, sinônimos.
| Nome | Criação | Estrelas do Github | Escrito em | Sdk for | Linguagem de consulta/API* | Implementar funções vetoriais | Comentário |
|---|---|---|---|---|---|---|---|
| QDRANT | Julho de 2020 | ~ 14K | Ferrugem | Python, js, ferrugem, go, .net | Openapi, Grpc | Cosseno, Euclid, ponto | Pode ser usado como ferramenta independente local, na memória ou persistente no disco, sem implantar um serviço da web |
| Milvus | Outubro de 2019 | ~ 24k | Ir | Python, JS, Java, vá | OpenApi ❓️ | cosseno, euclides, produto interno | aka. Zilliz Cloud |
| Chroma | Outubro de 2022 | ~ 9K | Python | Python, JS | OpenApi ❓️ | ||
| Tecelava | Março de 2016 | ~ 8k | Ir | Python, JS, Java, vá | API do GraphQL | Cosseno, Euclid | |
| PGVECTOR | Abril de 2021 | ~ 6,5k | C | Através do Postgres Sdk ❓️ | SQL | Cosseno, Euclid, Produto Interior, Taxicab | Integrado no PostgreSQL |
*Consulta Language/API Especifica qual tipo de linguagem de consulta ou API pode ser usada para consultar as informações dentro do banco de dados vetorial
Todos esses produtos são de código aberto e todos propõem uma interface da web simples para explorar o banco de dados do vetor.
A maioria deles tem uma API moderna e simples (além do PGVector, que vive no PostgreSQL)
Benchmark de referência para modelos de incorporação de texto: https://huggingface.co/blog/mteb
Robôlego: https://huggingface.co/spaces/mteb/leaderboard
Modelos de incorporação populares:
bge-large-en-v1.5text-embedding-ada-002sentence-transformers/all-MiniLM-L6-v2jina-embeddings-v2-base-enembed-english-v3.0 A ser definido.
Benchmarks existentes para bancos de dados vetoriais:
Resultados preliminares em 19/01/2024 (Sinônimos de Babel ainda não estão totalmente carregados, faltando arquivos após medicamento: gene, proteína, organismos, caminho, UMLS): a maioria dos problemas parece ser resolvida além de "rato" e "dose de ACP-044 a" (não tem tempo, mas não há resultados interessantes)
Start Services:
docker compose up -d Entre no contêiner workspace para executar os scripts de carregamento.
Faça o download dos sinônimos de Babel e carregue -os no vectordb:
make load(Experimental) Carregar pubdicionários em PGVector:
python src/pubdict_load.pylimit a partir do vectordb (se os 2 resultaram do VectordB forem do mesmo ponto, retornaremos apenas 1 resultados, que não corresponderão ao limite de 2 solicitados pelo usuário)A solução possível seria usar o Postgres e o PGVector, com 2 tabelas (uma para incorporação, uma para o conceito Infos), mas que tornaria o sistema muito mais complexo que uma loja JSON.
Existe algum vectordb auto-hospedado que possa suportar vários vetores sem nome para um único ponto? (Atualmente, o QDRANT suporta apenas vários vetores nomeados que não se encaixam no nosso caso de uso)
Introdução Apresentação: https://docs.google.com/presentation/d/1_ntmf-lthvybbvfusdxsdbeb0wm_yr_bvnnt-ivlktc/edit
Experimento dos pubdictários: https://docs.google.com/document/d/1nipvy2zhzedmf5bjcuzcbgzifn22v9kpzfo4etxl89m/edit
Conclusão Apresentação: https://docs.google.com/presentation/d/1sjeuo4oenmamtrvcawb0tzjzr9sgnyh-efwtjf99lg/edit
Artigo pré-imprimor biohackrxiv: http://preview.biohackrxiv.org/papers/bdda0f94-f526-4f35-8768-8faf62d731fa/paper.pdf
API Demo: https://concept-resolver.137.120.31.102.nip.io