Текстовые векторы или внедрения — это числовые векторные представления текста, которые генерируются большими языковыми моделями (LLM). После того, как LLM полностью предварительно обучены на большом наборе данных или настроены на основе различных задач, включая завершение текста, ответы на вопросы и переводы, встраивание текста фиксирует семантическую информацию входного текста. Различные последующие приложения становятся возможными благодаря встраиванию текста, включая поиск по сходству, поиск информации, рекомендации и персонализацию, многоязычный перевод и многое другое.
Прежде чем интеллектуальные приложения можно было создавать на основе внедрений, предприятиям и организациям приходилось внедрять существующие документы, что могло быть дорогостоящим и технически сложным. Amazon SageMaker JumpStart — это центр машинного обучения (ML), который помогает ускорить этот процесс. С помощью SageMaker JumpStart вы можете получить доступ к предварительно обученным новейшим моделям внедрения текста от различных поставщиков моделей, включая Hugging Face, AI 21 Labs, Cohere и Meta AI. Вы можете легко внедрить эти модели в производство с помощью пользовательского интерфейса SageMaker JumpStart или SDK. Кроме того, никакие ваши данные не используются для обучения базовых моделей. Поскольку все данные зашифрованы и не покидают собственное VPC, вы можете быть уверены, что ваши данные останутся конфиденциальными.
В этом посте мы покажем, как использовать SageMaker Python SDK для встраивания текста и сходства предложений. Сходство предложений включает в себя оценку сходства между двумя фрагментами текста после их преобразования во встраивания с помощью LLM, что является основным шагом для таких приложений, как Поисковая дополненная генерация (RAG). Мы демонстрируем, как сделать следующее:
- Выполнение вывода на модели внедрения текста, развернутой из SageMaker JumpStart.
- Найдите ближайших соседей для входного предложения с помощью собственного набора данных
- Запускайте пакетное преобразование больших документов, чтобы минимизировать затраты.
Весь код доступен на GitHub.
Развертывание модели внедрения текста с помощью SageMaker JumpStart
Чтобы разместить модель в Amazon SageMaker, первым делом необходимо настроить и аутентифицировать использование сервисов AWS. В Amazon SageMaker Studio мы используем роль выполнения, связанную с экземпляром блокнота. См. следующий код:
В Hugging Face тест массивного встраивания текста (MTEB) предоставляется в качестве таблица лидеров для разнообразных задач по встраиванию текста. В настоящее время он предоставляет 129 наборов данных для сравнительного анализа для 8 различных задач на 113 языках. Лучшие модели встраивания текста из таблицы лидеров MTEB доступны в SageMaker JumpStart, включая bge
, gte
, e5
, и более. В этом посте мы используем huggingface-sentencesimilarity-bge-large-en
В качестве примера. Мы можем использовать SageMaker SDK для развертывания этой современной модели встраивания текста:
Запрос модели внедрения текста
Давайте рассмотрим запрос модели внедрения текста более подробно.
Текст для встраивания
Если вы уже развернули конечную точку SageMaker, predictor
можно восстановить следующим образом:
После успешного развертывания модели вы можете запросить конечную точку с пакетом входных текстов в полезной нагрузке JSON:
Корреляция вложений этих предложений показана на следующем рисунке.
Как показано на предыдущем рисунке, одни и те же субъекты сильно коррелируют внутри себя, в том числе Pets
, Cities
и Color
; разные предметы сильно отличаются друг от друга. Это указывает на встраивание, генерируемое LLM (в данном случае, bge
) может точно представлять семантическую информацию.
В этом посте мы использовали предыдущий пример и сравнили задержку в различных моделях встраивания предложений, доступных в настоящее время в SageMaker JumpStart. Задержка — это количество времени с момента отправки пользователем запроса до момента, когда приложение сообщит, что запрос выполнен. Числа в следующей таблице представляют собой среднюю задержку для 100 запросов, использующих один и тот же пакет входных текстов на ml.g5.2xlarge
и ml.c6i.xlarge
экземпляры.
Модель | g5.2xlarge Средняя задержка (мс) | c6i.xlarge Средняя задержка (мс) | Языковая поддержка |
---|---|---|---|
все-MiniLM-L6-v2 | 19,5 | 27,9 | Английский |
База BGE, англ. | 21.2 | 114 | Английский |
BGE Small En | 28,3 | 45,6 | Английский |
BGE Large En | 34,7 | 337 | Английский |
Многоязычная база E5 | 22.1 | 118 | Многоязычный |
Многоязычный E5, большой | 39,8 | 360 | Многоязычный |
База Е5 | 25,6 | 117 | Английский |
База E5 V2 | 25,2 | 123 | Английский |
E5 Большой | 32,2 | 339 | Английский |
E5 Большой V2 | 32,5 | 331 | Английский |
База ГТЭ | 22.2 | 112 | Английский |
ГТД Малый | 19,7 | 46 | Английский |
ГТД Большой | 39,7 | 347 | Английский |
Получить ближайших соседей
Развернутая модель SageMaker JumpStart также может облегчить процесс определения ближайших соседей к запросам внутри корпуса. При наличии запросов и корпуса модель выдает corpus_id
, который обозначает положение соответствующей записи корпуса во входном списке корпуса, а также оценку, указывающую степень близости к запросу. Он использует следующие параметры:
- корпус – Предоставляет список входных данных, из которых можно найти ближайшего соседа.
- запросы – Предоставляет список входных данных, для которых можно найти ближайшего соседа из корпуса.
- top_k – Количество ближайших соседей, которых можно найти из корпуса
- режим – Установить как
nn_corpus
для того, чтобы ближайшие соседи могли вводить запросы внутри корпуса
См. следующий код:
Мы получаем следующий результат:
Этот результат означает, что первый запрос наиболее похож на первый корпус, второй — ближе ко второму корпусу и т. д. Это правильное совпадение в данном примере.
Мы также взяли предыдущий образец и сравнили задержку в различных моделях внедрения предложений, доступных в настоящее время в SageMaker JumpStart. Числа в следующей таблице представляют собой среднюю задержку для 100 запросов, использующих одну и ту же полезную нагрузку на сервере. ml.g5.2xlarge
и ml.c6i.xlarge
экземпляры.
Модель | g5.2xlarge Средняя задержка (мс) | c6i.xlarge Средняя задержка (мс) | Языковая поддержка |
---|---|---|---|
все-MiniLM-L6-v2 | 21,7 | 69,1 | Английский |
База BGE, англ. | 29.1 | 372 | Английский |
BGE Small En | 29,2 | 124 | Английский |
BGE Large En | 47,2 | 1240 | Английский |
Многоязычная база E5 | 30 | 389 | Многоязычный |
Многоязычный E5, большой | 47,1 | 1380 | Многоязычный |
База Е5 | 30,4 | 373 | Английский |
База E5 V2 | 31 | 409 | Английский |
E5 Большой | 45,9 | 12:30 | Английский |
E5 Большой V2 | 49,6 | 1220 | Английский |
База ГТЭ | 30,3 | 375 | Английский |
ГТД Малый | 28,5 | 129 | Английский |
ГТД Большой | 46,6 | 1320 | Английский |
Получить ближайших соседей в большом наборе данных
При отправке запросов к конечной точке вызова SageMaker полезные данные ограничиваются примерно 5 МБ, а время ожидания запроса устанавливается равным 1 минуте. Если размер корпуса превышает эти ограничения, вы можете использовать задание обучения SageMaker, которое генерирует внедрения для вашего большого набора данных и сохраняет их вместе с моделью внутри конечной точки SageMaker. Поэтому их не обязательно передавать как часть полезных данных вызова. Процесс поиска ближайших соседей осуществляется с помощью ПредложениеТрансформатор и его функция полезности. Ближайший сосед основан на косинусном сходстве между встраиванием входного предложения и встраиванием предложений, заранее вычисленным во время задания обучения.
В следующем примере мы извлекаем и подготавливаем Amazon_SageMaker_FAQs
набор данных, чтобы использовать его для поиска ближайшего соседа к входному вопросу:
Для гиперпараметров обучения, специфичных для алгоритма, SageMaker SDK можно получить или перезаписать:
Обучение SageMaker состоит из двух этапов: создание объекта оценки и запуск задания обучения. Выходные данные представляют собой модель, в которую предварительно упакован ваш большой набор данных, используемый в качестве обучающих данных, которые можно использовать для вывода, чтобы получить ближайшего соседа для любого входного предложения. См. следующий код:
Синтаксис запроса для преобразования текста во внедрения такой же, как и раньше. Однако код для получения ближайшего соседа можно упростить следующим образом:
Мы также можем запросить конечную точку с помощью вопросов в Amazon_SageMaker_FAQs
набор данных и сравните, сколько правильных соответствующих ответов возвращается. В следующем примере мы измеряем точность топ-3, учитывая, что могут быть похожие пары вопросов и ответов. Это означает, что если правильный ответ возвращается как один из трех лучших результатов, он рассматривается как правильный запрос.
Запустите пакетное преобразование, чтобы получить встраивания в большие наборы данных.
Для предприятий и организаций с большим объемом исторических документов, которые превышают объем памяти одного экземпляра конечной точки, вы можете использовать пакетное преобразование SageMaker для экономии затрат. Когда вы запускаете задание пакетного преобразования, SageMaker запускает необходимые вычислительные ресурсы для обработки данных. Во время выполнения задания SageMaker автоматически выделяет вычислительные ресурсы и управляет ими. По завершении задания пакетного преобразования эти ресурсы автоматически очищаются, что минимизирует затраты. Разделив большой набор данных на более мелкие фрагменты и используя больше экземпляров, вы можете масштабировать вычисления для более быстрого вывода с аналогичными затратами без управления инфраструктурой. Максимальная полезная нагрузка для пакетного преобразования — 100 МБ, а время ожидания — 1 час.
Входным форматом для нашего задания пакетного преобразования является файл JSONL с записями в виде строки JSON, состоящей из id
и text_inputs
. См. следующий код:
Когда данные будут готовы в Amazon Simple Storage Service (Amazon S3), вы можете создать объект пакетного преобразования из модели SageMaker JumpStart, который запускает задание преобразования:
После завершения задания пакетного преобразования вы можете загрузить результат с Amazon S3:
Заключение
SageMaker JumpStart предоставляет простой способ использования современных моделей больших языков для встраивания текста и семантического поиска. С помощью пользовательского интерфейса или всего нескольких строк кода вы можете развернуть высокоточную модель внедрения текста и найти семантические совпадения в больших наборах данных в нужном масштабе и с минимальными затратами. SageMaker JumpStart устраняет препятствия для реализации семантического поиска, предоставляя мгновенный доступ к новейшим моделям, подобным тем, которые включены в таблицу лидеров MTEB. Компании и разработчики могут быстрее создавать интеллектуальные системы поиска и рекомендаций.
В этом посте показано, как находить семантически схожие вопросы и ответы, которые можно применить к сценариям использования RAG, рекомендациям и персонализации, многоязычным переводам и многому другому. Благодаря постоянному развитию языковых моделей и простоте SageMaker JumpStart все больше организаций могут внедрять возможности генеративного искусственного интеллекта в свои продукты. В качестве следующего шага вы можете опробовать модели встраивания текста из SageMaker JumpStart в свой собственный набор данных, чтобы протестировать и сравнить результаты для ваших сценариев использования RAG.
Об авторах
Доктор Байчуань Сунь, в настоящее время работает старшим архитектором решений AI/ML в AWS, специализируется на генеративном искусственном интеллекте и применяет свои знания в области науки о данных и машинного обучения для предоставления практических облачных бизнес-решений. Имея опыт в управленческом консалтинге и архитектуре решений искусственного интеллекта, он решает ряд сложных задач, включая, среди прочего, робототехническое компьютерное зрение, прогнозирование временных рядов и профилактическое обслуживание. Его работа основана на солидном опыте управления проектами, исследованиях и разработках программного обеспечения и академической деятельности. Вне работы доктор Сан любит путешествовать и проводить время с семьей и друзьями, что отражает стремление как к его профессиональному росту, так и к личному благополучию.
Хемант Сингх — учёный-прикладник с опытом работы в Amazon SageMaker JumpStart. Он получил степень магистра в Институте математических наук Куранта и степень бакалавра технических наук в ИИТ Дели. У него есть опыт работы над широким спектром задач машинного обучения в области обработки естественного языка, компьютерного зрения и анализа временных рядов.
Доктор Ашиш Хетан — старший научный сотрудник, работающий со встроенными алгоритмами Amazon SageMaker и помогающий разрабатывать алгоритмы машинного обучения. Он получил докторскую степень в Университете Иллинойса Урбана-Шампейн. Он является активным исследователем в области машинного обучения и статистического вывода и опубликовал множество статей на конференциях NeurIPS, ICML, ICLR, JMLR, ACL и EMNLP.