Rotulagem de Sequências
Visão geral
Rotulagem de sequência (sequence labeling) é uma tarefa central em Processamento de Linguagem Natural (PLN; Natural Language Processing, NLP) em que o objetivo é atribuir um rótulo a cada elemento de uma sequência de entrada. Em texto, os elementos geralmente são tokens (tokens) (palavras ou subpalavras (subwords)), e os rótulos representam categorias linguísticas ou semânticas, como etiquetas de classe gramatical (part-of-speech tags), tipos de entidade ou limites de chunks.
Ao contrário da classificação independente de cada token, a rotulagem de sequência frequentemente envolve restrições estruturadas (structured constraints) e dependências entre rótulos vizinhos (dependencies between neighboring labels). Por exemplo, em reconhecimento de entidades nomeadas (named entity recognition, NER), um segmento de entidade normalmente começa com uma tag “B-” e continua com tags “I-”; ele não deve começar com “I-” sem um “B-” anterior.
A rotulagem de sequência sustenta muitos sistemas práticos de extração de informações, busca, I.A. conversacional (conversational AI) e compreensão de documentos.
Tarefas relacionadas e contexto:
- A rotulagem de sequência é um problema em nível de token, enquanto Classificação de Texto geralmente atribui um único rótulo a uma sequência inteira.
- Uma aplicação importante é Reconhecimento de Entidades Nomeadas, que frequentemente é formulado como rotulagem de sequência.
Definição do problema
Considere uma sequência de entrada:
[ \mathbf{x} = (x_1, x_2, \dots, x_T) ]
em que (x_t) é o token (ou a entrada do passo de tempo) na posição (t). O modelo prediz uma sequência de rótulos:
[ \mathbf{y} = (y_1, y_2, \dots, y_T) ]
em que cada (y_t \in \mathcal{Y}) é extraído de um conjunto finito de rótulos (por exemplo, tags POS, tags BIO etc.).
Rotulagem estruturada vs. independente
Uma abordagem ingênua prediz cada rótulo de forma independente:
[ p(\mathbf{y} \mid \mathbf{x}) = \prod_{t=1}^T p(y_t \mid \mathbf{x}) ]
Isso pode funcionar surpreendentemente bem com codificadores contextuais (contextual encoders) modernos, mas ignora dependências explícitas entre rótulos. Modelos estruturados (structured models), em vez disso, definem:
[ p(\mathbf{y} \mid \mathbf{x}) \propto \exp\left( s(\mathbf{x}, \mathbf{y}) \right) ]
em que a pontuação (s(\mathbf{x}, \mathbf{y})) inclui interações entre rótulos adjacentes (ou estruturas mais complexas). Essa é a base de modelos como Campos Aleatórios Condicionais (Conditional Random Fields, CRFs).
Tarefas comuns de rotulagem de sequência
Etiquetagem de classe gramatical (part-of-speech tagging, POS)
Atribui uma categoria sintática a cada token (NOUN, VERB, ADJ, …). Exemplo:
“Time flies like an arrow”
- Time/NOUN
- flies/VERB
- like/ADP
- an/DET
- arrow/NOUN
A etiquetagem POS é fundamental para análise sintática e para alguns pipelines de extração de informações.
Reconhecimento de entidades nomeadas (NER)
Rotula tokens como parte de entidades e atribui tipos de entidade (PERSON, ORG, LOC, …). Frequentemente usa esquemas de tags orientados a segmentos como BIO/BILOU (cobertos abaixo). Exemplo:
“Ada Lovelace worked at the Royal Society.”
- Ada → B-PER
- Lovelace → I-PER
- Royal → B-ORG
- Society → I-ORG
NER é coberto com mais detalhe em Reconhecimento de Entidades Nomeadas, mas a rotulagem de sequência é uma de suas formulações padrão.
Segmentação em constituintes (chunking; shallow parsing)
Identifica sintagmas básicos (NP, VP, PP) sem uma árvore de análise completa:
“He reckons the current account deficit will narrow”
- He → B-NP
- reckons → B-VP
- the → B-NP
- current → I-NP
- account → I-NP
- deficit → I-NP
- will → B-VP
- narrow → I-VP
A segmentação em constituintes é comum em pipelines clássicos de PLN e em alguns sistemas de extração.
Outros exemplos
- Preenchimento de slots (slot filling) em diálogo orientado a tarefas (rotular tokens com slots como B-from_city, I-from_city).
- Etiquetagem morfológica (morphological tagging) (caso, gênero, número, tempo verbal etc.), comum em línguas com morfologia rica.
- Tarefas de segmentação (segmentation) como segmentação de palavras em chinês (rotulagem de sequência sobre caracteres).
- Extração de expressões-chave e termos (keyphrase and term extraction) via tags de segmento.
- Desidentificação (de-identification) em texto clínico (marcar segmentos de PHI).
Esquemas de rotulagem para segmentos: BIO, IOB2, BILOU
Muitas tarefas de rotulagem de sequência envolvem identificar segmentos (spans) (intervalos contíguos de tokens). Para representar segmentos usando rótulos por token, o PLN comumente usa esquemas de marcação (tagging schemes).
BIO / IOB2
O esquema BIO usa:
- B-X: início de uma entidade/chunk do tipo X
- I-X: dentro (continuação) de uma entidade/chunk do tipo X
- O: fora de qualquer segmento
Frase de exemplo:
“John Smith lives in New York City.”
Usando BIO para PERSON e LOCATION:
John B-PER
Smith I-PER
lives O
in O
New B-LOC
York I-LOC
City I-LOC
. O
Restrições (informais, mas importantes):
I-Xdeve seguirB-XouI-X(mesmo X), e nãoOou um tipo diferente.- Uma nova entidade começa com
B-X.
Na prática, modelos às vezes predizem sequências inválidas (por exemplo, I-LOC após O) a menos que restrições sejam aplicadas (por exemplo, via decodificação com CRF).
BILOU (ou BIOES)
BILOU adiciona marcadores explícitos para token único e final:
- B-X: início
- I-X: dentro
- L-X: último token do segmento
- U-X: segmento de comprimento unitário (token único)
- O: fora
BILOU pode melhorar a acurácia de limites porque modela explicitamente finais de segmentos e segmentos de token único.
Exemplo:
John U-PER
Smith U-PER (if treated as separate, but usually "John Smith" is one PER)
lives O
in O
New B-LOC
York I-LOC
City L-LOC
. O
Se “John Smith” for um único segmento PERSON, seria:
John B-PER
Smith L-PER
Escolhendo um esquema
- BIO é amplamente usado e simples.
- BILOU/BIOES pode trazer melhor desempenho de limites de segmentos, especialmente quando os comprimentos das entidades variam e segmentos de token único são comuns.
- Scripts de avaliação e conjuntos de dados podem assumir um esquema específico; a conversão costuma ser simples.
Abordagens de modelagem
A rotulagem de sequência tem uma longa história, evoluindo de modelos probabilísticos generativos para modelos discriminativos estruturados, e então para codificadores neurais (RNNs, Transformadores), frequentemente com camadas de decodificação estruturada.
Modelos Ocultos de Markov (Hidden Markov Models, HMMs)
Modelos Ocultos de Markov são uma abordagem generativa clássica:
[ p(\mathbf{x}, \mathbf{y}) = p(y_1)\prod_{t=2}^T p(y_t \mid y_{t-1}) \prod_{t=1}^T p(x_t \mid y_t) ]
- A sequência de rótulos (\mathbf{y}) forma uma cadeia de Markov (geralmente de primeira ordem).
- Cada token (x_t) é gerado a partir do rótulo atual (y_t).
A decodificação (decoding) normalmente usa o algoritmo de Viterbi (Viterbi algorithm) para encontrar:
[ \arg\max_{\mathbf{y}} p(\mathbf{x}, \mathbf{y}) ]
Prós:
- Conceitualmente claro, decodificação eficiente. Contras:
- Suposições fortes de independência (observações condicionalmente independentes dado os rótulos).
- Difícil incorporar atributos ricos e sobrepostos (sem extensões).
Veja também: Modelos Ocultos de Markov
Campos Aleatórios Condicionais (CRFs)
CRFs de cadeia linear (linear-chain CRFs) modelam diretamente a distribuição condicional:
[ p(\mathbf{y} \mid \mathbf{x}) = \frac{1}{Z(\mathbf{x})} \exp\left(\sum_{t=1}^T \phi(y_t, \mathbf{x}, t) + \sum_{t=2}^T \psi(y_{t-1}, y_t)\right) ]
- (\phi) são pontuações de emissão (emission) (token/posição) baseadas em atributos de entrada.
- (\psi) são pontuações de transição (transition) entre rótulos.
- (Z(\mathbf{x})) é uma constante de normalização (função de partição (partition function)).
CRFs são populares porque:
- Usam atributos ricos (ou atributos neurais) sem serem generativos.
- Impõem sequências de rótulos consistentes via decodificação estruturada (frequentemente Viterbi).
- Evitam alguns problemas como o problema de viés de rótulo (label bias problem) visto em modelos normalizados localmente.
O uso moderno frequentemente combina um codificador neural com uma “cabeça” de CRF (ver abaixo).
Veja também: Campos Aleatórios Condicionais
Rotuladores baseados em RNN (LSTM/GRU)
A rotulagem de sequência neural se popularizou com codificadores LSTM bidirecionais (BiLSTM):
- Mapear tokens para embeddings (por exemplo, embeddings de palavra + caractere).
- Rodar uma rede neural recorrente bidirecional (bidirectional RNN) para obter representações contextuais (h_t).
- Predizer rótulos com um classificador por token:
[ p(y_t \mid \mathbf{x}) = \text{softmax}(W h_t + b) ]
Isso pode ser treinado com perda de entropia cruzada (cross-entropy loss) no nível de token (veja Perda de Entropia Cruzada).
Aprimoramento comum: BiLSTM-CRF, em que a LSTM bidirecional produz pontuações de emissão e uma camada de CRF realiza decodificação estruturada. Isso frequentemente melhora a consistência da sequência.
Veja também: Redes Neurais Recorrentes, Redes Neurais
Classificação por token baseada em Transformadores
Hoje, a abordagem dominante usa Transformadores pré-treinados (pretrained Transformers) (por exemplo, BERT, RoBERTa, DeBERTa) como codificadores contextuais (veja Arquitetura Transformer, Modelos de Linguagem).
Um modelo típico de classificação por token:
- Tokenizar a entrada em subpalavras (WordPiece/BPE).
- Codificar com um Transformador para obter vetores contextuais.
- Aplicar uma camada linear + softmax para predizer um rótulo por token.
Tokenização em subpalavras e alinhamento de rótulos
Transformadores geralmente operam com tokens de subpalavra (subword tokens), enquanto os rótulos frequentemente são definidos no nível de palavra (word). Você precisa alinhar rótulos às subpalavras; estratégias comuns incluem:
- Rotular apenas a primeira subpalavra e mascarar a perda nas subpalavras subsequentes.
- Propagar o rótulo da palavra para todas as subpalavras (pode funcionar, mas pode distorcer limites de segmentos).
- Converter conjuntos de dados para segmentos em nível de subpalavra com cuidado.
Example (WordPiece-like):
Text: "unbelievable"
Subwords: ["un", "##bel", "##iev", "##able"]
Label (word-level): B-ADJ (hypothetical)
Training: label "un" as B-ADJ, mask others (or assign I-ADJ depending on scheme)
Adicionando um CRF sobre um Transformador
Uma abordagem comum de “melhor dos dois mundos” é:
- O Transformador fornece representações contextuais fortes.
- A camada de CRF melhora a consistência estruturada (validade BIO, transições mais suaves).
Isso é especialmente útil quando:
- Os dados de treinamento são limitados.
- Restrições de rótulo importam.
- Você se importa com limites exatos de segmentos.
Alternativas: formulações baseadas em segmentos e sequência a sequência
Alguns sistemas de NER evitam marcação BIO ao predizer segmentos diretamente (índices de início/fim) ou ao gerar saídas estruturadas com um modelo sequência a sequência (seq2seq). Essas abordagens podem ajudar com:
- Entidades aninhadas (nested entities)
- Segmentos sobrepostos (overlapping spans)
- Formatos de saída mais flexíveis
Mas a rotulagem de sequência no estilo BIO continua sendo uma linha de base padrão devido à sua simplicidade e eficiência.
Decodificação e restrições
Decodificação gulosa vs. global
Com saídas softmax independentes por token, uma estratégia comum de decodificação é a gulosa (greedy): escolher o rótulo de maior probabilidade em cada posição. Isso é rápido, mas pode produzir sequências inválidas (por exemplo, I-PER após O).
Modelos estruturados (CRF) usam decodificação global (global decoding) (tipicamente Viterbi) para encontrar a melhor sequência de rótulos sob restrições de transição.
Impor legalidade BIO/BILOU
Mesmo sem um CRF, você pode impor restrições no momento da decodificação:
- Proibindo transições ilegais (restrições de estado finito (finite-state constraints)).
- Usando programação dinâmica (dynamic programming) para encontrar o melhor caminho válido.
- Aplicando heurísticas (heuristics) para “consertar” sequências inválidas (menos fundamentado).
CRFs são uma forma comum e fundamentada de incorporar tais restrições.
Objetivos de treinamento (visão prática)
Entropia cruzada no nível de token (independente)
Se estiver usando softmax por token, a perda é:
[ \mathcal{L} = -\sum_{t=1}^T \log p(y_t \mid \mathbf{x}) ]
Prós: simples, rápida. Contras: não modela explicitamente transições de rótulo.
Log-verossimilhança negativa do CRF (estruturada)
O treinamento de CRF maximiza a log-verossimilhança da sequência ouro:
[ \mathcal{L} = -\log p(\mathbf{y} \mid \mathbf{x}) ]
Isso incentiva sequências globais corretas, mas o treinamento é um pouco mais complexo (requer calcular a função de partição com programação dinâmica).
Exemplo prático: NER com marcação BIO
Dado:
“Apple hired Tim Cook in 2011.”
Possíveis tags BIO para ORG, PER, DATE:
Apple B-ORG
hired O
Tim B-PER
Cook I-PER
in O
2011 B-DATE
. O
Pipeline típico:
- Anotar dados no formato BIO ou BILOU.
- Treinar um classificador de tokens com Transformador (opcionalmente + CRF).
- Decodificar tags para novas frases.
- Converter as tags preditas em segmentos:
- ORG: “Apple”
- PER: “Tim Cook”
- DATE: “2011”
A extração de segmentos é determinística dada a sequência de tags (assumindo legalidade).
Avaliação
A avaliação depende de você se importar com correção por token ou correção no nível de segmento.
Métricas no nível de token
- Acurácia por token: fração de tokens com rótulos corretos.
- Precisão/revocação/F1 no nível de token podem ser usadas, mas são menos comuns para tarefas de segmentos porque “O” domina.
A acurácia por token pode ser enganosa para NER porque a maioria dos tokens é “O”.
Métricas no nível de segmento/entidade (padrão para NER/chunking)
Para tarefas de segmentos, a avaliação mais comum é o F1 de entidade por correspondência exata (exact-match entity F1):
- Uma entidade predita é correta somente se:
- Os limites do segmento coincidirem exatamente (token inicial/final), e
- O tipo de entidade coincidir.
Calcule:
- Precisão = entidades_corretas_preditas / entidades_preditas
- Revocação = entidades_corretas_preditas / entidades_ouro
- F1 = média harmônica (harmonic mean)
Esse é o estilo típico de avaliação “CoNLL” para NER.
Média micro vs. macro
- F1 micro agrega contagens em todas as classes (padrão comum).
- F1 macro tira a média do F1 por classe (mais sensível a classes raras).
Armadilhas comuns
- Erros de limite: “New York” vs “New York City” conta como errado sob correspondência exata.
- Conversões de esquema de marcação: garanta que o script de avaliação espera BIO vs BILOU.
- Alinhamento de subpalavras: avalie no nível de palavra quando os rótulos ouro são por palavra; caso contrário, os números podem ficar distorcidos.
- Entidades aninhadas/sobrepostas: a marcação BIO não representa sobreposições de forma limpa; a avaliação precisa corresponder à definição da tarefa.
Veja também: Métricas de Avaliação
Dados e considerações de anotação
Diretrizes de anotação importam
O desempenho em rotulagem de sequência frequentemente é limitado não pela escolha do modelo, mas por:
- Definições ambíguas de entidade/tipo (“produto” vs “organização”)
- Convenções de limite (incluir determinantes? incluir títulos?)
- Consistência entre anotadores
Diretrizes de alta qualidade e adjudicação são críticas para resultados supervisionados fortes.
Desbalanceamento de classes
Muitos rótulos são esparsos em relação a “O”. Estratégias comuns:
- Usar métricas apropriadas (F1 no nível de entidade).
- Ponderação de perda ou variantes de perda focal (focal loss) (com cuidado; nem sempre necessário com Transformadores).
- Aumento de dados (data augmentation) ou supervisão fraca (weak supervision) (quando apropriado).
Adaptação de domínio
Um modelo treinado em NER de notícias frequentemente piora em texto biomédico ou jurídico. Soluções práticas:
- Continuar o pré-treinamento em texto do domínio.
- Fazer ajuste fino (fine-tuning) em dados rotulados do domínio.
- Usar modelos pré-treinados específicos do domínio quando disponíveis.
Aplicações
A rotulagem de sequência é um bloco de construção para muitos sistemas:
- Extração de informações: extrair pessoas, organizações, datas, nomes de produtos, cláusulas contratuais.
- Busca e recuperação: melhorar indexação extraindo campos estruturados.
- I.A. conversacional: preenchimento de slots e extração de entidades a partir de consultas de usuários.
- Conformidade e privacidade: detectar e ocultar segmentos sensíveis (PII/PHI).
- Normalização de texto e análise linguística: tags POS/morfologia alimentam parsers a jusante.
Como as saídas são alinhadas a tokens, a rotulagem de sequência se integra bem com destaque em interfaces para usuários, trilhas de auditoria e pós-processamento baseado em regras.
Notas de implementação e boas práticas
- Comece com uma linha de base forte de Transformador (classificação por token).
- Use F1 no nível de entidade para tarefas de segmentos; não confie em acurácia por token.
- Seja explícito sobre seu esquema de tags (BIO vs BILOU) e mantenha-o consistente em treinamento/inferência/avaliação.
- Trate a tokenização com cuidado (alinhamento palavra vs subpalavra).
- Considere adicionar uma camada de CRF quando restrições de rótulo e consistência de limites forem críticas, ou quando os dados forem limitados.
- Quando erros forem custosos, incorpore restrições e pós-processamento (por exemplo, checagens por dicionário, restrições de tipo) enquanto mede o impacto ponta a ponta.
Resumo
A rotulagem de sequência atribui um rótulo a cada token/passo de tempo em uma sequência, frequentemente sob restrições estruturadas. Ela viabiliza tarefas centrais de PLN como etiquetagem POS, segmentação em constituintes e NER, comumente usando codificações de segmentos como BIO ou BILOU. As abordagens de modelagem vão de modelos probabilísticos clássicos (HMMs) a modelos discriminativos estruturados (CRFs), até arquiteturas neurais modernas (LSTMs bidirecionais e, especialmente, Transformadores), às vezes combinadas com decodificação por CRF para consistência global. Uma avaliação adequada — especialmente F1 no nível de segmento para tarefas de entidades/chunks — e o tratamento cuidadoso de tokenização e esquemas de rótulo são essenciais para construir sistemas confiáveis.