Como modelar documentos para o Vector Atlas Search para melhorar os recursos de query
Avalie esse Tutorial
O Atlas Vector Search foi lançado recentemente, então vamos nos aprofundar em um tutorial sobre como modelar adequadamente seus documentos ao utilizar a pesquisa vetorial para revolucionar seus recursos de consulta!
A pesquisa vetorial é nova, então vamos primeiro analisar as maneiras básicas de modelar seus dados em um documento do MongoDB antes de ver como incorporar incorporações vetoriais.
A modelagem de dados no MongoDB gira em torno da organização de seus dados em documentos dentro de várias coleções. Projetos ou organizações variadas exigem diferentes maneiras de estruturar modelos de dados devido ao fato de que a modelagem de dados bem-sucedida depende dos requisitos específicos de cada aplicativo e, na maioria das vezes, nenhum design de documento pode ser aplicado para cada situação. Alguns pontos em comum, porém, podem guiar o usuário. Estes são:
- Escolher se deseja incorporar ou referenciar seus dados relacionados.
- Usando arrays em um documento.
- Indexação de documentos (localização de campos usados com frequência e aplicação da indexação apropriada etc.).
Para obter uma explicação mais detalhada e um guia abrangente sobre modelagem de dados com o MongoDB, consulte nosso artigo sobre modelagem de dados.
Construiremos nosso exemplo de incorporação vetorial usando um documento do MongoDB para nossa série de TV MongoDB. Aqui, temos um único documento do MongoDB para representar nosso programa de TV MongoDB, sem nenhuma incorporação. Temos uma array aninhada com nossa array de temporadas e, dentro dela, nossa array de episódios diferentes. Dessa forma, em nosso documento, podemos ver exatamente de qual temporada cada episódio faz parte, junto com o número, o título, a descrição e a data do episódio:
1 { 2 "_id": ObjectId("238478293"), 3 "title": "MongoDB TV", 4 "description": "All your MongoDB updates, news, videos, and podcast episodes, straight to you!", 5 "genre": ["Programming", "Database", "MongoDB"], 6 "seasons": [ 7 { 8 "seasonNumber": 1, 9 "episodes": [ 10 { 11 "episodeNumber": 1, 12 "title": "EASY: Build Generative AI Applications", 13 "description": "Join Jesse Hall….", 14 "date": ISODate("Oct52023") 15 }, 16 { 17 "episodeNumber": 2, 18 "title": "RAG Architecture & MongoDB: The Future of Generative AI Apps", 19 "description": "Join Prakul Agarwal…", 20 "date": ISODate("Oct42023") 21 } 22 ] 23 }, 24 { 25 "seasonNumber": 2, 26 "episodes": [ 27 { 28 "episodeNumber": 1, 29 "title": "Cloud Connect - Harness the Power of AI/ML and Generative AI on AWS with MongoDB Atlas", 30 "description": "Join Igor Alekseev….", 31 "date": ISODate("Oct32023") 32 }, 33 { 34 "episodeNumber": 2, 35 "title": "The Index: Here’s what you missed last week…", 36 "description": "Join Megan Grant…", 37 "date": ISODate("Oct22023") 38 } 39 ] 40 } 41 ] 42 }
Agora que temos nosso exemplo configurado, vamos executar incorporações vetoriais e discutir as técnicas adequadas para prepará-lo para o sucesso.
Primeiro, vamos entender exatamente o que é a pesquisa vetorial: a pesquisa vetorial é a forma de pesquisar com base no significado e não em palavras específicas. Isso é útil ao fazer consultas usando semelhanças em vez de pesquisar com base em palavras-chave. Ao usar a pesquisa vetorial, você pode consultar usando uma pergunta ou frase em vez de apenas uma palavra. Resumindo, a pesquisa vetorial é ótima para quando você não consegue pensar exatamente naquele livro ou filme, mas se lembra da trama ou do clímax.
Esse processo acontece quando texto, vídeo ou áudio são transformados em vetores por meio de um codificador. Com o MongoDB, podemos fazer isso usando OpenAI, Hugging Face ou outros modelos de processamento de linguagem natural. Assim que tivermos nossos vetores, podemos carregá-los na base do nosso documento e realizar a pesquisa vetorial utilizando-os. Tenha em mente as limitações atuais da pesquisa vetorial e como incorporar corretamente seus vetores.
Você pode armazenar suas incorporações vetoriais junto com outros dados em seu documento ou armazená-las em uma nova coleção. Depende realmente do usuário e dos objetivos do projeto. Vamos ver como um documento com incorporações vetoriais pode ficar quando você os incorpora a seu modelo de dados, usando o mesmo exemplo acima:
1 { 2 "_id": ObjectId("238478293"), 3 "title": "MongoDB TV", 4 "description": "All your MongoDB updates, news, videos, and podcast episodes, straight to you!", 5 "genre": ["Programming", "Database", "MongoDB"], 6 “vectorEmbeddings”: [ 0.25, 0.5, 0.75, 0.1, 0.1, 0.8, 0.2, 0.6, 0.6, 0.4, 0.9, 0.3, 0.2, 0.7, 0.5, 0.8, 0.1, 0.8, 0.2, 0.6 ], 7 "seasons": [ 8 { 9 "seasonNumber": 1, 10 "episodes": [ 11 { 12 "episodeNumber": 1, 13 "title": "EASY: Build Generative AI Applications", 14 "description": "Join Jesse Hall….", 15 "date": ISODate("Oct 5, 2023") 16 17 }, 18 { 19 "episodeNumber": 2, 20 "title": "RAG Architecture & MongoDB: The Future of Generative AI Apps", 21 "description": "Join Prakul Agarwal…", 22 "date": ISODate("Oct 4, 2023") 23 } 24 ] 25 }, 26 { 27 "seasonNumber": 2, 28 "episodes": [ 29 { 30 "episodeNumber": 1, 31 "title": "Cloud Connect - Harness the Power of AI/ML and Generative AI on AWS with MongoDB Atlas", 32 "description": "Join Igor Alekseev….", 33 "date": ISODate("Oct 3, 2023") 34 }, 35 { 36 "episodeNumber": 2, 37 "title": "The Index: Here’s what you missed last week…", 38 "description": "Join Megan Grant…", 39 "date": ISODate("Oct 2, 2023") 40 } 41 ] 42 } 43 ] 44 }
Aqui, você tem seus embeddings vetoriais classificados na base do seu documento. Atualmente, há uma limitação em que os embeddings de vetores não podem ser aninhados em uma matriz no seu documento. Certifique-se de que seu documento tenha seus embeddings na base. Existem vários tutoriais em nosso Centro de Desenvolvedores, juntamente com nossa conta no YouTube e nossa documentação, que podem ajudá-lo a descobrir como incorporar esses vetores em seu documento e como adquirir os vetores necessários em primeiro lugar.
Ao usar a pesquisa vetorial, é necessário criar um índice de pesquisa para que você possa ter sucesso com a pesquisa semântica. Para fazer isso, consulte nossa documentação sobre pesquisa vetorial. Este é o código esqueleto fornecido pela nossa documentação:
1 { 2 "fields":[ 3 { 4 "type": "vector", 5 "path": "<field-to-index>", 6 "numDimensions": <number-of-dimensions>, 7 "similarity": "euclidean | cosine | dotProduct" 8 }, 9 { 10 "type": "filter", 11 "path": "<field-to-index>" 12 }, 13 ... 14 ] 15 }
Ao configurar seu índice de pesquisa, você deseja alterar o “" para ser seu caminho vetorial. No nosso caso, seria "vectorEmbeddings". "type" pode ficar como está. Para “numDimensions”, corresponda às dimensões do modelo escolhido. Este é apenas o número de dimensões vetoriais, e o valor não pode ser maior do que 4096. Essa limitação vem do modelo de incorporação base que está sendo usado, portanto, verifique se está usando um LLM (grande modelos de linguagem) compatível, como OpenAI ou Hugging Face. Ao usar um desses, não haverá nenhum problema com as dimensões vetoriais. Para "similarity", escolha qual função vetorial você deseja usar para pesquisar os principais vizinhos K mais próximos.
Quando estiver pronto para consultar e encontrar resultados de seus documentos incorporados, é hora de criar um pipeline de agregação em seus dados vetoriais incorporados. Para fazer isso, você pode usar o operador “$vectorSearch”, que é um novo estágio de agregação no Atlas. Ele ajuda a executar uma query de vizinho mais próximo aproximado.
Para obter mais informações sobre esta etapa, confira o tutorial no Centro de Desenvolvedores sobre como criar aplicativos de IA generativa e nosso vídeo no Youtube sobre pesquisar vetorial.