{
  "title": "Busca Híbrida para E-Commerce com Pinecone e LLMs",
  "excerpt": "Aprenda como construir um poderoso sistema de busca híbrida para aplicações de e-commerce combinando métodos tradicionais de recuperação de informação com modelos de aprendizado de máquina como Modelos de Linguagem (LLMs) e Pinecone, um banco de dados vetorial gerenciado. Descubra os benefícios da busca híbrida para e-commerce, incluindo melhor relevância nos resultados, personalização, tratamento de consultas de cauda longa e gerenciamento mais simples de infraestrutura.",
  "content_html": "<p>Buscar e encontrar produtos relevantes é um componente crítico de um site de e-commerce. Fornecer resultados de busca rápidos e precisos pode fazer a diferença entre alta satisfação do usuário e frustração. Com os avanços recentes na compreensão de linguagem natural e nas tecnologias de busca vetorial, sistemas de busca aprimorados tornaram-se mais acessíveis e eficientes, resultando em melhores experiências do usuário e taxas de conversão aprimoradas.</p>\n<p>Neste post de blog, exploraremos como implementar um sistema de busca híbrida para e-commerce usando o Pinecone, um mecanismo de busca vetorial de alta performance, e modelos de linguagem específicos de domínio fine-tuned. Ao final deste post, você não terá apenas um sólido entendimento sobre busca híbrida, mas também um guia prático passo a passo para implementá-la.</p>\n<h2>O que é Busca Híbrida?</h2>\n<img src=\"/assets/images/pinecone_hybrid_index.jpg\" alt=\"Índice Híbrido do Pinecone\" class=\"post-img\" width=\"2360\" height=\"921\" /><span class=\"post-img-caption\">Visão de alto nível de um Índice Híbrido simples do Pinecone</span>\n<p>Antes de mergulharmos na implementação, vamos entender rapidamente o que significa busca híbrida. Busca híbrida é uma abordagem que combina os pontos fortes da busca tradicional (busca por vetores esparsos) e da busca vetorial (busca por vetores densos) para alcançar um melhor desempenho de busca em uma ampla gama de domínios.</p>\n<p>A busca por vetores densos extrai embeddings vetoriais de alta qualidade a partir de dados textuais e realiza uma busca por similaridade para encontrar documentos relevantes. No entanto, ela frequentemente enfrenta dificuldades com dados fora do domínio quando não é fine-tuned em conjuntos de dados específicos do domínio.</p>\n<p>Por outro lado, a busca tradicional utiliza representações vetoriais esparsas, como term frequency-inverse document frequency (TF-IDF) ou BM25, e não requer nenhum ajuste fine-tuned específico do domínio. Embora consiga lidar com novos domínios, seu desempenho é limitado pela incapacidade de entender relações semânticas entre palavras e pela falta da inteligência da recuperação densa.</p>\n<p>A busca híbrida tenta mitigar as fraquezas de ambas as abordagens combinando-as em um único sistema, aproveitando o potencial de desempenho da busca por vetores densos e a adaptabilidade zero-shot da busca tradicional.</p>\n<p>Agora que temos uma compreensão básica de busca híbrida, vamos mergulhar em sua implementação.</p>\n<h2>Construindo um Sistema de Busca Híbrida</h2>\n<p>Abordaremos as seguintes etapas para implementar um sistema de busca híbrida:</p>\n<ol>\n<li>Aproveitando Modelos de Linguagem Específicos de Domínio</li>\n<li>Criando Vetores Esparsos e Densos</li>\n<li>Configurando o Pinecone</li>\n<li>Implementando o Pipeline de Busca Híbrida</li>\n<li>Realizando Consultas e Ajustando Parâmetros</li>\n</ol>\n<h3>1. Aproveitando Modelos de Linguagem Específicos de Domínio</h3>\n<p>Nos últimos anos, modelos de linguagem pré-treinados em larga escala, como o GPT da OpenAI e o Cohere, tornaram-se cada vez mais populares para uma variedade de tarefas, incluindo compreensão e geração de linguagem natural. Esses modelos podem ser fine-tuned em dados específicos de domínio para melhorar seu desempenho e se adaptar a tarefas específicas, como a busca de produtos em e-commerce.</p>\n<p>Em nosso exemplo, usaremos um modelo de linguagem específico de domínio fine-tuned para gerar embeddings de vetores densos para produtos e consultas. No entanto, você pode escolher outros modelos ou até mesmo criar seus próprios embeddings personalizados com base no seu domínio específico.</p>\n<pre><code class=\"language-python\">import torch\nfrom transformers import AutoTokenizer, AutoModel\n\n# Load a pre-trained domain-specific language model\nmodel_name = \"your-domain-specific-model\"\ntokenizer = AutoTokenizer.from_pretrained(model_name)\nmodel = AutoModel.from_pretrained(model_name)\n\n# Generate dense vector embeddings for a product description\ntext = \"Nike Air Max sports shoes for men\"\ninputs = tokenizer(text, return_tensors=\"pt\")\nwith torch.no_grad():\n    outputs = model(**inputs)\n    dense_embedding = outputs.last_hidden_state.mean(dim=1).numpy()</code></pre>\n<h3>2. Criando Vetores Esparsos e Densos</h3>\n<p>A busca híbrida requer representações vetoriais esparsas e densas para nossos dados de e-commerce. Agora descreveremos como gerar esses vetores.</p>\n<h4>Vetores Esparsos</h4>\n<p>Representações vetoriais esparsas, como TF-IDF ou BM25, podem ser criadas usando técnicas padrão de processamento de texto, como tokenização, remoção de stopwords e stemming. Um exemplo de geração de vetores esparsos pode ser alcançado usando uma matriz de vocabulário.</p>\n<pre><code class=\"language-python\"># This function generates sparse vector representations of a list of product descriptions\ndef generate_sparse_vectors(text):\n    '''Generates sparse vector representations for a list of product descriptions\n\n    Args:\n        text (list): A list of product descriptions\n\n    Returns:\n        sparse_vector (dict): A dictionary of indices and values\n    '''\n    sparse_vector = bm25.encode_queries(text)\n    return sparse_vector\n\nfrom pinecone_text.sparse import BM25Encoder\n\n# Create the BM25 encoder and fit the data\nbm25 = BM25Encoder()\nbm25.fit(new_df.full_data)\n\n# Create the sparse vectors\nsparse_vectors = []\nfor product_description in product_descriptions:\n    sparse_vectors.append(generate_sparse_vectors(text=product_description))</code></pre>\n<h4>Vetores Densos</h4>\n<p>Representações vetoriais densas podem ser geradas usando modelos de linguagem pré-treinados ou personalizados específicos de domínio. Em nosso exemplo anterior, usamos um modelo de linguagem específico de domínio para gerar embeddings de vetores densos para uma descrição de produto.</p>\n<pre><code class=\"language-python\">def generate_dense_vector(text):\n    '''Generates dense vector embeddings for a list of product descriptions\n\n    Args:\n        text (list): A list of product descriptions\n\n    Returns:\n        dense_embedding (np.array): A numpy array of dense vector embeddings\n    '''\n    # Tokenize the text and convert to PyTorch tensors\n    inputs = tokenizer(text, return_tensors=\"pt\")\n    # Generate the embeddings with the pre-trained model\n    with torch.no_grad():\n        outputs = model(**inputs)\n        dense_vector = outputs.last_hidden_state.mean(dim=1).numpy()\n    return dense_vector\n\n# Generate dense vector embeddings for a list of product descriptions\ndense_vectors = []\nfor product_description in product_descriptions:\n    dense_vectors.append(generate_dense_vector(text=product_description))</code></pre>\n<h3>3. Configurando o Pinecone</h3>\n<p>O Pinecone é um mecanismo de busca vetorial de alta performance que suporta busca híbrida. Ele permite a criação de um único índice para vetores esparsos e densos e lida perfeitamente com consultas de busca em diferentes modalidades de dados.</p>\n<p>Para usar o Pinecone, você precisará se inscrever em uma conta, instalar o cliente do Pinecone e configurar sua chave de API e ambiente.</p>\n<pre><code class=\"language-python\"># Create a Pinecone hybrid search index\nimport pinecone\n\npinecone.init(\n    api_key=\"YOUR_API_KEY\",  # app.pinecone.io\n    environment=\"YOUR_ENV\"  # find next to api key in console\n)\n\n# Create a Pinecone hybrid search index\nindex_name = \"ecommerce-hybrid-search\"\npinecone.create_index(\n    index_name = index_name,\n    dimension = MODEL_DIMENSION,  # dimensionality of dense model\n    metric = \"dotproduct\"\n)\n# connect to the index\nindex = pinecone.Index(index_name=index_name)\n# view index stats\nindex.describe_index_stats()</code></pre>\n<h3>4. Implementando o Pipeline de Busca Híbrida</h3>\n<p>Com nossos vetores esparsos e densos gerados e o Pinecone configurado, agora podemos construir um pipeline de busca híbrida. Este pipeline inclui as seguintes etapas:</p>\n<ol>\n<li>Adicionar dados de produtos ao índice do Pinecone</li>\n<li>Recuperar resultados usando vetores esparsos e densos</li>\n</ol>\n<pre><code class=\"language-python\">def add_product_data_to_index(product_ids, sparse_vectors, dense_vectors, metadata=None):\n    \"\"\"Upserts product data to the Pinecone index.\n\n    Args:\n        product_ids (`list` of `str`): Product IDs.\n        sparse_vectors (`list` of `list` of `float`): Sparse vectors.\n        dense_vectors (`list` of `list` of `float`): Dense vectors.\n        metadata (`list` of `list` of `str`): Optional metadata.\n\n    Returns:\n        None\n    \"\"\"\n    batch_size = 32\n\n    # Loop through the product IDs in batches.\n    for i in range(0, len(product_ids), batch_size):\n        i_end = min(i + batch_size, len(product_ids))\n        ids = product_ids[i:i_end]\n        sparse_batch = sparse_vectors[i:i_end]\n        dense_batch = dense_vectors[i:i_end]\n        meta_batch = metadata[i:i_end] if metadata else []\n\n        vectors = []\n        for _id, sparse, dense, meta in zip(ids, sparse_batch, dense_batch, meta_batch):\n            vectors.append({\n                'id': _id,\n                'sparse_values': sparse,\n                'values': dense,\n                'metadata': meta\n            })\n\n        # Upsert the vectors into the Pinecone index.\n        index.upsert(vectors=vectors)\n\nadd_product_data_to_index(product_ids, sparse_vectors, dense_vectors)</code></pre>\n<p>Agora que nossos dados estão indexados, podemos realizar consultas de busca híbrida.</p>\n<h3>5. Realizando Consultas e Ajustando Parâmetros</h3>\n<img src=\"/assets/images/pinecone_hybrid_query.jpg\" alt=\"Consulta Híbrida do Pinecone\" class=\"post-img\" width=\"2360\" height=\"892\" /><span class=\"post-img-caption\">Visão de alto nível de uma Consulta Híbrida simples do Pinecone</span>\n<p>Para realizar consultas de busca híbrida, criaremos uma função que recebe uma consulta, o número de principais resultados e um parâmetro alpha para controlar a ponderação entre os scores de busca por vetores densos e esparsos.</p>\n<pre><code class=\"language-python\">def hybrid_scale(dense, sparse, alpha: float):\n    \"\"\"Hybrid vector scaling using a convex combination\n\n    alpha * dense + (1 - alpha) * sparse\n\n    Args:\n        dense: Array of floats representing\n        sparse: a dict of `indices` and `values`\n        alpha: float between 0 and 1 where 0 == sparse only\n               and 1 == dense only\n    \"\"\"\n    if alpha < 0 or alpha > 1:\n        raise ValueError(\"Alpha must be between 0 and 1\")\n    # scale sparse and dense vectors to create hybrid search vecs\n    hsparse = {\n        'indices': sparse['indices'],\n        'values':  [v * (1 - alpha) for v in sparse['values']]\n    }\n    hdense = [v * alpha for v in dense]\n    return hdense, hsparse\n\ndef search_products(query, top_k=10, alpha=0.5):\n    # Generate sparse query vector\n    sparse_query_vector = generate_sparse_vector(query)\n\n    # Generate dense query vector\n    dense_query_vector = generate_dense_vector(query)\n\n    # Calculate hybrid query vector\n    dense_query_vector, sparse_query_vector = hybrid_scale(dense_query_vector, sparse_query_vector, alpha)\n\n    # Search products using Pinecone\n    results = index.query(\n        vector=dense_query_vector,\n        sparse_vector=sparse_query_vector,\n        top_k=top_k\n    )\n\n    return results</code></pre>\n<p>Podemos então usar essa função para buscar produtos relevantes em nosso conjunto de dados de e-commerce.</p>\n<pre><code class=\"language-python\">query = \"running shoes for women\"\nresults = search_products(query, top_k=5)\n\nfor result in results:\n    print(result['id'], result['metadata']['product_name'], result['score'])</code></pre>\n<p>Experimentar diferentes valores para o parâmetro alpha ajudará você a encontrar o equilíbrio ótimo entre a busca por vetores esparsos e densos para o seu domínio específico.</p>\n<h2>Conclusão</h2>\n<p>Neste post de blog, demonstramos como construir um sistema de busca híbrida para e-commerce usando o Pinecone e modelos de linguagem específicos de domínio. A busca híbrida nos permite combinar os pontos fortes da busca tradicional e da busca vetorial, melhorando o desempenho e a adaptabilidade da busca em diversos domínios.</p>\n<p>Seguindo as etapas e os trechos de código fornecidos neste post, você pode implementar seu próprio sistema de busca híbrida adaptado aos requisitos específicos do seu site de e-commerce. Comece a explorar o Pinecone e melhore a experiência de busca do seu e-commerce hoje mesmo!</p>\n<h2>Referências</h2>\n<ul>\n<li><a href=\"https://colab.research.google.com/github/pinecone-io/examples/blob/master/search/hybrid-search/ecommerce-search/ecommerce-search.ipynb\">Busca de E-Commerce usando Técnicas de Busca Híbrida no Pinecone (Google Colab Notebook)</a>: Um guia prático demonstrando a implementação de busca de e-commerce usando as técnicas de busca híbrida do Pinecone.</li>\n<li><a href=\"https://docs.pinecone.io/docs/ecommerce-search\">Documentação de Busca de E-Commerce do Pinecone</a>: Documentação oficial do Pinecone para construir sistemas de busca de e-commerce.</li>\n<li><a href=\"https://colab.research.google.com/github/pinecone-io/examples/blob/master/pinecone/sparse/bm25/bm25-vector-generation.ipynb\">Geração de Vetores BM25 usando Pinecone (Google Colab Notebook)</a>: Um guia para gerar vetores esparsos BM25 usando Pinecone.</li>\n<li><a href=\"https://github.com/pinecone-io/pinecone-text\">Repositório Pinecone Text no GitHub</a>: Uma coleção de recursos de processamento de texto e geração de vetores usando Pinecone.</li>\n<li><a href=\"https://www.pinecone.io/learn/hybrid-search-intro/\">Introdução à Busca Híbrida no Site do Pinecone</a>: Uma visão geral da busca híbrida, seus benefícios e casos de uso no contexto das capacidades do Pinecone.</li>\n</ul>",
  "source_hash": "sha256:e66aaa4db1667d84e791217c8e94d2c0fb0ed99f7181b65b37a84e72ae3181ef",
  "model": "moonshotai/kimi-k2.6",
  "generated_at": "2026-08-07T05:24:48.729569+00:00"
}