Carregando
0x60Lição 7 de 18

Modele sequências curtas com n-gramas

Conte sequências de palavras próximas, gere texto a partir delas e atinja seus limites.

20 min Questionário com 7 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Conte bigramas e transforme as contagens em probabilidades da próxima palavra
  • Gere texto por amostragem de um modelo bigrama
  • Explique a esparsidade e por que a suavização é necessária

O teclado do seu telefone sugere a próxima palavra enquanto você digita. A maneira mais antiga de fazer isso é lembrar quais palavras tendem a seguir quais. Um n-grama é uma sequência de tokens n consecutivos - um bigrama tem dois - e um modelo de linguagem n-grama prevê a próxima palavra a partir da contagem dessas sequências curtas.

bigrams.py
words = "we learn language".split()
bigrams = list(zip(words, words[1:]))
print(bigrams)
Saída
[('we', 'learn'), ('learn', 'language')]

A partir da contagem de bigramas, a probabilidade da próxima palavra é P(next | previous) = count(previous next) / count(previous). Se “I” for seguido por “curtir” duas vezes e “ver” uma vez, então P(like | I) = 2/3.

Experimente

Até 15 XP

Escreva com um modelo bigrama

Este modelo foi treinado no pequeno texto que você pode revelar abaixo. Construa uma frase palavra por palavra:

  • Jogue os dados algumas vezes e recomece a cada vez: alguma vez produz uma frase que não estava no texto de treinamento?
  • Escolha sempre o mais provável: o que acontece com a variedade?
  • As frases fazem sentido além de duas palavras por vez?

the

Depois de “the”, o texto de treinamento continua com… (escolha uma opção)

O problema da escassez

A linguagem é infinitamente criativa, portanto a maioria dos pares de palavras possíveis nunca aparece em nenhum corpus. Um bigrama invisível tem probabilidade zero, o que significa que o modelo diz que uma frase perfeitamente correta é impossível.

Suavização corrige isso dando aos pares invisíveis um pouco de probabilidade. A versão mais simples, suavização add-one (Laplace), finge que cada par foi visto uma vez extra: P(next | previous) = (count(previous next) + 1) / (count(previous) + V), onde V é o tamanho do vocabulário.

N-gramas mais longos capturam mais contexto (“Nova York” versus “carro novo”), mas tornam a dispersão muito pior. Os modelos de linguagem neural substituem a contagem por representações aprendidas, e é assim que eles lidam com contextos de milhares de tokens.

Principais conclusões

  • Um modelo bigrama prevê a próxima palavra a partir das contagens: count(previous next) / count(previous).

  • A amostragem dá variedade; sempre pegar a palavra principal resulta em texto repetitivo.

  • Sequências invisíveis obtêm probabilidade zero sem suavização, e n-gramas mais longos são cada vez mais esparsos.

Quiz da aula

7 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: aplique NLP com Python

Experimente cada ideia de processamento de texto em Python, execute com entradas de exemplo e use os resultados para ver onde o método funciona ou falha.

Exercício 1

Conte pares de palavras adjacentes

+25 XP

Leia uma linha, coloque-a em minúscula, extraia palavras alfabéticas, conte bigramas adjacentes e imprima cada par em ordem alfabética como first second: count.

  • Par repetido
  • Dois pares
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Exercício 2

Preveja a próxima palavra

+25 XP

A primeira linha é um texto de treinamento. A segunda linha é uma palavra. Coloque o texto em letras minúsculas e extraia as palavras alfabéticas e, em seguida, imprima cada palavra que segue a palavra fornecida, provavelmente primeiro (empatadas em ordem alfabética), como word: probability com a probabilidade arredondada para 2 casas decimais. Se a palavra nunca for seguida por nada, imprima unseen.

  • Duas continuações
  • Uma continuação
  • Palavra invisível
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…