Інформація про дані Платона.
Вертикальний пошук і штучний інтелект.

Поговоріть зі своїм слайд-деком за допомогою мультимодальних моделей основи, розміщених на Amazon Bedrock – Частина 2 | Веб-сервіси Amazon

Дата:

In Частина 1 цієї серії ми представили рішення, яке використовує Amazon Titan Multimodal Embeddings модель для перетворення окремих слайдів із слайдів у вбудовані. Ми зберігали вбудовування у векторній базі даних, а потім використовували Великий мовний та зоровий помічник (LLaVA 1.5-7b) модель для створення текстових відповідей на запитання користувачів на основі найбільш схожого слайда, отриманого з векторної бази даних. Користувалися сервісами AWS в тому числі Amazon Bedrock, Amazon SageMaker та Amazon OpenSearch Serverless в цьому розчині.

У цій публікації ми демонструємо інший підхід. Ми використовуємо Антропний Клод 3 Сонет модель для створення текстових описів для кожного слайда в наборі слайдів. Потім ці описи перетворюються на вбудовані тексти за допомогою Текстові вставки Amazon Titan модель і зберігається у векторній базі даних. Потім ми використовуємо модель Claude 3 Sonnet для створення відповідей на запитання користувачів на основі найбільш релевантного текстового опису, отриманого з векторної бази даних.

Ви можете перевірити обидва підходи для свого набору даних і оцінити результати, щоб побачити, який підхід дає найкращі результати. У частині 3 цієї серії ми оцінюємо результати обох методів.

Огляд рішення

Рішення забезпечує реалізацію відповідей на запитання з використанням інформації, що міститься в тексті та візуальних елементах слайдів. Дизайн базується на концепції Retrieval Augmented Generation (RAG). Традиційно RAG асоціюється з текстовими даними, які можуть бути оброблені великими мовними моделями (LLM). У цій серії ми розширюємо RAG, щоб також включити зображення. Це надає потужну можливість пошуку для вилучення релевантного контексту вмісту з візуальних елементів, таких як таблиці та графіки, разом із текстом.

Це рішення включає наступні компоненти:

  • Amazon Titan Text Embeddings — це модель вбудованого тексту, яка перетворює текст природною мовою, включно з окремими словами, фразами чи навіть великими документами, у числове представлення, яке можна використовувати для таких випадків використання, як пошук, персоналізація та кластеризація на основі семантичної подібності.
  • Claude 3 Sonnet — це наступне покоління найсучасніших моделей від Anthropic. Sonnet — це універсальний інструмент, який може вирішувати широкий спектр завдань, від складних міркувань і аналізу до швидких результатів, а також ефективного пошуку та пошуку у величезних обсягах інформації.
  • OpenSearch Serverless — це безсерверна конфігурація на вимогу для Amazon OpenSearch Service. Ми використовуємо OpenSearch Serverless як векторну базу даних для зберігання вставок, згенерованих моделлю Amazon Titan Text Embeddings. Індекс, створений у колекції OpenSearch Serverless, служить векторним сховищем для нашого рішення RAG.
  • Передача Amazon OpenSearch (OSI) — це повністю керований безсерверний збирач даних, який доставляє дані в домени OpenSearch Service і колекції OpenSearch Serverless. У цій публікації ми використовуємо API конвеєра OSI для доставки даних у безсерверне векторне сховище OpenSearch.

Дизайн рішення складається з двох частин: прийом і взаємодія з користувачем. Під час прийому ми обробляємо вхідну колоду слайдів, перетворюючи кожен слайд на зображення, генеруючи описи та текстові вставки для кожного зображення. Потім ми заповнюємо сховище векторних даних вбудованими елементами та текстовим описом для кожного слайда. Ці кроки виконуються перед етапами взаємодії з користувачем.

На етапі взаємодії з користувачем запитання від користувача перетворюється на вставлення тексту. У векторній базі даних виконується пошук подібності, щоб знайти текстовий опис, що відповідає слайду, який потенційно може містити відповіді на запитання користувача. Потім ми надаємо опис слайда та запитання користувача моделі Claude 3 Sonnet, щоб створити відповідь на запит. Весь код для цієї публікації доступний у GitHub репо.

На наступній діаграмі показано архітектуру прийому даних.

