Эмбеддинги для текстов длиннее контекста модели

Урок 16 из 299 курса «OpenAI Cookbook»: официальный курс OpenAI Academy (ОпенАИ) на русском языке. Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

Модели OpenAI для создания эмбеддингов не могут встраивать текст, который превышает максимальную длину. Максимальная длина варьируется в зависимости от модели и измеряется токенами, а не длиной строки. Если вы не знакомы с токенизацией, ознакомьтесь с Как подсчитывать токены с помощью tiktoken. Этот notebook демонстрирует, как обрабатывать тексты, которые длиннее максимальной длины контекста модели. Мы покажем это на примере эмбеддингов из text-embedding-3-small, но те же идеи применимы и к другим моделям и задачам. Чтобы узнать больше об эмбеддингах, ознакомьтесь с Руководством по эмбеддингам OpenAI. Сначала мы выбираем модель и определяем функцию для получения эмбеддингов из API. Модель text-embedding-3-small имеет длину контекста 8191 токен с кодировкой cl100k_base, и мы видим, что превышение этого лимита вызывает ошибку. Очевидно, мы хотим избежать этих ошибок, особенно при программной обработке большого количества эмбеддингов. Тем не менее, мы всё ещё можем столкнуться с текстами, которые длиннее максимальной длины контекста. Ниже мы описываем и предлагаем решения для основных подходов к обработке таких длинных текстов: (1) простое усечение текста до максимально допустимой длины и (2) разбиение текста на части (chunking) и встраивание каждого фрагмента по отдельности. Простейшее решение — усечь входной текст до максимально допустимой длины. Поскольку длина контекста измеряется в токенах, мы должны сначала токенизировать текст, прежде чем усекать его. API принимает входные данные как в виде текста, так и в виде токенов, поэтому, если вы внимательно следите за использованием соответствующей кодировки, нет необходимости преобразовывать токены обратно в строковый формат. Ниже приведён пример такой функции усечения. Наш предыдущий пример теперь работает без ошибок. Хотя усечение работает, отбрасывание потенциально релевантного текста является явным недостатком. Другой подход заключается в разделении входного текста на части (chunks), а затем встраивании каждого фрагмента по отдельности. Затем мы можем либо использовать эмбеддинги фрагментов по отдельности, либо комбинировать их каким-либо образом, например, усредняя (с учётом размера каждого фрагмента).

План урока

  1. 1. Длина контекста модели
  2. 1. Усечение входного текста
  3. 2. Разбиение входного текста на части

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды