Как обеспечить, чтобы размер фрагмента не превышал лимит токенов ввода модели в Oracle AI Vector Search?

Вопрос или проблема

Я относительно нов в семантическом поиске и в настоящее время работаю с Oracle AI Vector Search. Мне нужно прояснить, как правильно подготовить входной текст для генерации векторов, не превышая максимальную длину входной последовательности модели.

Руководство пользователя AI Vector Search предоставляет подробную информацию о функциях разбивки, направленных на создание семантически согласованных частей, которые не слишком велики. Однако, хотя размер частей можно регулировать, он отражает только количество символов или слов, а не входные токены. Насколько я знаю, модели накладывают ограничения, основываясь на количестве входных токенов, а не на длине символов.

Например, когда текст разбивается по словам, размеры частей варьируются из-за различий в длине слов. Как я могу убедиться, что мои части не превышают размер входного токена модели, которую я использую? Кажется, нет функциональности для предварительной генерации токенов для частей, чтобы проверить их размер. Я должен избежать риска усечения контента при генерации векторов, так как части могут быть слишком большими.

Чтобы предоставить больше конкретики: я использую предварительно сконфигурированную модель sentence-transformers/paraphrase-multilingual-mpnet-base-v2. Согласно параметрам конфигурации (полученным через EmbeddingModelConfig.show_preconfigured(include_properties=True, model_name=”sentence-transformers/paraphrase-multilingual-mpnet-base-v2″)), максимальная длина входа установлена на 512 токенов. Однако на Hugging Face свойства модели упоминают максимальную длину входа в 128 токенов и do_lower_case: False, что отличается от предварительно сконфигурированных настроек. (https://huggingface.co/sentence-transformers/paraphrase-multilingual-mpnet-base-v2#full-model-architecture)

Для разбивки я использовал следующие тестовые параметры: разбиение по словам, максимум 100, перекрытие 10, рекурсивное разбиение. Мои тестовые данные привели к частям с максимальной длиной символов 858.

Таким образом, мой основной вопрос заключается в следующем: как я могу оценить, подходит ли размер моей части, уверяясь, что лимит токенов модели не превышен? Есть ли какая-либо функциональность в Oracle AI Vector Search для определения этого, и как я могу избежать превышения лимита входных токенов при разбивке, что является основной причиной, по которой разбивка необходима?

Я буду признателен за любые идеи или предложения.

Спасибо!

Ответ или решение

Для оптимального использования Oracle AI Vector Search и предотвращения превышения предела длины входных токенов модели, необходимо учитывать несколько важных моментов при подготовке входного текста для генерации векторов.

Понимание максимального числа токенов

Во-первых, следует понять, что разные модели могут иметь разные ограничения на длину входного текста, выражаемую в токенах. В данном случае, вы работаете с моделью sentence-transformers/paraphrase-multilingual-mpnet-base-v2, которая, согласно предварительным настройкам, имеет максимально допустимую длину в 512 токенов. Однако на платформе Hugging Face указано значение в 128 токенов, что требует дополнительной проверки. Поэтому первым шагом будет уточнение актуальных параметров модели, чтобы избежать возможных ошибок.

Определение размера токенов

Поскольку ваша задача состоит в том, чтобы избежать превышения лимита по токенам, а не символам или словам, вам необходимо заранее оценить, сколько токенов содержит каждый из ваших фрагментов текста. Эти оценки могут сильно варьироваться в зависимости от языка и структуры предложения, так как одно слово может быть разбито на несколько токенов. Для этого воспользуйтесь библиотекой transformers, которая позволяет токенизировать текст:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")

def count_tokens(text):
    return len(tokenizer.tokenize(text))

# Пример использования
text_chunk = "Ваш текст для оценки токенов"
num_tokens = count_tokens(text_chunk)
print(f"Количество токенов: {num_tokens}")

Рекомендации по фрагментации текста

При укладке текста в куски, выбирая параметры, такие как split by words, max 100, overlap 10, и split recursively, убедитесь, что размер каждого сегмента был рассчитан с учётом количества токенов. Старайтесь произвольно разбивать текст таким образом, чтобы его длина (в токенах) не превышала 512 (или ниже 128, если необходимо) токенов.

Использование флагов токенов

На текущий момент Oracle AI Vector Search может не предоставлять возможности для предварительного определения токенов в своих фрагментах. Однако вы можете разрабатывать и тестировать свою логику токенизации вне системы, используя доступные инструменты, такие как transformers.

Избегание обрезки контента

Одной из основных причин, по которой необходимо аккуратно подходить к фрагментации текста, является возможность обрезки контента, если фрагменты могут быть слишком длинными. Убедитесь, что ваша функция токенизации проверяет каждый сегмент перед его отправкой для генерации вектора. Пример кода для проверки, если chunk превышает лимит:

max_tokens = 512  # или 128 в зависимости от модели
for chunk in list_of_chunks:
    if count_tokens(chunk) > max_tokens:
        # Реализация логики разбиения или обработки
        print(f"Chunk превышает лимит: {chunk}")

Заключение

Подготовка входного текста для Oracle AI Vector Search требует тщательной проверки токенов, чтобы избежать проблем с превышением ограничения на токены. Используя библиотеки для токенизации и создавая эффективные функции для проверки, вы сможете обеспечить семантически устойчивые фрагменты и эффективность работы вашей модели. Не забывайте периодически проверять актуальность документации, так как параметры и ограничения могут изменяться в зависимости от версии модели.

Оцените материал
Добавить комментарий

Капча загружается...