Spaces:
No application file
No application file
Commit
·
e7fbeab
1
Parent(s):
90a9c4a
Explanação da RAG
Browse files
4_Building_a_Retrieval_Augmented_Generation_Chatbot.ipynb
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"metadata": {},
|
| 6 |
+
"source": [
|
| 7 |
+
"<h1 align=\"center\"><font color=\"yellow\">Building a Retrieval Augmented Generation Chatbot</font></h1>"
|
| 8 |
+
]
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"cell_type": "markdown",
|
| 12 |
+
"metadata": {},
|
| 13 |
+
"source": [
|
| 14 |
+
"<font color=\"yellow\">Data Scientist.: Dr. Eddy Giusepe Chirinos Isidro</font>"
|
| 15 |
+
]
|
| 16 |
+
},
|
| 17 |
+
{
|
| 18 |
+
"cell_type": "markdown",
|
| 19 |
+
"metadata": {},
|
| 20 |
+
"source": [
|
| 21 |
+
"Neste script vamos a estudar o Tutorial da [Sophia Yang, Ph.D](https://sophiamyang.medium.com/building-a-retrieval-augmented-generation-chatbot-d567a24fcd14). Basicamente aprenderemos a construir um ChatBot de Geração Aumentada de Recuperação (RAG), para isso ela usou LangChain e Panel."
|
| 22 |
+
]
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"cell_type": "markdown",
|
| 26 |
+
"metadata": {},
|
| 27 |
+
"source": [
|
| 28 |
+
"Links de estudo:\n",
|
| 29 |
+
"\n",
|
| 30 |
+
"\n",
|
| 31 |
+
"* [ANACONDA: How to Build Your Own Panel AI Chatbots](https://www.anaconda.com/blog/how-to-build-your-own-panel-ai-chatbots)\n",
|
| 32 |
+
"\n",
|
| 33 |
+
"* [Medium: Holoviz Panel 1.30 NEW Chat Interface widget](https://medium.com/@andy456333/holoviz-panel-1-30-new-chat-interface-widget-d78c18f6e244)\n",
|
| 34 |
+
"\n",
|
| 35 |
+
"* [Medium: How to Build Your Own Panel AI Chatbots](https://sophiamyang.medium.com/how-to-build-your-own-panel-ai-chatbots-ef764f7f114e)"
|
| 36 |
+
]
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"cell_type": "markdown",
|
| 40 |
+
"metadata": {},
|
| 41 |
+
"source": [
|
| 42 |
+
"# <font color=\"red\">O que é geração aumentada de recuperação (RAG)?</font>"
|
| 43 |
+
]
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"cell_type": "markdown",
|
| 47 |
+
"metadata": {},
|
| 48 |
+
"source": [
|
| 49 |
+
"Você está interessado em fazer um `chatbot` que possa usar suas próprias coleções de dados para responder perguntas? A geração aumentada de recuperação (`RAG`) é uma estrutura de IA que combina os pontos fortes de modelos de linguagem pré-treinados e sistemas de recuperação de informações para gerar respostas em um sistema de IA conversacional ou para criar conteúdo aproveitando o conhecimento externo. Integra a recuperação de informações relevantes de uma fonte de conhecimento e a geração de respostas com base nas informações recuperadas.\n",
|
| 50 |
+
"\n",
|
| 51 |
+
"Em uma configuração `RAG` típica:\n",
|
| 52 |
+
"\n",
|
| 53 |
+
"\n",
|
| 54 |
+
"* Recuperação (`Retrieval`): Dada uma `query` ou `prompt do usuário`, o sistema pesquisa em uma fonte de conhecimento (`um armazenamento de vetores com Embeddings de texto`) para encontrar documentos ou trechos de texto relevantes. O componente de recuperação normalmente emprega alguma forma de pontuação de `similaridade` ou `relevância` para determinar quais partes da fonte de conhecimento são mais pertinentes à query de entrada.\n",
|
| 55 |
+
"\n",
|
| 56 |
+
"\n",
|
| 57 |
+
"* `Geração`: Os documentos ou fragmentos recuperados são então fornecidos a um grande modelo de linguagem (`LLM`), que os utiliza como contexto adicional para gerar uma resposta mais detalhada, factual e relevante.\n",
|
| 58 |
+
"\n",
|
| 59 |
+
"\n",
|
| 60 |
+
"O `RAG` pode ser particularmente útil quando o modelo de linguagem pré-treinado por si só pode não ter as informações necessárias para gerar respostas precisas ou suficientemente detalhadas, uma vez que modelos de linguagem padrão como o `GPT-4` não são capazes de acessar diretamente informações externas em tempo real ou pós-treinamento.\n"
|
| 61 |
+
]
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"cell_type": "code",
|
| 65 |
+
"execution_count": null,
|
| 66 |
+
"metadata": {},
|
| 67 |
+
"outputs": [],
|
| 68 |
+
"source": [
|
| 69 |
+
"# Setup:\n",
|
| 70 |
+
"\n",
|
| 71 |
+
"%pip install panel pypdf chromadb tiktoken langchain openai"
|
| 72 |
+
]
|
| 73 |
+
},
|
| 74 |
+
{
|
| 75 |
+
"cell_type": "code",
|
| 76 |
+
"execution_count": 1,
|
| 77 |
+
"metadata": {},
|
| 78 |
+
"outputs": [],
|
| 79 |
+
"source": [
|
| 80 |
+
"import os\n",
|
| 81 |
+
"from langchain.chains import RetrievalQA\n",
|
| 82 |
+
"from langchain.document_loaders import PyPDFLoader\n",
|
| 83 |
+
"from langchain.embeddings import OpenAIEmbeddings\n",
|
| 84 |
+
"from langchain.llms import OpenAI\n",
|
| 85 |
+
"from langchain.text_splitter import CharacterTextSplitter\n",
|
| 86 |
+
"from langchain.vectorstores import Chroma\n",
|
| 87 |
+
"\n",
|
| 88 |
+
"\n",
|
| 89 |
+
"# Substitua sua chave de API OpenAI:\n",
|
| 90 |
+
"import openai\n",
|
| 91 |
+
"import os\n",
|
| 92 |
+
"from dotenv import load_dotenv, find_dotenv\n",
|
| 93 |
+
"_ = load_dotenv(find_dotenv()) # read local .env file\n",
|
| 94 |
+
"openai.api_key = os.environ['OPENAI_API_KEY']\n",
|
| 95 |
+
"\n",
|
| 96 |
+
"\n",
|
| 97 |
+
"# Carregar documentos:\n",
|
| 98 |
+
"loader = PyPDFLoader(\"./docs/spacy_teste.pdf\")\n",
|
| 99 |
+
"documents = loader.load()\n",
|
| 100 |
+
"\n",
|
| 101 |
+
"# Split dos documentos em chunks:\n",
|
| 102 |
+
"text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n",
|
| 103 |
+
"texts = text_splitter.split_documents(documents)\n",
|
| 104 |
+
"\n",
|
| 105 |
+
"# Selecionamos nossos embeddings (pode ser qualquer outro):\n",
|
| 106 |
+
"embeddings = OpenAIEmbeddings()\n",
|
| 107 |
+
"\n",
|
| 108 |
+
"# Crie o vectorestore para usar como índice:\n",
|
| 109 |
+
"db = Chroma.from_documents(texts, embeddings)\n",
|
| 110 |
+
"\n",
|
| 111 |
+
"# Expor este índice em uma interface de recuperação:\n",
|
| 112 |
+
"retriever = db.as_retriever(search_type=\"similarity\",\n",
|
| 113 |
+
" search_kwargs={\"k\": 2}\n",
|
| 114 |
+
" )\n",
|
| 115 |
+
"\n",
|
| 116 |
+
"# Criamos uma chain para responder perguntas:\n",
|
| 117 |
+
"qa = RetrievalQA.from_chain_type(llm=OpenAI(),\n",
|
| 118 |
+
" chain_type=\"map_reduce\",\n",
|
| 119 |
+
" retriever=retriever,\n",
|
| 120 |
+
" return_source_documents=True,\n",
|
| 121 |
+
" verbose=True,\n",
|
| 122 |
+
" )\n"
|
| 123 |
+
]
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"cell_type": "code",
|
| 127 |
+
"execution_count": 2,
|
| 128 |
+
"metadata": {},
|
| 129 |
+
"outputs": [
|
| 130 |
+
{
|
| 131 |
+
"name": "stdout",
|
| 132 |
+
"output_type": "stream",
|
| 133 |
+
"text": [
|
| 134 |
+
"\n",
|
| 135 |
+
"\n",
|
| 136 |
+
"\u001b[1m> Entering new RetrievalQA chain...\u001b[0m\n",
|
| 137 |
+
"\n",
|
| 138 |
+
"\u001b[1m> Finished chain.\u001b[0m\n"
|
| 139 |
+
]
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"data": {
|
| 143 |
+
"text/plain": [
|
| 144 |
+
"{'query': 'O que é Entropia?',\n",
|
| 145 |
+
" 'result': ' Entropia é uma medida de incerteza que pode ser usada para medir a granularidade do clustering. Quanto menor a entropia, mais granular será o clustering.',\n",
|
| 146 |
+
" 'source_documents': [Document(page_content='Em geral, o objetivo do problema de classificação é encontrar a granularidade mais \\napropriada que permita uma separação eficiente dos dados de ambas as classes. \\nPara isso, é necessário utilizar técnicas de classificação, como a regressão logística, \\nárvores de decisão, SVM, redes neurais, entre outras, para encontrar a fronteira de \\ndecisão ótima entre as classes. A granularidade ideal dependerá da distribuição dos \\ndados em cada classe e da complexidade da fronteira de decisão.Granular idade b aixa: Nesta granularidade, os dados de amb as as classes \\nestão muit o próximos um do outr o, e há uma sobr eposição significativ a \\nentre os clust ers de amb as as classes. Isso significa que é difícil sep arar os \\ndados de amb as as classes com pr ecisão.1.\\nGranular idade média : Nesta granularidade, os clust ers de amb as as classes \\nsão clarament e distinguív eis, mas ainda pode hav er alguma sobr eposição \\nentre eles. Isso significa que é possív el sep arar os dados de amb as as \\nclasses com uma pr ecisão razo ável.2.\\nGranular idade alta : Nesta granularidade, os clust ers de amb as as classes são \\nmuit o distint os e não há sobr eposição entr e eles. Isso significa que é \\npossív el sep arar os dados de amb as as classes com alta pr ecisão.3.', metadata={'page': 4, 'source': './docs/spacy_teste.pdf'}),\n",
|
| 147 |
+
" Document(page_content='É importante ressaltar que a escolha da métrica de granularidade depende do \\nobjetivo da análise e do tipo de dados que está sendo clusterizado. Além disso, é \\nrecomendável usar mais de uma métrica para avaliar a granularidade de um \\nclustering de forma mais abrangente e confiável.\\nConsiderando k -means, como posso p ara definir o niv el de granular idade que \\ndesejo\\nNo k-means, a granularidade pode ser controlada por meio da escolha do númer o \\nde clust ers desejado . Para definir o nível de granularidade desejado, você pode \\nseguir estes passos:\\nLembre-se de que o k-means é um algoritmo de clustering sensível à inicialização e \\npode produzir resultados diferentes com diferentes sementes aleatórias. P ortanto, é \\nrecomendável executar o algoritmo várias vezes com diferentes sementes aleatórias \\ne escolher o resultado com melhor qualidade de clustering.\\nPara o caso de fuzzy c-means como posso p ara definir o niv el de granular idade \\nque desejoEntropia: A entropia é uma medida de incerteza e pode ser usada para medir \\na granularidade do clustering. Quant o menor a entr opia, mais granular será \\no clust ering.5.\\nVisualize seus dados : Antes de aplicar o algoritmo k-means, é importante \\nvisualizar os dados para entender sua estrutura e distribuição. Isso ajudará a \\nter uma ideia aproximada do número de clusters necessários para representar \\nos dados de forma significativa.1.\\nExecute o algor itmo com difer entes valores de k : Execute o algoritmo k-\\nmeans com diferentes valores de k e compare os resultados. Se você estiver \\nbuscando uma granularidade mais fina, tente aumentar o número de clusters. \\nSe você quiser uma granularidade mais baixa, tente reduzir o número de \\nclusters.2.\\nAvalie a qualidade dos clust ers: Para avaliar a qualidade dos clusters, você \\npode usar métricas de validação de clustering, como o índice de silhueta ou o \\ncoeficiente de variação total. Essas métricas podem ajudá-lo a determinar se o \\nnúmero de clusters escolhido é apropriado para seus dados.3.\\nConsider e o cont exto: Finalmente, é importante considerar o contexto em \\nque os dados estão sendo analisados. Dependendo do objetivo da análise, a \\ngranularidade pode precisar ser ajustada para capturar informações relevantes \\ne significativas dos dados.4.', metadata={'page': 2, 'source': './docs/spacy_teste.pdf'})]}"
|
| 148 |
+
]
|
| 149 |
+
},
|
| 150 |
+
"execution_count": 2,
|
| 151 |
+
"metadata": {},
|
| 152 |
+
"output_type": "execute_result"
|
| 153 |
+
}
|
| 154 |
+
],
|
| 155 |
+
"source": [
|
| 156 |
+
"qa(\"O que é Entropia?\")"
|
| 157 |
+
]
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"cell_type": "code",
|
| 161 |
+
"execution_count": 3,
|
| 162 |
+
"metadata": {},
|
| 163 |
+
"outputs": [
|
| 164 |
+
{
|
| 165 |
+
"name": "stdout",
|
| 166 |
+
"output_type": "stream",
|
| 167 |
+
"text": [
|
| 168 |
+
"\n",
|
| 169 |
+
"\n",
|
| 170 |
+
"\u001b[1m> Entering new RetrievalQA chain...\u001b[0m\n",
|
| 171 |
+
"\n",
|
| 172 |
+
"\u001b[1m> Finished chain.\u001b[0m\n"
|
| 173 |
+
]
|
| 174 |
+
},
|
| 175 |
+
{
|
| 176 |
+
"data": {
|
| 177 |
+
"text/plain": [
|
| 178 |
+
"{'query': 'Como podemos avaliar a qualidade de clusters?',\n",
|
| 179 |
+
" 'result': ' Para avaliar a qualidade dos clusters, você pode usar métricas de validação de clustering, como o índice de silhueta ou o coeficiente de variação total. Algumas das métricas mais comuns incluem: número de clusters, tamanho dos clusters, densidade dos clusters e distância entre os clusters.',\n",
|
| 180 |
+
" 'source_documents': [Document(page_content='É importante ressaltar que a escolha da métrica de granularidade depende do \\nobjetivo da análise e do tipo de dados que está sendo clusterizado. Além disso, é \\nrecomendável usar mais de uma métrica para avaliar a granularidade de um \\nclustering de forma mais abrangente e confiável.\\nConsiderando k -means, como posso p ara definir o niv el de granular idade que \\ndesejo\\nNo k-means, a granularidade pode ser controlada por meio da escolha do númer o \\nde clust ers desejado . Para definir o nível de granularidade desejado, você pode \\nseguir estes passos:\\nLembre-se de que o k-means é um algoritmo de clustering sensível à inicialização e \\npode produzir resultados diferentes com diferentes sementes aleatórias. P ortanto, é \\nrecomendável executar o algoritmo várias vezes com diferentes sementes aleatórias \\ne escolher o resultado com melhor qualidade de clustering.\\nPara o caso de fuzzy c-means como posso p ara definir o niv el de granular idade \\nque desejoEntropia: A entropia é uma medida de incerteza e pode ser usada para medir \\na granularidade do clustering. Quant o menor a entr opia, mais granular será \\no clust ering.5.\\nVisualize seus dados : Antes de aplicar o algoritmo k-means, é importante \\nvisualizar os dados para entender sua estrutura e distribuição. Isso ajudará a \\nter uma ideia aproximada do número de clusters necessários para representar \\nos dados de forma significativa.1.\\nExecute o algor itmo com difer entes valores de k : Execute o algoritmo k-\\nmeans com diferentes valores de k e compare os resultados. Se você estiver \\nbuscando uma granularidade mais fina, tente aumentar o número de clusters. \\nSe você quiser uma granularidade mais baixa, tente reduzir o número de \\nclusters.2.\\nAvalie a qualidade dos clust ers: Para avaliar a qualidade dos clusters, você \\npode usar métricas de validação de clustering, como o índice de silhueta ou o \\ncoeficiente de variação total. Essas métricas podem ajudá-lo a determinar se o \\nnúmero de clusters escolhido é apropriado para seus dados.3.\\nConsider e o cont exto: Finalmente, é importante considerar o contexto em \\nque os dados estão sendo analisados. Dependendo do objetivo da análise, a \\ngranularidade pode precisar ser ajustada para capturar informações relevantes \\ne significativas dos dados.4.', metadata={'page': 2, 'source': './docs/spacy_teste.pdf'}),\n",
|
| 181 |
+
" Document(page_content='Exemplo 3: Clust ering de dados de r edes sociais\\nImagine que você queira agrupar usuários de redes sociais com base em seus \\ninteresses e comportamentos. \\nQue métr icas posso usar p ara medir a granular idade de um clust ering\\nExistem várias métricas que podem ser usadas para medir a granularidade de um \\nclustering, dependendo do tipo de algoritmo de clustering e do objetivo da análise. \\nAlgumas das métricas mais comuns incluem:Se a granular idade do clust ering for b aixa, você pode agrupar os pacientes \\nem grandes grupos, como \"pacientes com doenças crônicas\" e \"pacientes \\nsaudáveis\". \\nSe a granular idade do clust ering for alta , você pode agrupar os pacientes \\nem clusters específicos, como \"pacientes com diabetes tipo 2\", \"pacientes com \\nhipertensão\" e \"pacientes com doenças cardíacas\".\\nSe a granular idade do clust ering for b aixa, você pode agrupar os usuários \\nem grandes categorias, como \"usuários que gostam de esportes\" e \"usuários \\nque gostam de música\". \\nSe a granular idade do clust ering for alta , você pode agrupar os usuários em \\nclusters específicos, como \"usuários que gostam de futebol\", \"usuários que \\ngostam de música clássica\" e \"usuários que gostam de rock alternativo\".\\nNúmer o de clust ers: Uma métrica simples e intuitiva é contar o número de \\nclusters gerados pelo algoritmo de clustering. Quant o mais clust ers \\nexistir em, mais granular será o clust ering.1.\\nTamanho dos clust ers: A granularidade também pode ser medida pelo \\ntamanho dos clusters. Se os clust ers for em pequenos e contiv erem apenas \\nalgumas instâncias, o clust ering será mais granular do que se os clust ers \\nforem grandes e contiv erem muitas instâncias.2.\\nDensidade dos clust ers: A densidade dos clusters também pode ser usada \\npara medir a granularidade. Se os clust ers for em densos e bem agr upados, \\no clust ering será menos granular do que se os clust ers for em menos \\ndensos e mais disper sos.3.\\nDistância entr e os clust ers: A distância média entre os clusters também pode \\nser usada como uma métrica de granularidad e. Se a distância média entr e os \\nclust ers for grande, o clust ering será mais granular do que se a distância \\nmédia entr e os clust ers for pequena.4.', metadata={'page': 1, 'source': './docs/spacy_teste.pdf'})]}"
|
| 182 |
+
]
|
| 183 |
+
},
|
| 184 |
+
"execution_count": 3,
|
| 185 |
+
"metadata": {},
|
| 186 |
+
"output_type": "execute_result"
|
| 187 |
+
}
|
| 188 |
+
],
|
| 189 |
+
"source": [
|
| 190 |
+
"qa(\"Como podemos avaliar a qualidade de clusters?\")"
|
| 191 |
+
]
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"cell_type": "code",
|
| 195 |
+
"execution_count": 4,
|
| 196 |
+
"metadata": {},
|
| 197 |
+
"outputs": [
|
| 198 |
+
{
|
| 199 |
+
"name": "stdout",
|
| 200 |
+
"output_type": "stream",
|
| 201 |
+
"text": [
|
| 202 |
+
"\n",
|
| 203 |
+
"\n",
|
| 204 |
+
"\u001b[1m> Entering new RetrievalQA chain...\u001b[0m\n",
|
| 205 |
+
"\n",
|
| 206 |
+
"\u001b[1m> Finished chain.\u001b[0m\n"
|
| 207 |
+
]
|
| 208 |
+
},
|
| 209 |
+
{
|
| 210 |
+
"data": {
|
| 211 |
+
"text/plain": [
|
| 212 |
+
"{'query': 'Quem foi Albert Einstein?',\n",
|
| 213 |
+
" 'result': \" I don't know.\",\n",
|
| 214 |
+
" 'source_documents': [Document(page_content='Exemplo 3: Clust ering de dados de r edes sociais\\nImagine que você queira agrupar usuários de redes sociais com base em seus \\ninteresses e comportamentos. \\nQue métr icas posso usar p ara medir a granular idade de um clust ering\\nExistem várias métricas que podem ser usadas para medir a granularidade de um \\nclustering, dependendo do tipo de algoritmo de clustering e do objetivo da análise. \\nAlgumas das métricas mais comuns incluem:Se a granular idade do clust ering for b aixa, você pode agrupar os pacientes \\nem grandes grupos, como \"pacientes com doenças crônicas\" e \"pacientes \\nsaudáveis\". \\nSe a granular idade do clust ering for alta , você pode agrupar os pacientes \\nem clusters específicos, como \"pacientes com diabetes tipo 2\", \"pacientes com \\nhipertensão\" e \"pacientes com doenças cardíacas\".\\nSe a granular idade do clust ering for b aixa, você pode agrupar os usuários \\nem grandes categorias, como \"usuários que gostam de esportes\" e \"usuários \\nque gostam de música\". \\nSe a granular idade do clust ering for alta , você pode agrupar os usuários em \\nclusters específicos, como \"usuários que gostam de futebol\", \"usuários que \\ngostam de música clássica\" e \"usuários que gostam de rock alternativo\".\\nNúmer o de clust ers: Uma métrica simples e intuitiva é contar o número de \\nclusters gerados pelo algoritmo de clustering. Quant o mais clust ers \\nexistir em, mais granular será o clust ering.1.\\nTamanho dos clust ers: A granularidade também pode ser medida pelo \\ntamanho dos clusters. Se os clust ers for em pequenos e contiv erem apenas \\nalgumas instâncias, o clust ering será mais granular do que se os clust ers \\nforem grandes e contiv erem muitas instâncias.2.\\nDensidade dos clust ers: A densidade dos clusters também pode ser usada \\npara medir a granularidade. Se os clust ers for em densos e bem agr upados, \\no clust ering será menos granular do que se os clust ers for em menos \\ndensos e mais disper sos.3.\\nDistância entr e os clust ers: A distância média entre os clusters também pode \\nser usada como uma métrica de granularidad e. Se a distância média entr e os \\nclust ers for grande, o clust ering será mais granular do que se a distância \\nmédia entr e os clust ers for pequena.4.', metadata={'page': 1, 'source': './docs/spacy_teste.pdf'}),\n",
|
| 215 |
+
" Document(page_content='Em geral, o objetivo do problema de classificação é encontrar a granularidade mais \\napropriada que permita uma separação eficiente dos dados de ambas as classes. \\nPara isso, é necessário utilizar técnicas de classificação, como a regressão logística, \\nárvores de decisão, SVM, redes neurais, entre outras, para encontrar a fronteira de \\ndecisão ótima entre as classes. A granularidade ideal dependerá da distribuição dos \\ndados em cada classe e da complexidade da fronteira de decisão.Granular idade b aixa: Nesta granularidade, os dados de amb as as classes \\nestão muit o próximos um do outr o, e há uma sobr eposição significativ a \\nentre os clust ers de amb as as classes. Isso significa que é difícil sep arar os \\ndados de amb as as classes com pr ecisão.1.\\nGranular idade média : Nesta granularidade, os clust ers de amb as as classes \\nsão clarament e distinguív eis, mas ainda pode hav er alguma sobr eposição \\nentre eles. Isso significa que é possív el sep arar os dados de amb as as \\nclasses com uma pr ecisão razo ável.2.\\nGranular idade alta : Nesta granularidade, os clust ers de amb as as classes são \\nmuit o distint os e não há sobr eposição entr e eles. Isso significa que é \\npossív el sep arar os dados de amb as as classes com alta pr ecisão.3.', metadata={'page': 4, 'source': './docs/spacy_teste.pdf'})]}"
|
| 216 |
+
]
|
| 217 |
+
},
|
| 218 |
+
"execution_count": 4,
|
| 219 |
+
"metadata": {},
|
| 220 |
+
"output_type": "execute_result"
|
| 221 |
+
}
|
| 222 |
+
],
|
| 223 |
+
"source": [
|
| 224 |
+
"qa(\"Quem foi Albert Einstein?\")"
|
| 225 |
+
]
|
| 226 |
+
}
|
| 227 |
+
],
|
| 228 |
+
"metadata": {
|
| 229 |
+
"kernelspec": {
|
| 230 |
+
"display_name": "venv_ChatBot",
|
| 231 |
+
"language": "python",
|
| 232 |
+
"name": "python3"
|
| 233 |
+
},
|
| 234 |
+
"language_info": {
|
| 235 |
+
"codemirror_mode": {
|
| 236 |
+
"name": "ipython",
|
| 237 |
+
"version": 3
|
| 238 |
+
},
|
| 239 |
+
"file_extension": ".py",
|
| 240 |
+
"mimetype": "text/x-python",
|
| 241 |
+
"name": "python",
|
| 242 |
+
"nbconvert_exporter": "python",
|
| 243 |
+
"pygments_lexer": "ipython3",
|
| 244 |
+
"version": "3.10.12"
|
| 245 |
+
}
|
| 246 |
+
},
|
| 247 |
+
"nbformat": 4,
|
| 248 |
+
"nbformat_minor": 2
|
| 249 |
+
}
|