Aprimore Modelos de Geração de Texto OpenAI com Fine-Tuning

Guia Detalhado: Novos Modelos de Embedding e Atualizações da API da OpenAI

Introdução

Este guia tem como objetivo apresentar os novos modelos de embedding da OpenAI e as atualizações da API, detalhando como transformar texto em números para diversas aplicações, como busca, recomendações e classificação. Os novos modelos, text-embedding-3-small e text-embedding-3-large, oferecem custos reduzidos, melhor desempenho em múltiplos idiomas e novos parâmetros para controlar o tamanho geral dos embeddings.

O guia fornecerá um passo a passo claro e objetivo para que você possa utilizar esses recursos de forma eficaz, mesmo sem conhecimento prévio aprofundado. Serão abordados os conceitos fundamentais de embeddings de texto, como obtê-los através da API, as características dos novos modelos e seus principais casos de uso.

Pré-requisitos

Para seguir este guia, você precisará de:

  • Uma conta ativa na OpenAI.
  • Chave de API da OpenAI configurada.
  • Ambiente de desenvolvimento Python com as bibliotecas openai e tiktoken instaladas.

Passos

1. Compreendendo Embeddings de Texto

Embeddings de texto são representações numéricas de strings de texto, transformadas em vetores de números de ponto flutuante. Essa transformação permite que o computador compreenda a relação semântica entre diferentes textos. A distância entre dois vetores de embedding indica o quão relacionados são os textos correspondentes: distâncias pequenas sugerem alta relação, enquanto distâncias grandes indicam baixa relação.

A principal vantagem dos embeddings é a capacidade de medir a similaridade semântica entre textos, capturando nuances que buscas tradicionais baseadas em palavras-chave não conseguem. Isso significa que textos com significados semelhantes, mesmo que não compartilhem palavras idênticas, serão representados por vetores próximos no espaço vetorial.

Os embeddings são aplicáveis em uma vasta gama de tarefas, como:

  • Busca: Classificar resultados por relevância semântica à consulta.
  • Agrupamento: Agrupar textos por similaridade.
  • Recomendações: Sugerir itens com textos relacionados.
  • Detecção de anomalias: Identificar textos que destoam do conjunto.
  • Medição de diversidade: Analisar a distribuição de similaridade entre textos.
  • Classificação: Categorizar textos com base na similaridade com rótulos predefinidos.

2. Obtendo Embeddings com a API da OpenAI

Para obter um embedding, você precisa enviar sua string de texto para o endpoint da API embeddings da OpenAI, juntamente com o nome do modelo desejado (por exemplo, text-embedding-3-small). A resposta da API incluirá o vetor embedding e metadados adicionais.

O trecho de código abaixo ilustra como obter embeddings usando a biblioteca OpenAI em Python:

import OpenAI from "openai";
const openai = new OpenAI();

const embedding = await openai.embeddings.create({
model: "text-embedding-3-small",
input: "Your text string goes here",
encoding_format: "float",
});

console.log(embedding);
</code></pre>

Por padrão, o tamanho do vetor embedding é 1536 para o modelo <code>text-embedding-3-small</code> e 3072 para o <code>text-embedding-3-large</code>. No entanto, você pode reduzir essas dimensões usando o parâmetro <code>dimensions</code> na API, o que pode ser útil para diminuir custos e consumo de recursos.

<h3>3. Escolhendo o Modelo de Embedding Adequado</h3>

A OpenAI oferece dois modelos de embedding de terceira geração: <code>text-embedding-3-small</code> e <code>text-embedding-3-large</code>. O modelo <code>text-embedding-3-large</code> oferece um desempenho superior, mas tem um custo mais elevado. O preço é calculado por token de entrada, portanto, quanto mais longo o texto, maior o custo.

A tabela abaixo apresenta uma comparação dos modelos:

<table>
<thead>
<tr>
<th align="left">Modelo</th>
<th align="left">Páginas por Dólar (aprox.)</th>
<th align="left">Desempenho em MTEB</th>
<th align="left">Tamanho Máx. da Entrada (tokens)</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>text-embedding-3-small</code></td>
<td align="left">62.500</td>
<td align="left">62.3%</td>
<td align="left">8191</td>
</tr>
<tr>
<td align="left"><code>text-embedding-3-large</code></td>
<td align="left">9.615</td>
<td align="left">64.6%</td>
<td align="left">8191</td>
</tr>
</tbody>
</table>

