# Por que a busca por palavras-chave falha em decisões de tribunal, e o que a busca semântica muda

> Como o ChatDoc permite que a equipe de um tribunal de contas busque decisões e normas em linguagem natural, e o que a busca semântica precisa para ser confiável.

- Autor: Adriano Leão (https://adrianoleao.com/pt)
- Publicado: 2026-10-30
- Tempo de leitura: 3 min de leitura
- Temas: IA, NLP, Busca
- URL: https://adrianoleao.com/pt/writing/chatdoc-semantic-search-public-audit-court

**Em resumo:** A busca por palavras-chave só encontra documentos que usam exatamente as suas palavras, o que funciona mal para decisões e normas. O ChatDoc, que construí para o TCM-GO, permite buscar em linguagem natural por significado, não por termos. A confiança vem de mostrar a passagem de origem.

![Mãos enluvadas manuseando um livro histórico manuscrito sobre uma mesa branca](https://adrianoleao.com/images/writing/chatdoc-semantic-search-public-audit-court-og.jpg)

*Capa: [Livro Histórico de Posse Presidencial, Agência Senado, CC BY 2.0, via Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Livro_Hist%C3%B3rico_de_Posse_Presidencial_(52766992574).jpg)*

## O problema: você não sabe as palavras que o documento usa

O Tribunal de Contas dos Municípios de Goiás (TCM-GO) guarda um grande acervo de decisões, acórdãos e normas internas. Quem já buscou em um acervo assim conhece o problema. Você sabe o que procura, mas o documento diz de outro jeito, então a busca por palavras-chave não retorna nada, ou retorna centenas de resultados na ordem errada.

O **ChatDoc** é a ferramenta em que trabalhei para resolver isso. Ele permite que a equipe da instituição faça buscas semânticas em decisões e normas usando linguagem natural. Atuei em um time em parceria com o CEIA/UFG, passando por frontend, backend, arquitetura, machine learning e ciência de dados, e o projeto foi apresentado publicamente no AI.Brasil Experience.

## Busca por palavras-chave versus busca semântica

A busca por palavras-chave pergunta: quais documentos contêm estes termos? A busca semântica pergunta: quais trechos significam algo próximo desta pergunta?

O jeito usual de fazer a segunda é com embeddings. Um modelo transforma cada trecho em um vetor de números, de modo que trechos de significado parecido fiquem próximos. A pergunta vira um vetor da mesma forma, e o sistema devolve os trechos mais próximos.

```python
import numpy as np

def cosine_similarity(a: np.ndarray, b: np.ndarray) -> float:
    return float(a @ b / (np.linalg.norm(a) * np.linalg.norm(b)))

def top_passages(question_vec, passage_vecs, k=5):
    scores = [cosine_similarity(question_vec, p) for p in passage_vecs]
    return sorted(range(len(scores)), key=scores.__getitem__, reverse=True)[:k]
```

O trecho é ilustrativo. Um sistema real adiciona um índice para ganhar velocidade, divide documentos longos em trechos e filtra por metadados como tipo de documento ou data. A ideia por baixo é a mesma.

## Torná-lo confiável, não só rápido

Para uma instituição pública, uma resposta que não pode ser conferida é um risco. Alguns princípios que eu aplicaria a qualquer ferramenta de busca sobre documentos oficiais:

- **Mostre sempre a fonte.** Devolva o trecho e o documento de onde veio, para que a pessoa leia o texto original em vez de confiar em uma paráfrase.
- **Divida os documentos pela estrutura natural.** Decisões e normas têm artigos, seções e itens numerados. Cortar os trechos por essa estrutura mantém cada resultado autocontido.
- **Combine significado com termos exatos.** Texto jurídico é cheio de identificadores: números de processo, de artigo, nomes. Quem busca isso quer correspondência exata, então os melhores sistemas mantêm a busca por termos ao lado da semântica.
- **Avalie com perguntas reais.** Reúna as perguntas que a equipe de fato faz, registre qual trecho responde a cada uma e meça se o sistema o encontra. É a única forma honesta de comparar mudanças.

## O que muda para quem usa

A mudança é sutil, mas real. Em vez de adivinhar o vocabulário do documento, a pessoa pode perguntar do jeito que perguntaria a um colega. Para o tribunal, isso significa menos tempo perdido caçando o trecho certo e uma barreira menor para quem não é especialista em como os documentos são redigidos.

Também explorei o ChatDoc junto com o GAIA, um modelo de linguagem em português brasileiro, como registrado no [estudo de caso](https://adrianoleao.com/pt/case-study/chatdoc).

## Referências

- [Estudo de caso do ChatDoc em adrianoleao.com](https://adrianoleao.com/pt/case-study/chatdoc)
- [TCM-GO, Tribunal de Contas dos Municípios do Estado de Goiás](https://www.tcmgo.tc.br/)
- [Wikipédia: Similaridade por cosseno](https://pt.wikipedia.org/wiki/Similaridade_por_cosseno)

[Todos os artigos](https://adrianoleao.com/pt/writing.md)