Робочий процес складається з наступних кроків:

  1. Слайди перетворюються на файли зображень (по одному на слайд) у форматі JPG і передаються в модель Claude 3 Sonnet для створення текстового опису.
  2. Дані надсилаються в модель Amazon Titan Text Embeddings для створення вставок. У цій серії ми використовуємо слайд-деку Навчання та розгортання Stable Diffusion за допомогою AWS Trainium & AWS Inferentia із саміту AWS у Торонто, червень 2023 року, щоб продемонструвати рішення. Зразкова колода містить 31 слайд, тому ми генеруємо 31 набір векторних вставок, кожен з яких має 1536 розмірів. Ми додаємо додаткові поля метаданих для виконання розширених пошукових запитів за допомогою потужних пошукових можливостей OpenSearch.
  3. Вбудовування завантажуються в конвеєр OSI за допомогою виклику API.
  4. Конвеєр OSI завантажує дані як документи в індекс OpenSearch Serverless. Індекс налаштований як приймач для цього конвеєра та створений як частина колекції OpenSearch Serverless.

Наступна діаграма ілюструє архітектуру взаємодії з користувачем.

Робочий процес складається з наступних кроків:

  1. Користувач надсилає запитання, пов’язане з переданою колодою слайдів.
  2. Введені користувачем дані перетворюються на вбудовування за допомогою моделі Amazon Titan Text Embeddings, доступ до якої здійснюється через Amazon Bedrock. За допомогою цих вставок виконується векторний пошук OpenSearch Service. Ми виконуємо пошук k-найближчого сусіда (k-NN), щоб отримати найбільш релевантні вбудовування, які відповідають запиту користувача.
  3. Метадані відповіді OpenSearch Serverless містять шлях до зображення та опис, що відповідає найбільш релевантному слайду.
  4. Підказка створюється шляхом поєднання запитання користувача та опису зображення. Підказка надається для Claude 3 Sonnet, розміщеного на Amazon Bedrock.
  5. Результат цього висновку повертається користувачеві.

Ми обговорюємо кроки для обох етапів у наступних розділах і включаємо подробиці про результат.

Передумови

Щоб реалізувати рішення, наведене в цій публікації, ви повинні мати Обліковий запис AWS знайомство з FM, Amazon Bedrock, SageMaker і OpenSearch Service.

Це рішення використовує моделі Claude 3 Sonnet і Amazon Titan Text Embeddings, розміщені на Amazon Bedrock. Переконайтеся, що ці моделі ввімкнено для використання, перейшовши до Доступ до моделі на консолі Amazon Bedrock.

Якщо моделі ввімкнено, Статус доступу буде держава Доступ дозволено.

Якщо моделі недоступні, увімкніть доступ, вибравши Керуйте доступом до моделі, вибір моделей і вибір Запит на доступ до моделі. Моделі відразу готові до використання.

Використовуйте AWS CloudFormation, щоб створити стек рішень

Ви можете використовувати AWS CloudFormation для створення стека рішень. Якщо ви створили рішення для частини 1 у тому самому обліковому записі AWS, обов’язково видаліть його перед створенням цього стеку.

Регіон AWS посилання
us-east-1
us-west-2

Після успішного створення стека перейдіть до вкладки «Виходи» на консолі AWS CloudFormation і запам’ятайте значення для MultimodalCollectionEndpoint та OpenSearchPipelineEndpoint. Ви використовуєте їх у наступних кроках.

Шаблон CloudFormation створює такі ресурси:

  • Ролі IAM - Наступне Управління ідентифікацією та доступом AWS (IAM) створюються ролі. Оновіть ці ролі, щоб застосувати дозволи з найменшими привілеями, як описано в Найкращі методи безпеки.
  • Блокнот SageMaker – Весь код для цієї публікації запускається за допомогою цього блокнота.
  • Безсерверна колекція OpenSearch – Це векторна база даних для зберігання та отримання вбудованих елементів.
  • Конвеєр OSI – Це конвеєр для введення даних у OpenSearch Serverless.
  • Ковш S3 – Усі дані для цієї публікації зберігаються в цьому відрі.

Шаблон CloudFormation налаштовує конфігурацію конвеєра, необхідну для налаштування конвеєра OSI з HTTP як джерелом і індексом OpenSearch Serverless як приймачем. Блокнот SageMaker 2_data_ingestion.ipynb показує, як завантажувати дані в конвеєр за допомогою Запити Бібліотека HTTP.

Шаблон CloudFormation також створює мережу, шифрування та доступ до даних політики, необхідні для вашої колекції OpenSearch Serverless. Оновіть ці політики, щоб застосувати дозволи з найменшими привілеями.

