A tokenización é a porta de entrada a través da cal o texto en bruto se transforma nun formato utilizable por grandes modelos de linguaxe (LLM) como GPT. Actúa como ponte entre o contido lexible por humanos e os datos numéricos que procesan os modelos. Antes de que un modelo poida comprender ou xerar texto coherente, debe dividir a entrada en unidades máis pequenas chamadas tokens .
Nas arquitecturas GPT, a tokenización é fundamental para o rendemento e as capacidades do modelo, e inflúe na eficiencia, no uso da xanela de contexto e na calidade da saída. A tokenización é o proceso de dividir o texto en unidades máis pequenas chamadas tokens, que poden representar palabras, subpalabras, caracteres ou mesmo símbolos especiais. Estes tokens son os bloques básicos que procesa o modelo. A forma en que se tokeniza o texto incide directamente coa eficacia na que o modelo pode xestionar os datos, a cantidade de información que cabe na súa ventá de contexto e a calidade das respostas que xera.
A xanela de contexto é o número máximo de tokens que o modelo pode procesar nunha única operación, incluíndo tanto a entrada como a saída xerada. Por exemplo, un modelo cunha xanela de contexto de 32.000 tokens debe axustarse a todo (o texto de entrada, as instrucións do sistema e a resposta do modelo) dentro deste límite. A tokenización eficiente reduce o número de tokens necesarios para representar un texto determinado, o que lle permite incluír máis contido ou obter saídas máis longas e ricas sen superar o límite. A mala tokenización, por outra banda, pode inflar o número de tokens innecesariamente, desperdiciando espazo valioso na xanela de contexto e limitando a usabilidade do modelo para tarefas máis longas.
Unha vez que se tokeniza o texto, cada ficha convértese nunha incorporación numérica : unha representación matemática nun espazo de gran dimensión (a miúdo centos ou miles de dimensións). Esta incorporación recolle o significado e as relacións do token no contexto de todo o vocabulario. Por exemplo, as fichas de palabras similares como "correr" e "correr" colocaranse máis preto neste espazo que as fichas non relacionadas como "correr" e "table". Estas incorporacións permiten ao modelo comprender a secuencia de tokens e predecir o seguinte token máis probable durante a xeración de texto. Este proceso é o que permite a GPT producir resultados coherentes e relevantes contextualmente, xa sexa respondendo a unha consulta, completando unha frase ou xerando contido creativo.
En esencia, a tokenización non é só un paso de preprocesamento, é un facilitador fundamental para que os modelos GPT funcionen de forma eficiente e proporcionen resultados de alta calidade.
A tokenización non é un proceso único; varía dependendo de regras predefinidas ou algoritmos deseñados para dividir o texto en unidades manexables chamadas tokens.
Aquí tes unha ollada máis profunda sobre como funciona:
División
Isto implica dividir o texto en unidades máis pequenas como palabras, subpalabras ou caracteres. Os LLM modernos adoitan depender da tokenización de subpalabras porque ofrece un equilibrio entre eficiencia e robustez. Este equilibrio xorde porque a tokenización de subpalabras pode manexar palabras raras ou descoñecidas dividíndoas en compoñentes máis pequenos e máis comúns, mentres segue codificando palabras frecuentes como símbolos únicos.
Exemplo :
Considere a palabra unhappiness
. Usando a tokenización de subpalabras, pode dividirse en:
un
, happi
e ness
.Este enfoque garante:
un
e ness
reúsanse en diferentes palabras, reducindo o tamaño do vocabulario.unhappiness
aínda se poden procesar dividíndoas en subcompoñentes coñecidos, evitando problemas fóra do vocabulario.
En termos prácticos, isto permite que os modelos xeneralicen mellor en diversas entradas de texto sen inchar excesivamente o vocabulario.
Codificación
A codificación atribúe un número enteiro único a cada token en base a un vocabulario predefinido: unha colección de todos os posibles tokens que recoñece un modelo. No contexto de GPT e modelos similares, o vocabulario créase durante o adestramento e representa o conxunto de subpalabras (ou caracteres) que o modelo utiliza para comprender e xerar texto.
Por exemplo, en GPT:
hello
pode ser un único símbolo cunha representación enteira como 1356
.micropaleontology
pode dividirse en fichas de subpalabras como micro
, paleo
e ntology
, cada unha co seu propio número enteiro.
Para ChatGPT, isto significa que cando un usuario introduce texto, o tokenizer asigna a cadea de entrada nunha secuencia de enteiros baseada no vocabulario do modelo. Esta secuencia é entón procesada pola rede neuronal. O tamaño do vocabulario inflúe no uso da memoria e na eficiencia computacional do modelo, logrando un equilibrio entre o manexo de construcións de linguaxe complexa e o mantemento do sistema.
Decodificación
A decodificación é o proceso inverso: converter unha secuencia de enteiros simbólicos de novo en texto lexible por humanos. Para a tokenización de subpalabras, isto implica reensamblar subpalabras en palabras completas sempre que sexa posible.
Como funciona :
Exemplo :
Supoñamos que o modelo xera as fichas para un
, happi
e ness
. A decodificación constrúe isto en unhappiness
ao concatenar as subpalabras. O manexo axeitado dos espazos garante que un
non se trate como unha palabra separada.
Este sistema permite que os modelos baseados en subpalabras xeren texto de forma eficiente mantendo a capacidade de representar correctamente termos raros ou complexos.
Aínda que a API de ChatGPT xestiona a tokenización automaticamente, os desenvolvedores usan tiktoken
directamente para obter un control máis fino sobre as súas aplicacións. Permite verificar previamente e xestionar os límites de token , garantindo que o texto de entrada e as respostas se axusten ás restricións do modelo. Isto é especialmente importante para evitar erros ao traballar con conversas ou documentos longos. Ademais, os desenvolvedores poden optimizar o uso de tokens para reducir os custos da API recortando ou resumindo as entradas.
tiktoken
tamén axuda a depurar problemas de tokenización , proporcionando transparencia sobre como se tokeniza e decodifica o texto. Para xestionar entradas longas , tiktoken
pode dividir o texto en anacos máis pequenos, o que permite o procesamento de documentos grandes por partes. Por último, para casos de uso avanzado, como a incorporación ou as manipulacións a nivel de token, tiktoken
garante un control preciso sobre como se xeran e procesan os tokens.
import openai import tiktoken openai.api_key = "your-api-key" # Initialize tokenizer for GPT-4 encoding = tiktoken.get_encoding("cl100k_base") # Function to count tokens def count_tokens(text): return len(encoding.encode(text)) # Example input user_input = "Explain the theory of relativity in detail with examples." conversation_history = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is the theory of relativity?"} ] # Combine inputs for token counting conversation_text = "".join([msg["content"] for msg in conversation_history]) + user_input # Pre-check input token limit (Use Case 1) token_limit = 4096 if count_tokens(conversation_text) > token_limit: print("Trimming conversation to fit within token limit.") conversation_history = conversation_history[1:] # Trim oldest message # Optimize input by summarizing if too long (Use Case 2) def summarize_if_needed(text, max_tokens=500): if count_tokens(text) > max_tokens: print("Input too long, summarizing...") response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "Summarize the following text."}, {"role": "user", "content": text} ], max_tokens=200 ) return response.choices[0].message["content"] return text long_text = "A very long text input that exceeds the desired token limit ... (more text)" optimized_text = summarize_if_needed(long_text, max_tokens=500) # Debug tokenization (Use Case 3) tokens = encoding.encode("OpenAI's ChatGPT is amazing!") print("Tokenized:", tokens) for token in tokens: print(f"Token ID: {token}, Token: '{encoding.decode([token])}'") # Handle long documents by splitting into chunks (Use Case 4) def split_into_chunks(text, chunk_size): tokens = encoding.encode(text) for i in range(0, len(tokens), chunk_size): yield encoding.decode(tokens[i:i + chunk_size]) document = "A very long document... (more text)" chunks = list(split_into_chunks(document, chunk_size=1000)) # Process each chunk separately responses = [] for chunk in chunks: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": chunk}], max_tokens=300 ) responses.append(response.choices[0].message["content"]) full_response = " ".join(responses) # Advanced token manipulation (Use Case 5) custom_text = "Analyze the sentiment of this text." tokens = encoding.encode(custom_text) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": encoding.decode(tokens)}], max_tokens=100 ) print("Final Response:", response.choices[0].message["content"])
Este enfoque garante un rendemento óptimo e unha eficiencia de custos ao construír na API de ChatGPT.
tiktoken
: Tokenizer de GPT A biblioteca tiktoken
de OpenAI está deseñada para tokenizar de forma eficiente e comprender as limitacións dos modelos GPT. Exploremos como funciona:
Aquí tes un exemplo en Python de como tokenizar texto usando tiktoken
. Gústame usar https://colab.research.google.com/ para executar os meus cadernos de Python.
import tiktoken # Choose a model-specific tokenizer encoding = tiktoken.get_encoding("o200k_base") # Input text text = "Tokenization is crucial for GPT models." # Tokenize text tokens = encoding.encode(text) print("Tokens:", tokens) # Decode back to text decoded_text = encoding.decode(tokens) print("Decoded Text:", decoded_text)
Tokens: [4421, 2860, 382, 19008, 395, 174803, 7015, 13] Decoded Text: Tokenization is crucial for GPT models.
Cando se usan as API de ChatGPT, comprender a tokenización axuda a optimizar:
Aquí tes un exemplo práctico para calcular o uso do token ao consultar a API de ChatGPT:
import tiktoken import openai def calculate_tokens(api_input, model="gpt-3.5-turbo"): encoding = tiktoken.encoding_for_model(model) tokens = encoding.encode(api_input) return len(tokens) # Example API call with token usage calculation api_input = "Explain the significance of tokenization in LLMs." model = "gpt-4" token_count = calculate_tokens(api_input, model) print(f"Token count for input: {token_count}") response = openai.ChatCompletion.create( model=model, messages=[{"role": "user", "content": api_input}] ) print("API Response:", response['choices'][0]['message']['content'])
Este código axuda a supervisar o uso do token, o que é crucial para a optimización dos custos e do rendemento.
Comprender a tokenización é esencial para os enxeñeiros que crean aplicacións de IA porque afecta directamente a forma en que os modelos de linguaxe procesan os datos textuais. A tokenización implica dividir o texto en bruto en unidades máis pequenas e significativas, como palabras, subpalabras ou caracteres, que son as entradas básicas para estes modelos. Este proceso permite aos desenvolvedores xestionar con precisión os tamaños de entrada, optimizar o custo reducindo o uso innecesario de tokens e mellorar o rendemento do modelo garantindo que o texto se segmente de forma que conserve o significado contextual. Ademais, incorporar a tokenización directamente ao código do lado do cliente pode axilizar as operacións reducindo a sobrecarga e a latencia de transmisión de datos, permitindo un caché máis eficiente e un procesamento previo máis rápido. Ao dominar a tokenización, os enxeñeiros poden construír sistemas de IA robustos e rendibles, mellorando finalmente a capacidade de resposta e a escalabilidade das súas aplicacións.