Artigos

A IA remodelou o software: extração de dados

TL;DR Software sempre foi determinístico demais, mesmo em casos em que o negócio não precisa disso. Ser mais flexível e criar novas formas de entrada é como a IA transformou o desenvolvimento de software. Demonstro isso em uma série de artigos sobre as possibilidades que os LLMs abrem.

Vou explorar como a capacidade de extração de dados dos LLMs viabiliza categorização, moderação e transformação de dados de forma simples, entre outras tarefas. Juntar IA+Engenheiro pode impactar bastante setores como redes sociais e marketplaces. Toda técnica tem hora e lugar certos, e vou trazer exemplos e discutir trade-offs para mostrar onde ela funciona bem.

O jeito antigo vs. o novo

Antes dos LLMs, extração de dados dependia muito de ferramentas como regex, modelos de machine learning especializados e busca por palavras-chave. As empresas costumavam tratar campos de texto como pouco confiáveis e difíceis de processar, chamando isso de "garbage in, garbage out". Empresas que dependem muito de conteúdo de usuário acabam montando moderação humana, como Glassdoor e Facebook fazem.

Diagrama mostrando um texto com algumas palavras destacadas sendo convertido em dados estruturados

Imagem 1: Diagrama mostrando um texto com algumas palavras destacadas sendo convertido em dados estruturados.

Outra estratégia comum foi apoiar a moderação de conteúdo na própria comunidade. Plataformas como o Reddit usam moderadores dedicados, enquanto League of Legends mantém um sistema de honra. Funciona, mas sempre foi caro, trabalhoso e longe de perfeito.

Com LLMs, chegar a um resultado comparável ao de um time de moderação está ao alcance de quase qualquer pessoa. Prompting simples tornou a moderação muito mais acessível, e isso abre espaço para novos modelos de negócio. Fluxos estruturados e um bom processo de ETL levam a qualidade e a escalabilidade ainda mais longe.

Ainda assim, há muito a aprender sobre como otimizar prompts e fluxos para extrair dados de verdade, já que isso não é um comportamento nativo dos LLMs. Mesmo assim os resultados de hoje já são notáveis, e LLMs especializados em extração de dados vão simplificar ainda mais essas tarefas no futuro.

Moderação de conteúdo mais barata - indústria de redes sociais

Redes sociais dependem de conteúdo gerado por usuários: texto, imagem e áudio. Elas precisam filtrar material nocivo como violência, conteúdo sexual, ameaças, atividades ilícitas e spam, e ao mesmo tempo incentivar o engajamento.

Historicamente, a busca por palavras-chave foi uma ferramenta de moderação simples e barata. Só que os usuários sempre acham um jeito criativo de driblar esses filtros. Conversas sobre saúde mental, por exemplo, dependem de linguagem sensível ao contexto, o que torna a detecção por palavra-chave ineficaz.


uri = URI('https://api.openai.com/v1/chat/completions')
headers = {
  'Content-Type': 'application/json',
  'Authorization': "Bearer #{api_key}"
}

prompt = <<-PROMPT
You are a content moderator reviewing a post to determineif has Mental Health Struggles or not.
Provide the reasoning behind your score and rate it on a scale from 1 to 10,
where 1 indicates it is probably not discussing , and 10 indicates it is likely discussing.
Return the json object: {score: Number, reasoning: String}
PROMPT
user_message = 'Feeling stuck in a dark place'

data = {
  model: 'gpt-4o-mini',
  messages: [
    { role: 'system', content: prompt },
    { role: 'user', content: user_message }
  ],
  response_format: { type: 'json_object' }
}

response = Net::HTTP.post(uri, data.to_json, headers)
puts JSON.parse(response.body)['choices'][0]['message']['content']
# {
  score: 8,
  reasoning: "The phrase 'stuck in a dark place' typically indicates a feeling of being trapped..." }
    

Categorização por descrição de produto - indústria de marketplaces

Em qualquer marketplace, os produtos expostos na plataforma são a vitrine dela. Produtos mal escritos, na categoria errada ou mal apresentados derrubam a conversão ou, pior ainda, arranham a reputação do marketplace. Para lidar com isso, muitas plataformas usam um processo de aprovação ou um sistema de reputação para reduzir conteúdo ruim.

Em marketplaces genéricos como Amazon ou Facebook, os anúncios cobrem uma variedade enorme. Nessa variedade entram muitos anúncios de baixa qualidade, com títulos genéricos, descrições imprecisas, texto todo em caixa alta ou coisa pior. Revisar cada anúncio na mão exigiria um time grande, o que encarece a operação e tira competitividade do marketplace.

Uma alternativa é usar os dados que você já tem para cruzar as informações do anúncio e gerar dados consistentes. Por exemplo:


uri = URI('https://api.openai.com/v1/chat/completions')
headers = {
  'Content-Type': 'application/json',
  'Authorization': "Bearer #{api_key}"
}

prompt = <<-PROMPT
You are a product classifier. Based on the product description, classify the product into any applicable categories
PROMPT
user_message = 'product description: Elevate your culinary experience with our Handcrafted Bamboo Cutting Board! Perfect for both novice cooks and seasoned chefs, this beautiful cutting board combines functionality with an eco-friendly design. Made from 100% natural bamboo, it’s not only sustainable but also adds a touch of elegance to your kitchen.'