Ім’я шаблону CloudFormation та ім’я індексу служби OpenSearch є посиланнями в блокноті SageMaker 3_rag_inference.ipynb. Якщо ви змінюєте імена за замовчуванням, переконайтеся, що ви оновили їх у блокноті.

Перевірте розчин

Створивши стек CloudFormation, ви можете перевірити рішення. Виконайте наступні дії:

  1. На консолі SageMaker виберіть Ноутбуки у навігаційній панелі.
  2. Select MultimodalNotebookInstance І вибирай Відкрийте JupyterLab.
  3. In Браузер файлів, перейдіть до папки блокнотів, щоб побачити блокноти та допоміжні файли.

Зошити пронумеровані в тій послідовності, в якій вони виконуються. Інструкції та коментарі в кожному блокноті описують дії, які виконує цей блокнот. Ми запускаємо ці зошити один за одним.

  1. Вибирати 1_data_prep.ipynb щоб відкрити його в JupyterLab.
  2. на прогін меню, виберіть Запустіть усі клітинки щоб запустити код у цьому блокноті.

Цей блокнот буде завантажено у загальнодоступний доступ слайд-палуба, конвертуйте кожен слайд у формат файлу JPG і завантажте їх у відро S3.

  1. Вибирати 2_data_ingestion.ipynb щоб відкрити його в JupyterLab.
  2. на прогін меню, виберіть Запустіть усі клітинки щоб запустити код у цьому блокноті.

У цьому блокноті ви створюєте індекс у колекції OpenSearch Serverless. Цей індекс зберігає дані про вбудовування слайдів. Перегляньте наступний код:

session = boto3.Session()
credentials = session.get_credentials()
auth = AWSV4SignerAuth(credentials, g.AWS_REGION, g.OS_SERVICE)

os_client = OpenSearch(
  hosts = [{'host': host, 'port': 443}],
  http_auth = auth,
  use_ssl = True,
  verify_certs = True,
  connection_class = RequestsHttpConnection,
  pool_maxsize = 20
)

index_body = """
{
  "settings": {
    "index.knn": true
  },
  "mappings": {
    "properties": {
      "vector_embedding": {
        "type": "knn_vector",
        "dimension": 1536,
        "method": {
          "name": "hnsw",
          "engine": "nmslib",
          "parameters": {}
        }
      },
      "image_path": {
        "type": "text"
      },
      "slide_text": {
        "type": "text"
      },
      "slide_number": {
        "type": "text"
      },
      "metadata": { 
        "properties" :
          {
            "filename" : {
              "type" : "text"
            },
            "desc":{
              "type": "text"
            }
          }
      }
    }
  }
}
"""
index_body = json.loads(index_body)
try:
  response = os_client.indices.create(index_name, body=index_body)
  logger.info(f"response received for the create index -> {response}")
except Exception as e:
  logger.error(f"error in creating index={index_name}, exception={e}")

Ви використовуєте моделі Claude 3 Sonnet і Amazon Titan Text Embeddings, щоб перетворити зображення JPG, створені в попередньому блокноті, на векторні вбудовані зображення. Ці вбудовування та додаткові метадані (такі як шлях S3 і опис файлу зображення) зберігаються в індексі разом із вбудовуваннями. Наступний фрагмент коду показує, як Claude 3 Sonnet генерує описи зображень:

def get_img_desc(image_file_path: str, prompt: str):
    # read the file, MAX image size supported is 2048 * 2048 pixels
    with open(image_file_path, "rb") as image_file:
        input_image_b64 = image_file.read().decode('utf-8')
  
    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 1000,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/jpeg",
                                "data": input_image_b64
                            },
                        },
                        {"type": "text", "text": prompt},
                    ],
                }
            ],
        }
    )
    
    response = bedrock.invoke_model(
        modelId=g.CLAUDE_MODEL_ID,
        body=body
    )

    resp_body = json.loads(response['body'].read().decode("utf-8"))
    resp_text = resp_body['content'][0]['text'].replace('"', "'")

    return resp_text

Описи зображень передаються в модель Amazon Titan Text Embeddings для створення векторних вставок. Ці вбудовування та додаткові метадані (такі як шлях S3 і опис файлу зображення) зберігаються в індексі разом із вбудовуваннями. У наступному фрагменті коду показано виклик моделі Amazon Titan Text Embeddings:

