Clique na imagem acima para ver o vídeo desta lição
Os LLMs vão além dos chatbots e da geração de texto. Também é possível construir aplicações de pesquisa usando Embeddings. Embeddings são representações numéricas de dados, também conhecidas como vetores, e podem ser usadas para pesquisa semântica de dados.
Nesta lição, vais construir uma aplicação de pesquisa para a nossa startup de educação. A nossa startup é uma organização sem fins lucrativos que oferece educação gratuita a estudantes em países em desenvolvimento. A nossa startup tem um grande número de vídeos no YouTube que os estudantes podem usar para aprender sobre IA. Queremos construir uma aplicação de pesquisa que permita aos estudantes procurar um vídeo do YouTube ao escrever uma pergunta.
Por exemplo, um estudante pode escrever "O que são Jupyter Notebooks?" ou "O que é Azure ML" e a aplicação de pesquisa irá devolver uma lista de vídeos do YouTube relevantes para a pergunta e, melhor ainda, a aplicação irá devolver um link para o ponto do vídeo onde a resposta à pergunta está localizada.
Nesta lição, vamos abordar:
- Pesquisa semântica vs pesquisa por palavras-chave.
- O que são Text Embeddings.
- Criar um Índice de Text Embeddings.
- Pesquisar num Índice de Text Embeddings.
Após completar esta lição, serás capaz de:
- Diferenciar pesquisa semântica de pesquisa por palavras-chave.
- Explicar o que são Text Embeddings.
- Criar uma aplicação usando Embeddings para pesquisar dados.
Criar uma aplicação de pesquisa vai ajudar-te a entender como usar Embeddings para pesquisar dados. Também vais aprender a construir uma aplicação de pesquisa que pode ser usada por estudantes para encontrar informação rapidamente.
A lição inclui um Índice de Embeddings das transcrições do YouTube do canal Microsoft AI Show. O AI Show é um canal do YouTube que ensina sobre IA e machine learning. O Índice de Embeddings contém os Embeddings para cada uma das transcrições do YouTube até outubro de 2023. Vais usar este Índice para construir a aplicação de pesquisa para a nossa startup. A aplicação de pesquisa devolve um link para o ponto do vídeo onde a resposta à pergunta está localizada. Esta é uma ótima forma para os estudantes encontrarem rapidamente a informação que precisam.
Segue um exemplo de uma consulta semântica para a pergunta "posso usar rstudio com azure ml?". Repara na URL do YouTube, vais ver que contém um timestamp que te leva ao ponto do vídeo onde a resposta está.
Agora deves estar a perguntar, o que é pesquisa semântica? Pesquisa semântica é uma técnica de pesquisa que usa a semântica, ou o significado, das palavras numa consulta para devolver resultados relevantes.
Aqui está um exemplo de pesquisa semântica. Imagina que queres comprar um carro, podes pesquisar por "o meu carro de sonho". A pesquisa semântica entende que não estás a sonhar com um carro, mas sim que procuras o teu carro ideal. A pesquisa semântica percebe a tua intenção e devolve resultados relevantes. A alternativa é a pesquisa por palavras-chave que procuraria literalmente por sonhos com carros e muitas vezes devolve resultados irrelevantes.
Text embeddings são uma técnica de representação de texto usada em processamento de linguagem natural. Text embeddings são representações numéricas semânticas do texto. Embeddings são usados para representar dados de uma forma que é fácil para uma máquina entender. Existem muitos modelos para criar text embeddings, nesta lição vamos focar-nos em gerar embeddings usando o Modelo de Embeddings da OpenAI.
Aqui está um exemplo, imagina que o seguinte texto está numa transcrição de um dos episódios do canal AI Show no YouTube:
Today we are going to learn about Azure Machine Learning.
Passaríamos o texto para a API de Embeddings da OpenAI e ela devolveria o seguinte embedding composto por 1536 números, também conhecido como vetor. Cada número no vetor representa um aspeto diferente do texto. Para simplificar, aqui estão os primeiros 10 números do vetor.
[-0.006655829958617687, 0.0026128944009542465, 0.008792596869170666, -0.02446001023054123, -0.008540431968867779, 0.022071078419685364, -0.010703742504119873, 0.003311325330287218, -0.011632772162556648, -0.02187200076878071, ...]O índice de Embeddings para esta lição foi criado com uma série de scripts em Python. Vais encontrar os scripts juntamente com as instruções no README na pasta 'scripts' desta lição. Não precisas de executar estes scripts para completar a lição, pois o Índice de Embeddings é fornecido.
Os scripts realizam as seguintes operações:
- A transcrição de cada vídeo do YouTube na playlist AI Show é descarregada.
- Usando OpenAI Functions, tenta-se extrair o nome do orador dos primeiros 3 minutos da transcrição do YouTube. O nome do orador para cada vídeo é armazenado no Índice de Embeddings chamado
embedding_index_3m.json. - O texto da transcrição é depois dividido em segmentos de texto de 3 minutos. O segmento inclui cerca de 20 palavras sobrepostas do segmento seguinte para garantir que o Embedding do segmento não é cortado e para fornecer melhor contexto de pesquisa.
- Cada segmento de texto é passado para a API Chat da OpenAI para resumir o texto em 60 palavras. O resumo também é armazenado no Índice de Embeddings
embedding_index_3m.json. - Finalmente, o texto do segmento é passado para a API de Embeddings da OpenAI. A API de Embeddings devolve um vetor de 1536 números que representam o significado semântico do segmento. O segmento juntamente com o vetor de Embeddings da OpenAI é armazenado no Índice de Embeddings
embedding_index_3m.json.
Para simplificar a lição, o Índice de Embeddings está armazenado num ficheiro JSON chamado embedding_index_3m.json e carregado num DataFrame do Pandas. No entanto, em produção, o Índice de Embeddings seria armazenado numa base de dados vetorial como Azure Cognitive Search, Redis, Pinecone, Weaviate, entre outras.
Já aprendemos sobre text embeddings, o próximo passo é aprender a usar text embeddings para pesquisar dados e, em particular, encontrar os embeddings mais semelhantes a uma dada consulta usando similaridade do cosseno.
Similaridade do cosseno é uma medida de semelhança entre dois vetores, também conhecida como pesquisa do vizinho mais próximo. Para realizar uma pesquisa por similaridade do cosseno, precisas de vetorizar o texto da consulta usando a API de Embeddings da OpenAI. Depois calculas a similaridade do cosseno entre o vetor da consulta e cada vetor no Índice de Embeddings. Lembra-te, o Índice de Embeddings tem um vetor para cada segmento de texto da transcrição do YouTube. Por fim, ordena os resultados pela similaridade do cosseno e os segmentos de texto com maior similaridade são os mais semelhantes à consulta.
Do ponto de vista matemático, a similaridade do cosseno mede o cosseno do ângulo entre dois vetores projetados num espaço multidimensional. Esta medida é útil porque, se dois documentos estiverem distantes pela distância Euclidiana devido ao tamanho, ainda podem ter um ângulo menor entre eles e, portanto, uma maior similaridade do cosseno. Para mais informações sobre as equações da similaridade do cosseno, vê Similaridade do cosseno.
A seguir, vamos aprender a construir uma aplicação de pesquisa usando Embeddings. A aplicação permitirá que os estudantes procurem um vídeo ao escrever uma pergunta. A aplicação irá devolver uma lista de vídeos relevantes para a pergunta. Também irá devolver um link para o ponto do vídeo onde a resposta está localizada.
Esta solução foi construída e testada no Windows 11, macOS e Ubuntu 22.04 usando Python 3.10 ou superior. Podes descarregar o Python em python.org.
Apresentámos a nossa startup no início desta lição. Agora é altura de capacitar os estudantes a construir uma aplicação de pesquisa para as suas avaliações.
Nesta tarefa, vais criar os Serviços Azure OpenAI que serão usados para construir a aplicação de pesquisa. Vais criar os seguintes Serviços Azure OpenAI. Vais precisar de uma subscrição Azure para completar esta tarefa.
- Inicia sessão no portal Azure.
- Seleciona o ícone do Cloud Shell no canto superior direito do portal Azure.
- Seleciona Bash como tipo de ambiente.
Para estas instruções, estamos a usar o grupo de recursos chamado "semantic-video-search" na região East US. Podes alterar o nome do grupo de recursos, mas ao mudar a localização dos recursos, verifica a tabela de disponibilidade dos modelos.
az group create --name semantic-video-search --location eastusNo Azure Cloud Shell, executa o seguinte comando para criar um recurso Azure OpenAI Service.
az cognitiveservices account create --name semantic-video-openai --resource-group semantic-video-search \
--location eastus --kind OpenAI --sku s0No Azure Cloud Shell, executa os seguintes comandos para obter o endpoint e as chaves do recurso Azure OpenAI Service.
az cognitiveservices account show --name semantic-video-openai \
--resource-group semantic-video-search | jq -r .properties.endpoint
az cognitiveservices account keys list --name semantic-video-openai \
--resource-group semantic-video-search | jq -r .key1No Azure Cloud Shell, executa o seguinte comando para implementar o modelo OpenAI Embedding.
az cognitiveservices account deployment create \
--name semantic-video-openai \
--resource-group semantic-video-search \
--deployment-name text-embedding-ada-002 \
--model-name text-embedding-ada-002 \
--model-version "2" \
--model-format OpenAI \
--sku-capacity 100 --sku-name "Standard"Abre o notebook da solução no GitHub Codespaces e segue as instruções no Jupyter Notebook.
Quando executares o notebook, serás solicitado a inserir uma consulta. A caixa de entrada será assim:
Depois de completares esta lição, explora a nossa coleção de Aprendizagem de IA Generativa para continuares a aprofundar os teus conhecimentos em IA Generativa!
Segue para a Lição 9 onde vamos ver como construir aplicações de geração de imagens!
Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução automática Co-op Translator. Embora nos esforcemos pela precisão, por favor tenha em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.


