Pular para o conteúdo principal

LLM

  • LLM: Large Language Model (Cloude, OpenAI, Gemini, Llama, Mistral, etc.)

  • SML: Small Language Model

  • Modelo: Representação da realidade

  • Linguagem: Objeto do modelo é a linguagem

  • Large: Bilhões de parâmetros (pesos e vieses)

  • Generativo: Capacidade de gerar novos dados.

GPT​

  • GPT: Generative Pre-trained Transformer

  • Modelo Unigrama: Não considera o contexto, apenas a frequência das palavras. O que voce escreve não impacta na probabilidade da próxima palavra.

  • Modelo Bi-grama: Considera a palavra anterior para prever a próxima palavra. O que voce escreve impacta na probabilidade da próxima palavra.

  • Modelo N-grama: Considera as N palavras anteriores para prever a próxima palavra. O que voce escreve impacta na probabilidade da próxima palavra. (Os LLMs são modelos N-grama com N muito grande, o que permite considerar um contexto maior).

  • Token: Unidade básica de texto que o modelo processa. Pode ser uma palavra, parte de uma palavra ou até mesmo um caractere, dependendo do modelo.

  • Embedding: Representação numérica de palavras ou frases em um espaço vetorial, permitindo que o modelo compreenda relações semânticas entre elas.

  • Stemming: Processo de reduzir palavras às suas raízes ou formas básicas, removendo sufixos e prefixos. (lematização)

Todo modelo de linguagem tem Tokens e Stemming por trás.

Formula de Bayes​

Probabildidade = Chance de um evento ocorrer

P(A) = # Ocorrências de A / # Total de Eventos (espaço amostral)
  • P(A,B) -> Probabilidade conjunta de A e B ocorrerem juntos (A e B)
  • P(A|B) -> Probabilidade condicional de A ocorrer dado que B ocorreu (A dado B)
P(A,B) = P(A|B) * P(B) -> # A e B ocorrem / # Total de eventos

P(A|B) = P(A,B) / P(B) -> # A e B ocorrem / # onde B ocorre

P(A|B) = P(B|A) / P(B) * P(A) -> # A e B ocorrem / # onde B ocorre

P(B|A) / P(B) -> Permite atualizar o conhecimento da nova informação. É o aprendizado (learning) do modelo.

Aplicações​

  • Pela refelexão de um espectro eletromagnético, podemos inferir a probabilidade de um peixe ser salmão ou atum.
  • Pela análise de um texto, podemos inferir a probabilidade de um email ser spam ou não spam.
  • Pela análise de sintomas, podemos inferir a probabilidade de um paciente ter uma doença específica

Para plotar gráficos: https://desmos.com/calculator

O Modelo de Naive Bayes​

O modelo de Naive Bayes é um classificador probabilístico baseado no Teorema de Bayes, que assume a independência entre as características (features) do conjunto de dados. Apesar dessa suposição simplista, o modelo é eficaz em várias aplicações práticas, como filtragem de spam, análise de sentimentos e reconhecimento de texto.

  • É um modelo de classificação.

  • Independência de variáveis: Uma variável não influencia a outra. Exemplo: A cor do carro não influencia o modelo do carro. P(A,B) = P(A) * P(B). Se A e B são independentes, a probabilidade de A dado B é igual a probabilidade de A. P(A|B) = P(A).

  • Modelos servem para simplificar a realidade.

  • O modelo de Naive Bayes supõe que as variáveis wi possuem uma independência condicional, ou seja, a probabilidade de wi dado a classe c é independente das outras variáveis. P(wi|c, wj) = P(wi|c).

  • O Naive Bayes permite calcular e estimar eventos que não foram observados no conjunto de dados de treinamento.

Detector de SPAM​

  1. Carrega csv (messagens classificadas como spam ou ham)
  2. Tokeniza as frases (separa em tokens)
  3. Para melhorar a performance, aplica Stemming (reduz as palavras às suas raízes)
  4. Calcula o logaritmo da probabilidade de cada frase ser spam ou ham.
  5. Classifica novas mensagens com base nas probabilidades calculadas.

Classificação e Regressão​

  • Aprendizado Supervisionado: PrevisÕes -> dados -> categorizados (labeled). Dado um conjunto de dados com entradas e saídas conhecidas, o modelo aprende a mapear as entradas para as saídas corretas. Exemplo: Classificação de emails como spam ou não spam, reconhecimento de imagens, etc. Nosso cerebro funciona diferente (fewshot learning e reinforcement learning).

  • Classificação: Categorias discretas (spam ou não spam, gato ou cachorro, etc.) Ex. Classificação logística, SVM, Decision Trees, Random Forest, etc.

  • Regressão: Valores contínuos (preço de uma casa, temperatura, etc.)Ex. Regressão linear, regressão polinomial, etc.

O que é o Gen de GenAI?​

