1
resposta

[Projeto] 07 Faça como eu fiz: tokenizando textos e aplicando codificação posicional

  1. Tokenização: O Vocabulário Digital

from transformers import BertTokenizer
import torch

1. Carregar o Tokenizador pré-treinado (Multilingual para suportar Português)

tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')

text = "A inteligência artificial em Goiás está crescendo."

2. Tokenização e Codificação

inputs = tokenizer(text, add_special_tokens=True, padding='max_length', max_length=15, truncation=True)

ids = inputs['input_ids']
tokens = tokenizer.convert_ids_to_tokens(ids)

print(f"Tokens: {tokens}")
print(f"IDs: {ids}")

3. Decodificação (Validação de consistência)

decoded_text = tokenizer.decode(ids)
print(f"Texto Decodificado: {decoded_text}")

Analisando Special Tokens

print(f"ID do [CLS] (Início): {tokenizer.cls_token_id}")
print(f"ID do [SEP] (Separação): {tokenizer.sep_token_id}")
print(f"ID do [PAD] (Preenchimento): {tokenizer.pad_token_id}")

  1. Codificação Posicional (Positional Encoding)

Usando as funções de seno e cosseno para criar um "carimbo de tempo" único para cada posição

$$PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}})$$

import numpy as np
import matplotlib.pyplot as plt

def get_positional_encoding(max_seq_len, d_model):
"""
Implementação da Codificação Posicional Senoidal.
"""
encoding = np.zeros((max_seq_len, d_model))
for pos in range(max_seq_len):
for i in range(0, d_model, 2):
# Frequências diferentes para cada dimensão
denom = np.power(10000, (2 * i) / d_model)
encoding[pos, i] = np.sin(pos / denom)
encoding[pos, i + 1] = np.cos(pos / denom)
return encoding

Configurações: Sequência de 50 tokens, Modelo com 128 dimensões

pos_enc = get_positional_encoding(50, 128)

Visualização

plt.figure(figsize=(10, 8))
plt.pcolormesh(pos_enc, cmap='RdBu')
plt.xlabel('Dimensão do Embedding')
plt.ylabel('Posição do Token')
plt.colorbar(label='Valor de Ativação')
plt.title("Mapa de Calor: Codificação Posicional")
plt.show()

1 resposta

Olá, Moacir! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o tokenizador BERT Multilingual para transformar texto em IDs com Python, utilizou muito bem a decodificação e análise de special tokens para validar consistência e ainda compreendeu a importância da codificação posicional senoidal para representar a ordem dos tokens em modelos de linguagem.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!