def get_text_embedding(bedrock: botocore.client, prompt_data: str) -> np.ndarray:
    body = json.dumps({
        "inputText": prompt_data,
    })    
    try:
        response = bedrock.invoke_model(
            body=body, modelId=g.TITAN_MODEL_ID, accept=g.ACCEPT_ENCODING, contentType=g.CONTENT_ENCODING
        )
        response_body = json.loads(response['body'].read())
        embedding = response_body.get('embedding')
    except Exception as e:
        logger.error(f"exception={e}")
        embedding = None

    return embedding

Дані завантажуються в індекс OpenSearch Serverless за допомогою виклику API до конвеєра OSI. У наступному фрагменті коду показано виклик, здійснений за допомогою бібліотеки HTTP запитів:

data = json.dumps([{
    "image_path": input_image_s3, 
    "slide_text": resp_text, 
    "slide_number": slide_number, 
    "metadata": {
        "filename": obj_name, 
        "desc": "" 
    }, 
    "vector_embedding": embedding
}])

r = requests.request(
    method='POST', 
    url=osi_endpoint, 
    data=data,
    auth=AWSSigV4('osis'))

  1. Вибирати 3_rag_inference.ipynb щоб відкрити його в JupyterLab.
  2. на прогін меню, виберіть Запустіть усі клітинки щоб запустити код у цьому блокноті.

У цьому блокноті реалізовано рішення RAG: ви перетворюєте запитання користувача на вбудовування, знаходите опис схожого зображення в векторній базі даних і надсилаєте отриманий опис у Claude 3 Sonnet для створення відповіді на запитання користувача. Ви використовуєте такий шаблон запиту:

  llm_prompt: str = """

  Human: Use the summary to provide a concise answer to the question to the best of your abilities. If you cannot answer the question from the context then say I do not know, do not make up an answer.
  <question>
  {question}
  </question>

  <summary>
  {summary}
  </summary>

  Assistant:"""

Наступний фрагмент коду забезпечує робочий процес RAG:

def get_llm_response(bedrock: botocore.client, question: str, summary: str) -> str:
    prompt = llm_prompt.format(question=question, summary=summary)
    
    body = json.dumps(
    {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 1000,
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt},
                ],
            }
        ],
    })
        
    try:
        response = bedrock.invoke_model(
        modelId=g.CLAUDE_MODEL_ID,
        body=body)

        response_body = json.loads(response['body'].read().decode("utf-8"))
        llm_response = response_body['content'][0]['text'].replace('"', "'")
        
    except Exception as e:
        logger.error(f"exception while slide_text={summary[:10]}, exception={e}")
        llm_response = None

    return llm_response


# create prompt and convert to embeddings question: str = "How does Inf2 compare in performance to comparable EC2 instances? I need numbers." text_embedding = get_text_embedding(bedrock, question) # vector db search vector_db_response: Dict = find_similar_data(text_embeddings) # download image for local notebook display s3_img_path = vector_db_response.get('hits', {}).get('hits')[0].get('_source').get('image_path') logger.info(f"going to answer the question="{question}" using the image "{s3_img_path}"") !aws s3 cp {s3_img_path} . local_img_path = os.path.basename(s3_img_path) display(filename=local_img_path) # Ask Claude 3 Sonnet slide_text = vector_db_response.get('hits', {}).get('hits')[0].get('_source').get('slide_text') llm_response = get_llm_response(bedrock, question, slide_text) print(llm_response)

результати

У наведеній нижче таблиці містяться деякі запитання та відповіді користувачів, створені нашою реалізацією. The Питання стовпець фіксує запитання користувача, і Відповідь колонка є текстовою відповіддю, згенерованою сонетом Клода 3. The зображення стовпець показує збіг слайдів k-NN, отриманий безсерверним векторним пошуком OpenSearch.

Мультимодальні результати RAG