Na prática, a escolha entre os modelos dependerá do seu caso de uso específico e das restrições de orçamento. Para aplicações que exigem alta precisão, como análise de sentimentos ou classificação de texto complexa, o <code>text-embedding-3-large</code> pode ser a melhor opção. Para aplicações com menor demanda de precisão, como busca ou recomendação de itens, o <code>text-embedding-3-small</code> pode ser suficiente e mais econômico.

<h3>4. Reduzindo as Dimensões dos Embeddings</h3>

Em algumas aplicações, especialmente aquelas que envolvem o armazenamento de grandes volumes de embeddings, a redução das dimensões dos vetores pode ser uma estratégia eficaz para diminuir custos e consumo de recursos. A OpenAI permite reduzir as dimensões dos embeddings através do parâmetro <code>dimensions</code> na API.

Ao reduzir as dimensões, é importante normalizar os vetores manualmente após a geração para garantir que as distâncias entre os embeddings permaneçam consistentes. O código abaixo demonstra como normalizar os vetores utilizando a biblioteca <code>numpy</code> em Python:

<pre><code class="language-python">from openai import OpenAI
import numpy as np

client = OpenAI()

def normalize_l2(x):
x = np.array(x)
if x.ndim == 1:
norm = np.linalg.norm(x)
if norm == 0:
return x
return x / norm
else:
norm = np.linalg.norm(x, 2, axis=1, keepdims=True)
return np.where(norm == 0, x, x / norm)

response = client.embeddings.create(
model="text-embedding-3-small", input="Testing 123", encoding_format="float"
)

cut_dim = response.data[0].embedding[:256]
norm_dim = normalize_l2(cut_dim)

print(norm_dim)
</code></pre>

Curiosamente, modelos maiores com dimensões reduzidas podem superar modelos menores com dimensões completas em algumas tarefas. Por exemplo, um embedding <code>text-embedding-3-large</code> com 256 dimensões pode apresentar um desempenho superior a um embedding <code>text-embedding-ada-002</code> não reduzido, que possui 1536 dimensões.

<h3>5. Explorando Casos de Uso</h3>

Os embeddings de texto são ferramentas versáteis que podem ser aplicadas em diversas áreas. Abaixo, apresentamos alguns casos de uso representativos:

<ul>
<li><strong>Busca Semântica:</strong> Ao invés de buscar por palavras-chave exatas, você pode buscar por textos que sejam semanticamente similares a uma consulta. Isso é útil para encontrar informações relevantes mesmo que as palavras utilizadas na consulta não apareçam diretamente nos documentos.</li>
<li><strong>Recomendação de Produtos:</strong> Com base na similaridade entre descrições de produtos, você pode recomendar itens que sejam relevantes para um determinado usuário, mesmo que ele nunca tenha interagido diretamente com esses produtos.</li>
<li><strong>Classificação Zero-Shot:</strong> Você pode classificar textos em categorias sem a necessidade de treinar um modelo específico para essa tarefa. Basta comparar os embeddings dos textos com os embeddings das categorias e atribuir o texto à categoria mais similar.</li>
<li><strong>Codificação de Características para Modelos de Machine Learning:</strong> Os embeddings podem ser usados como entrada para modelos de regressão e classificação, permitindo que esses modelos aprendam a partir de dados textuais de forma mais eficaz.</li>
</ul>

<h2>Conclusão</h2>

Os novos modelos de embeddings da OpenAI representam um avanço significativo na área de processamento de linguagem natural, oferecendo uma forma eficiente e precisa de medir a relação entre textos. A capacidade de controlar as dimensões dos embeddings e a sua aplicação em diferentes tarefas de aprendizado de máquina abrem um leque de possibilidades para a criação de aplicações inovadoras.

Com este guia, esperamos ter fornecido as informações e o conhecimento necessários para que você possa começar a explorar o potencial dos embeddings e aprimorar suas aplicações com texto.

<em>Fonte: OpenAI. "Vector embeddings". Disponível em: <a href="https://platform.openai.com/docs/guides/embeddings">https://platform.openai.com/docs/guides/embeddings</a>. Acesso em: hoje.</em>