GenAI refere-se a uma classe de modelos de inteligência artificial projetados para gerar texto, imagens ou outros tipos de conteúdo de forma autônoma. Esses modelos são treinados em grandes conjuntos de dados e utilizam técnicas avançadas de aprendizado de máquina para criar conteúdo novo e original com base em padrões aprendidos durante o treinamento.

  • Modelo Discriminativo: Classifica ou rotula os dados de entrada. Exemplo: Classificação de emails como spam ou não spam.

  • Modelo Generativo: Gera novos dados semelhantes aos dados de treinamento. Exemplo: Geração de texto, imagens, etc.

  • Deep Learning: Subcampo do aprendizado de máquina que utiliza redes neurais profundas para modelar e resolver problemas complexos. Exemplo: Redes neurais convolucionais (CNNs) para reconhecimento de imagens, redes neurais recorrentes (RNNs) para processamento de linguagem natural, etc.

  • GAN: Generative Adversarial Network. Consiste em duas redes neurais que competem entre si: uma geradora (generator) que cria novos dados e uma discriminadora (discriminator) que avalia a autenticidade dos dados gerados. O objetivo é melhorar a qualidade dos dados gerados ao longo do tempo.

  • VAE: Variational Autoencoder. É um tipo de rede neural que aprende a codificar dados de entrada em um espaço latente e, em seguida, decodifica esse espaço latente para gerar novos dados semelhantes aos dados de entrada originais.

RAG (Retrieval-Augmented Generation)​

RAG é uma técnica que combina modelos de linguagem generativos com sistemas de recuperação de informações para melhorar a precisão e relevância das respostas geradas. Em vez de depender exclusivamente do conhecimento pré-treinado do modelo, o RAG utiliza uma base de dados externa para buscar informações relevantes em tempo real, que são então incorporadas na geração da resposta.

O RAG é uma estratégia de contexto: Outra estratégia é o fine-tuning, porém é mais custoso e demorado.

RAG: Pergunta -> Busca a informação relevante (Information Retrieval) -> Faz o prompt mais o contexto encontrado -> LLM Usa o contexto para gerar a resposta.

  • Bag of Words (BoW): Representação de texto onde a ordem das palavras é ignorada e apenas a frequência de cada palavra é considerada. Cada documento é representado como um vetor de contagem de palavras.
  • Lematização: Processo de reduzir palavras às suas formas básicas ou dicionário, considerando o contexto. Exemplo: "correndo", "correu" e "correr" são reduzidos a "correr".

N Documentos -> N Bags of Words -> N Vetores

  • TF: Term Frequency. Mede a frequência de uma palavra em um documento.
  • IDF: Inverse Document Frequency. Mede a importância de uma palavra em todo o conjunto de documentos. Palavra aparece muito em um documento, mas pouco em outros documentos, é uma palavra importante.

Um bom information retrieval é de suma importância para o RAG.

Problema que RAG visa resolver: Encontrar a informação correta em um grande volume de dados e gerar uma resposta precisa e relevante. Qual informação melhor se adequa a query realizada?

Embeddings​

Alebra Linear​

  • Vetores: Representação numérica de palavras ou frases em um espaço vetorial, permitindo que o modelo compreenda relações semânticas entre elas.
  • Modulo: Comprimento do vetor.
  • Produto Escalar: Mede a similaridade entre dois vetores. Quanto maior o produto escalar, mais semelhantes são os vetores.
  • Cosseno: Mede o ângulo entre dois vetores. Quanto menor o ângulo, mais semelhantes são os vetores.
  • Distância Euclidiana: Mede a distância entre dois vetores. Quanto menor a distância, mais semelhantes são os vetores.
  • Matriz: Conjunto de vetores organizados em linhas e colunas.
  • Transformação Linear: Operação que transforma um vetor em outro vetor, preservando a estrutura linear. Exemplo: Rotação, translação, escala, etc.
  • Autovalores e Autovetores: Propriedades de uma matriz que descrevem como a matriz transforma os vetores. Autovetores são vetores que não mudam de direção após a transformação, apenas seu comprimento é alterado pelo autovalor correspondente.

One-Hot Vectors​

  • Representação binária onde cada palavra é representada por um vetor com um único elemento "1" (indicando a presença da palavra) e todos os outros elementos "0". Exemplo: Para um vocabulário de 5 palavras, a palavra "gato" pode ser representada como [0, 1, 0, 0, 0] para a frase "o gato está no telhado".

  • Cada palavra é uma direção diferente em um espaço de alta dimensão (ortogonais entre si).

  • No One-Hot Vectors Todas palavras são ortogonais.

  • A distancia de todas as palavras é a mesma (sqrt(2)). Por isso, todo conteúdo semântico é perdido.

  • Não captura relações semânticas entre palavras.

  • Cada palavra é uma dimensão diferente. Então em textos longos, o espaço vetorial fica muito grande (curse of dimensionality) e se torna inviável.

Como capturar relações semânticas entre palavras?

  • Queremos que palavras semelhantes estejam próximas no espaço vetorial (theta ~ 0).
  • Queremos que palavras diferentes estejam distantes no espaço vetorial (theta ~ 90 graus).