Питання Відповідь зображення
Як Inf2 порівнює продуктивність із порівнянними примірниками EC2? Мені потрібні цифри. Базуючись на інформації, наданій у підсумку, основні показники продуктивності, наведені для екземплярів Amazon EC2 Inf2 порівняно з іншими екземплярами, такі: 1. До 4 разів вища пропускна здатність. 2. До 10 разів нижча затримка. Підсумок не містить конкретних цифр для порівняння екземплярів Inf2 з іншими типами екземплярів EC2. Однак у ньому підкреслюється підвищення пропускної здатності та затримки як основні переваги продуктивності екземплярів Inf2 порівняно з аналогічними екземплярами для запуску генеративних моделей ШІ.
Відповідно до маховика AI/ML, що надають послуги AWS AI/ML? Виходячи з підсумку, сервіси AWS AI/ML надають низку можливостей, які живлять маховик AI/ML. Цей маховик полягає в інноваціях у розробці нових і кращих алгоритмів, уможливлюючи більше варіантів використання та додатків, стимулюючи ширше впровадження та попит, що, у свою чергу, призводить до подальших інвестицій у дослідження та оптимізацію для стимулювання інновацій. Схоже, що сервіси AWS AI/ML пропонують інструменти, ресурси та інфраструктуру для підтримки цього безперервного циклу інновацій, розробки додатків, впровадження та повторних інвестицій у галузі штучного інтелекту та машинного навчання.
Скільки більше параметрів у GPT-2 порівняно з GPT-3? Яка чисельна різниця між розміром параметра GPT-2 і GPT-3? Згідно з інформацією, наданою у зведенні, GPT-3 2020 року мав 175B (175 мільярдів) параметрів, тоді як GPT-2 2019 року мав 1.5B (1.5 мільярда) параметрів. Таким чином, чисельна різниця між розміром параметра GPT-2 і GPT-3 становить 173.5 мільярда параметрів. GPT-3 має приблизно в 115 разів більше параметрів, ніж GPT-2.
Що таке кварки у фізиці елементарних частинок? На жаль, наведене резюме не містить жодної інформації про кварки у фізиці елементарних частинок. Короткий опис описує зображення, пов’язане з прогресом обробки природної мови та генеративних технологій ШІ, але в ньому нічого не згадується про фізику елементарних частинок або концепцію кварків.

Запитуйте свій індекс

Ви можете використовувати інформаційні панелі OpenSearch, щоб взаємодіяти з OpenSearch API, щоб виконувати швидкі тести вашого індексу та отриманих даних.

Прибирати

Щоб уникнути майбутніх витрат, видаліть ресурси. Ви можете зробити це, видаливши стек за допомогою консолі AWS CloudFormation.

Висновок

Підприємства постійно створюють новий вміст, а слайди є поширеним способом обміну та поширення інформації всередині організації та за її межами з клієнтами або на конференціях. З часом багата інформація може залишатися прихованою в нетекстових формах, як-от графіки та таблиці в цих слайдах.

Ви можете використовувати це рішення та потужність мультимодальних FM, таких як Amazon Titan Text Embeddings і Claude 3 Sonnet, щоб відкривати нову інформацію або розкривати нові перспективи вмісту в слайдах. Ви можете спробувати різні моделі Claude, доступні на Amazon Bedrock, оновивши CLAUDE_MODEL_ID в globals.py файлу.

Це 2 частина серії з трьох частин. Ми використовували Amazon Titan Multimodal Embeddings і модель LLaVA у частині 1. У частині 3 ми порівняємо підходи з частини 1 і частини 2.

Частини цього коду оприлюднені під Ліцензія Apache 2.0.


Про авторів

Аміт Арора є архітектором-спеціалістом зі штучного інтелекту та машинного навчання Amazon Web Services, який допомагає корпоративним клієнтам використовувати хмарні сервіси машинного навчання для швидкого масштабування своїх інновацій. Він також є допоміжним лектором у програмі MS Data Science and Analytics в Джорджтаунському університеті у Вашингтоні, округ Колумбія.

Манджу Прасад є старшим архітектором рішень в Amazon Web Services. Вона зосереджена на наданні технічних рекомендацій у різноманітних технічних сферах, включаючи AI/ML. До приходу в AWS вона розробляла та створювала рішення для компаній у секторі фінансових послуг, а також для стартапів. Вона захоплено ділиться знаннями та заохочує інтерес до нових талантів.

Арчана Інапуді є старшим архітектором рішень в AWS, який підтримує стратегічного клієнта. Вона має понад десятиліття міжгалузевого досвіду, керуючи стратегічними технічними ініціативами. Арчана є амбіційним членом технічної спільноти AI/ML в AWS. До того як приєднатися до AWS, Арчана очолював процес переходу від традиційних ізольованих джерел даних до Hadoop у медичній компанії. Вона захоплена використанням технологій для прискорення зростання, надання цінності клієнтам і досягнення бізнес-результатів.

Антара Раїса є архітектором рішень штучного інтелекту та машинного навчання в Amazon Web Services, який підтримує стратегічних клієнтів із Далласа, штат Техас. Вона також має попередній досвід роботи з великими корпоративними партнерами в AWS, де вона працювала архітектором успішних рішень для клієнтів, орієнтованих на цифрові технології.

spot_img

Остання розвідка

spot_img

Зв'яжіться з нами!

Привіт! Чим я можу вам допомогти?