Modele sequências curtas com n-gramas
Conte sequências de palavras próximas, gere texto a partir delas e atinja seus limites.
- 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.
words = "we learn language".split()
bigrams = list(zip(words, words[1:]))
print(bigrams)[('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 XPEscreva 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.
Conte pares de palavras adjacentes
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
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.
Preveja a próxima palavra
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
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…