Word2Vec​

  • Técnica de aprendizado de máquina que transforma palavras em vetores densos, capturando relações semânticas entre elas.
  • Utiliza redes neurais para aprender representações vetoriais de palavras com base em seu contexto.
  • Palavras semelhantes aparecem em contextos semelhantes, então seus vetores devem estar próximos no espaço vetorial.
  • Dois modelos principais: Continuous Bag of Words (CBOW) e Skip-Gram.
  • Skip-Gram: O garoto jogou bola -> Fixa a palavra garoto e olha as palavras no contexto (O, jogou, bola) para prever o vetor da palavra garoto.
  • CBOW: O garoto jogou bola -> Fixa as palavras no contexto (O, jogou, bola) para prever o vetor da palavra garoto.
  • Pega um espaço de altissima dimensão (todas as palavras do vocabulário) e reduz para um espaço de baixa dimensão (100, 200, 300 dimensões).

Site com explicação visual:

Operações com vetores:

model.most_similar(positive=['king', 'woman'], negative=['man'])
# Resultado: queen
# rei - homem + mulher = rainha

Sistema de memória​


from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import START, MessagesState, StateGraph

workflow = StateGraph(state_schema = MessagesState)

def call_mode(state: MessagesState):
response = llm.invoke(state["messages"])
return {"messages": response}

workflow.add_edge(START, "model")
workflow.add_node("model", call_mode)
memory = MemorySaver()
app = workflow.compile(memory)

query = "Oi! Meu nome é Leo"
config = {"configurable": {"thread_id": "abc123"}}
inpute_messages = [HumanMessage(query)]
output = app.invoke({"messages": inpute_messages}, config)
output["messages"][-1].pretty_print()
# E aí, Leo! Prazer em te conhecer. Em que posso te ajudar hoje? 😊
query = "Qual o meu nome?"
output = app.invoke({"messages": inpute_messages}, config)
output["messages"][-1].pretty_print()
# Seu nome é Leo! Você acabou de me dizer. 😉
config = {"configurable": {"thread_id": "xyz789"}}
output = app.invoke({"messages": inpute_messages}, config)
output["messages"][-1].pretty_print()
# Eu sou um modelo de linguagem grande, treinado pelo Google. Eu não tenho nome.

Fluxograma RAG​

No fundo é um sistema de busca (search engine) + LLM.

  • Naive Rag: Usa TF-IDF + Bag of Words (BoW) para buscar os pedaços relevantes no banco de dados.
  • Advanced Rag: Usa Embeddings + Similaridade de Cosseno para buscar os pedaços relevantes no banco de dados.
  • Graph RAG: Usa Grafos para buscar os pedaços relevantes no banco de dados.

Structured Outputs​

Formatação estruturada da resposta do modelo. Muito útil para extrair informações específicas e garantir que a resposta esteja em um formato consistente.

  • Pydantic: Biblioteca de validação de dados e configuração baseada em tipos para Python. Utilizada para definir e validar estruturas de dados complexas, garantindo que os dados atendam a requisitos específicos.
from pydantic import BaseModel, Field
from langchain_google_genai import ChatGoogleGenerativeAI
from google.colab import userdata
import os
import google.generativeai as genai
class Piada(BaseModel):
setup: str = Field(description="A introdução da piada")
punchline: str = Field(description="A parte engraçada da piada")
rating: int = Field("Avaliação de 1 a 10 da piada")

structured_llm = llm.with_structured_output(Piada)

repose = structured_llm.invoke("Me conte uma piada sobre gatos.")
print(repose.model_dump_json(indent=2))
# {
# "setup": "Por que os gatos são tão ruins no pôquer?",
# "punchline": "Porque sempre tem um ás na manga!",
# "rating": 5
# }

Tools​

  • As Tools não são chamadas pela LLM.
  • Antigamente faziam técnicas de prompts para a LLM construir o payload da API.
  • MCP: Model-Centric Programming
  • LLMS conseguem se comunicar com buscas, calculadoras, etc.
  • A LLM não chama a Tool, quem chama a Tool é o programa.
from langchain.tools import tool

@tool
def multiplique(a: float, b: float):
"""multipla dois numeros reais"""""
print(f"Multiplicando {a} por {b}")
return a * b

llm_with_tools = llm.bind_tools(multiplique)
result = llm_with_tools.invoke("Multiplique 1 por 2")
print(result)

tool_call = result.tool_calls[0]
tool_name = tool_call['name']
tool_args = tool_call['args']
print(tool_name)
print(tool_args)

if tool_name == multiplique.name:
result = multiplique.invoke(tool_args)
print(result)

Agents​

  • Agent: Agente que pode tomar decisões e executar ações com base em entradas e saídas.
  • tool: Tem que ter a capacidade de interagir com diversas ferramentas terceiras.

  • memoria: Armazenar e recuperar informação - aprende com experiências passadas.

  • planejamento: Estruturar e analisar o problema e quebrando em n passos.

  • LLM Ganhar a capacidade de planning e reasoning (raciocínio).

Estudo de caso​