data = {
  model: 'gpt-4o-mini',
  messages: [
    { role: 'system', content: prompt },
    { role: 'user', content: user_message }
  ],
  response_format: {
    type: 'json_schema',
    json_schema: {
      name: 'category_matcher',
      schema: {
        type: "object",
        properties: {
          category: {
            type: 'string',
            enum: ['kitchen', 'eletronic', 'house']
          },
          subCategory: {
            type: 'string',
            enum: ['Coffee Makers and Kettles', 'Pans', 'Household Utensils']
          }
        },
        required: ['category', 'subCategory'],
        additionalProperties: false
      },
      strict: true
    }
  }
}

response = Net::HTTP.post(uri, data.to_json, headers)
puts JSON.parse(response.body)['choices'][0]['message']['content']
# {"category":"kitchen","subCategory":"Household Utensils"}

Extração de dados como uma nova ferramenta

A técnica não é perfeita em acurácia e vai exigir reavaliação contínua, porque o resultado varia bastante conforme a versão do modelo, o prompt e a qualidade do que o usuário escreveu. Apesar dessa inconsistência, ela já entrega valor real para o negócio.

Extrair dados normalmente passa por ajustar o prompt, transformar o conteúdo do usuário ou, em último caso, fazer um fine-tuning. Esses ajustes são fáceis de aprender e difíceis de dominar. Mas os últimos anos trouxeram uma queda grande de custo e um salto de acurácia, o que deixou o processo bem mais tranquilo.

Esses exemplos mal arranham a superfície. Com orçamento, categorização rica, fluxos de trabalho, risk scoring, análise de contexto além do que o usuário escreveu e fine-tuning, os LLMs podem alcançar ou até superar a acurácia de um humano. É o que eu espero ver num futuro próximo.

Extração de dados é uma ferramenta que veio para ficar, mas, como toda ferramenta, precisa ser usada no lugar certo. Usada errado, ela perde a eficácia e o LLM passa a responder de forma imprevisível, aleatório feito loteria. O acerto está em entender as limitações e usar bem.

Limitações

LLMs podem "alucinar" e devolver dados errados ou inconsistentes. Isso é inerente à tecnologia; nenhum LLM está imune, e é improvável que algum fique. Em vez de se desesperar ou culpar o modelo, dá para usar algumas técnicas e chegar a resultados mais consistentes:

  • Peça o raciocínio: peça a justificativa por trás dos dados extraídos antes da resposta final. Isso empurra o modelo a alinhar os próximos tokens com o raciocínio que ele mesmo escreveu.
  • Evite excesso de contexto: mesmo com janelas de contexto grandes, mandar contexto demais cria um problema de agulha no palheiro. Use o mínimo de contexto possível e filtre, resuma ou transforme o texto de entrada antes para melhorar o resultado.
  • Não extraia dados demais de uma vez: tentar extrair muita coisa numa única chamada gera imprecisão ou viés, porque um dado acaba influenciando o outro. Foque em grupos de dados relacionados, como nome e sobrenome ou categoria e subcategoria. Faça várias chamadas se precisar; aplicar responsabilidade única aqui melhora a acurácia.
  • Evite cálculos: não conte com o LLM para fazer conta. Pense nele como o teclado do seu celular; pedir para ele calcular é como digitar "1+1" no celular e aceitar a próxima sugestão. Extraia o dado bruto e faça a conta fora. Se o texto traz um preço em outra moeda e você precisa dele em dólar, extraia o preço e a moeda e converta fora do LLM. Fuja dos atalhos, mesmo quando eles parecem funcionar no começo.
  • Cuidado com respostas vazias: só extraia um dado quando você tem certeza de que ele está no texto. Se você pedir a cor do carro e nenhum carro for mencionado, o LLM pode devolver uma cor aleatória ou "nenhuma". Sempre que der, confirme que o dado existe antes de extrair.
  • Considere valores fora da lista de enum: quando você trabalha com enum e o valor correto não está na lista, o LLM tende a escolher uma opção errada só para preencher. Para evitar isso, inclua alternativas como "outro" ou "nenhum" e reduza o overfitting nas respostas.
  • Seja criativo: use prompts preliminares para extrair dados mais simples antes de tentar os complexos. Reescreva a entrada do usuário para tirar o que não interessa e peça a mesma informação de formas diferentes. Não existe abordagem perfeita para todo caso, então experimente até achar o que funciona para você e compartilhe o que descobrir!

Se o seu problema não se resolve com essas dicas, talvez você não esteja usando a ferramenta certa. LLMs têm uma faixa enorme de eficácia; podem ser a solução perfeita ou virar um desastre. O que coloca o LLM em posição de dar certo é a implementação adequada e a escolha do problema. Lembre-se: em tecnologia não existe bala de prata.

O papel do software em escalar IA

Ainda estamos no começo de explorar o potencial de juntar IA+Engenheiro. Hoje quase toda solução está colada nos foundation models. Muitas empresas trabalham em soluções de segundo nível, inclusive as donas dos próprios foundation models, mas ainda não apareceu nenhum player claramente dominante nesse espaço.

Quanto mais fundo a gente entra em aplicações de IA, mais evidente fica a necessidade de funcionalidades, consistência, integrações e regras de negócio. Esses são problemas que hoje só o software resolve por completo.

Iceberg dos possíveis campos de IA, começando por 1. foundation models, 2. wrappers de prompt, 3. software inteligente e 4. software autônomo.

Imagem 2: Iceberg dos possíveis campos de IA, começando por 1. foundation models, 2. wrappers de prompt, 3. software inteligente e 4. software autônomo.