Tokens

Tokens Tokens

Tokenslink image 2

Agora que os LLLMs estão na moda, continuamos ouvindo sobre o número de tokens suportados por cada modelo, mas o que são tokens? São as unidades mínimas de representação de palavras.

Este caderno foi traduzido automaticamente para torná-lo acessível a mais pessoas, por favor me avise se você vir algum erro de digitação..

Para explicar o que são tokens, vamos primeiro dar uma olhada em um exemplo prático: vamos usar o tokenizador da OpenAI, chamado [tiktoken] (https://github.com/openai/tiktoken).

Então, primeiro instalamos o pacote:

pip install tiktoken
      ```
      

Depois de instalado, criamos um tokenizador usando o modelo cl100k_base, que o notebook de exemplo [How to count tokens with tiktoken] (https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb) explica que é usado pelos modelos gpt-4, gpt-3.5-turbo e text-embedding-ada-002.

	
import tiktoken
encoder = tiktoken.get_encoding("cl100k_base")
Copy

Agora, criamos uma palavra de amostra tara e a tokenizamos

	
import tiktoken
encoder = tiktoken.get_encoding("cl100k_base")
example_word = "breakdown"
Copy

E nós o simbolizamos

	
import tiktoken
encoder = tiktoken.get_encoding("cl100k_base")
example_word = "breakdown"
tokens = encoder.encode(example_word)
tokens
Copy
	
[9137, 2996]

A palavra foi dividida em 2 tokens, o 9137 e o 2996. Vamos ver a quais palavras elas correspondem

	
word1 = encoder.decode([tokens[0]])
word2 = encoder.decode([tokens[1]])
word1, word2
Copy
	
('break', 'down')

O tokenizador OpenAI dividiu a palavra breakdown nas palavras break e down. Ou seja, ele dividiu a palavra em duas palavras mais simples.

Isso é importante porque, quando se diz que um LLM suporta x tokens`, não significa que ele suporta x palavras, mas que suporta x unidades mínimas de representação de palavras.

Se você tiver um texto e quiser ver o número de tokens que ele tem para o tokenizador OpenAI, poderá visualizá-lo na página Tokenizer, que mostra cada token em uma cor diferente.

tokenizer

Vimos o tokenizador OpenAI, mas cada LLM poderá usar outro.

Como dissemos, os tokens são as unidades mínimas de representação de palavras, portanto, vamos ver quantos tokens diferentes o tiktoken tem.

	
n_vocab = encoder.n_vocab
print(f"Vocab size: {n_vocab}")
Copy
	
Vocab size: 100277

Vamos ver como ele tokeniza outros tipos de palavras.

	
def encode_decode(word):
tokens = encoder.encode(word)
decode_tokens = []
for token in tokens:
decode_tokens.append(encoder.decode([token]))
return tokens, decode_tokens
Copy
	
def encode_decode(word):
tokens = encoder.encode(word)
decode_tokens = []
for token in tokens:
decode_tokens.append(encoder.decode([token]))
return tokens, decode_tokens
word = "dog"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "tomorrow..."
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "artificial intelligence"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "Python"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "12/25/2023"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "😊"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
Copy
	
Word: dog ==> tokens: [18964], decode_tokens: ['dog']
Word: tomorrow... ==> tokens: [38501, 7924, 1131], decode_tokens: ['tom', 'orrow', '...']
Word: artificial intelligence ==> tokens: [472, 16895, 11478], decode_tokens: ['art', 'ificial', ' intelligence']
Word: Python ==> tokens: [31380], decode_tokens: ['Python']
Word: 12/25/2023 ==> tokens: [717, 14, 914, 14, 2366, 18], decode_tokens: ['12', '/', '25', '/', '202', '3']
Word: 😊 ==> tokens: [76460, 232], decode_tokens: ['�', '�']

Por fim, vamos dar uma olhada em palavras em outro idioma

	
word = "perro"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "perra"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "mañana..."
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "inteligencia artificial"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "Python"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "12/25/2023"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "😊"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
Copy
	
Word: perro ==> tokens: [716, 299], decode_tokens: ['per', 'ro']
Word: perra ==> tokens: [79, 14210], decode_tokens: ['p', 'erra']
Word: mañana... ==> tokens: [1764, 88184, 1131], decode_tokens: ['ma', 'ñana', '...']
Word: inteligencia artificial ==> tokens: [396, 39567, 8968, 21075], decode_tokens: ['int', 'elig', 'encia', ' artificial']
Word: Python ==> tokens: [31380], decode_tokens: ['Python']
Word: 12/25/2023 ==> tokens: [717, 14, 914, 14, 2366, 18], decode_tokens: ['12', '/', '25', '/', '202', '3']
Word: 😊 ==> tokens: [76460, 232], decode_tokens: ['�', '�']

Podemos ver que, para palavras semelhantes, mais tokens são gerados em espanhol do que em inglês, portanto, para o mesmo texto, com um número semelhante de palavras, o número de tokens será maior em espanhol do que em inglês.

Continuar lendo

DoLa – Decoding by Contrasting Layers Improves Factuality in Large Language Models

DoLa – Decoding by Contrasting Layers Improves Factuality in Large Language Models

Você já conversou com um LLM e ele lhe respondeu algo que parece ter bebido café de máquina a noite toda? 😂 Isso é o que chamamos de alucinação no mundo dos LLMs! Mas não se preocupe, pois não é que seu modelo de linguagem esteja louco (embora às vezes possa parecer isso 🤪). A verdade é que os LLMs podem ser um pouco... criativos quando se trata de gerar texto. Mas graças ao DoLa, um método que usa camadas de contraste para melhorar a viabilidade dos LLMs, podemos evitar que nossos modelos de linguagem se transformem em escritores de ficção científica 😂. Nesta publicação, explicarei como o DoLa funciona e mostrarei um exemplo de código para que você possa entender melhor como tornar seus LLMs mais confiáveis e menos propensos a inventar histórias. Vamos salvar nossos LLMs da loucura e torná-los mais úteis! 🚀

Últimos posts -->

Você viu esses projetos?

Subtify

Subtify Subtify

Gerador de legendas para vídeos no idioma que você desejar. Além disso, coloca uma legenda de cor diferente para cada pessoa

Ver todos os projetos -->

Quer aplicar IA no seu projeto? Entre em contato!

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Ver todos os contêineres -->

Quer aplicar IA no seu projeto? Entre em contato!

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

Dataset com piadas em inglês

opus100

Dataset com traduções de inglês para espanhol

netflix_titles

Dataset com filmes e séries da Netflix

Ver mais datasets -->