Використовуйте генеративну базову модель штучного інтелекту для узагальнення та відповідей на запитання, використовуючи власні дані | Веб-сервіси Amazon

Використовуйте генеративну базову модель штучного інтелекту для узагальнення та відповідей на запитання, використовуючи власні дані | Веб-сервіси Amazon

Великі мовні моделі (LLM) можна використовувати для аналізу складних документів і надання резюме та відповідей на запитання. Пошта Адаптація до домену Точне налаштування базових моделей в Amazon SageMaker JumpStart on Financial data описує, як точно налаштувати LLM за допомогою власного набору даних. Якщо у вас є надійний ступінь магістра права, ви захочете надати її бізнес-користувачам для обробки нових документів, які можуть мати сотні сторінок. У цій публікації ми демонструємо, як побудувати інтерфейс користувача в режимі реального часу, щоб бізнес-користувачі могли обробляти PDF-документ довільної довжини. Після обробки файлу ви можете підсумувати документ або поставити запитання щодо вмісту. Зразок рішення, описаний у цій публікації, доступний на GitHub.

Робота з фінансовими документами

Фінансові звіти, такі як квартальні звіти про прибутки та річні звіти для акціонерів, часто мають десятки чи сотні сторінок. Ці документи містять багато шаблонних формулювань, таких як застереження та юридичні формулювання. Якщо ви хочете отримати ключові дані з одного з цих документів, вам потрібен час і деяке знайомство з шаблонною мовою, щоб ви могли визначити цікаві факти. І, звичайно, ви не можете ставити LLM питання про документ, який він ніколи не бачив.

LLM, які використовуються для підсумовування, мають обмеження на кількість токенів (символів), що передаються в модель, і, за деякими винятками, це зазвичай не більше кількох тисяч токенів. Зазвичай це виключає можливість підсумовувати довші документи.

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

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

Наш дизайн має три важливі частини:

  • Він має інтерактивну веб-програму для бізнес-користувачів для завантаження та обробки PDF-файлів
  • Він використовує бібліотеку langchain для поділу великого PDF-файлу на зручніші частини
  • Він використовує техніку розширеного пошуку, щоб дозволити користувачам ставити запитання про нові дані, яких LLM раніше не бачив

Як показано на наступній діаграмі, ми використовуємо інтерфейс, реалізований за допомогою React JavaScript, розміщеного в Служба простого зберігання Amazon (Amazon S3) відро перед Amazon CloudFront. Інтерфейсна програма дозволяє користувачам завантажувати PDF-документи на Amazon S3. Після завершення завантаження ви можете запустити завдання вилучення тексту за допомогою Текст Amazon. У рамках постобробки ан AWS Lambda функція вставляє в текст спеціальні маркери, що позначають межі сторінки. Коли цю роботу виконано, ви можете викликати API, який підсумовує текст або відповідає на запитання щодо нього.

Використовуйте генеративну базову модель штучного інтелекту для узагальнення та відповідей на запитання, використовуючи власні дані | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Оскільки деякі з цих кроків можуть зайняти деякий час, архітектура використовує роз’єднаний асинхронний підхід. Наприклад, виклик для резюме документа викликає функцію Lambda, яка надсилає повідомлення на Служба простої черги Amazon (Amazon SQS) черга. Інша функція Lambda підбирає це повідомлення та запускає Служба еластичних контейнерів Amazon (Amazon ECS) AWS Fargate завдання. Завдання Fargate викликає Amazon SageMaker кінцева точка висновку. Ми використовуємо тут завдання Fargate, тому що підсумовування дуже довгого PDF може зайняти більше часу та пам’яті, ніж функція Lambda. Після завершення узагальнення зовнішня програма може отримати результати з Amazon DynamoDB таблиці.

Для узагальнення ми використовуємо модель Summarize AI21, одну з основних моделей, доступних через Amazon SageMaker JumpStart. Незважаючи на те, що ця модель обробляє документи обсягом до 10,000 40 слів (приблизно 10,000 сторінок), ми використовуємо текстовий роздільник langchain, щоб переконатися, що кожен виклик підсумку до LLM містить не більше XNUMX XNUMX слів. Для створення тексту ми використовуємо модель Cohere Medium і GPT-J для вбудовування, обидва через JumpStart.

Опрацювання підсумків

При роботі з великими документами нам потрібно визначити, як розділити документ на менші частини. Коли ми отримуємо результати вилучення тексту з Amazon Texttract, ми вставляємо маркери для більших фрагментів тексту (настроюється кількість сторінок), окремих сторінок і розривів рядків. Langchain розділить на основі цих маркерів і збере менші документи, які перевищують ліміт токенів. Перегляньте наступний код:

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

LLM у ланцюжку підсумовування є тонкою обгорткою навколо нашої кінцевої точки SageMaker:

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

Відповідь на запитання

У методі розширеного пошуку ми спочатку розбиваємо документ на менші сегменти. Ми створюємо вбудовування для кожного сегмента та зберігаємо їх у відкритій векторній базі даних Chroma через інтерфейс langchain. Ми зберігаємо базу даних в Еластична файлова система Amazon (Amazon EFS) для подальшого використання. Перегляньте наступний код:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

Коли вбудовування готові, користувач може поставити запитання. Ми шукаємо у векторній базі даних фрагменти тексту, які найбільше відповідають питанню:

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

Ми беремо найближчий відповідний фрагмент і використовуємо його як контекст для моделі генерації тексту, щоб відповісти на запитання:

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

Користувач досвідом

Незважаючи на те, що LLM представляють передову науку про дані, більшість варіантів використання LLM зрештою передбачають взаємодію з нетехнічними користувачами. Наш приклад веб-програми обробляє інтерактивний варіант використання, коли бізнес-користувачі можуть завантажити та обробити новий PDF-документ.

На наступній діаграмі показано інтерфейс користувача. Користувач починає із завантаження PDF-файлу. Після того, як документ буде збережено в Amazon S3, користувач зможе розпочати завдання вилучення тексту. Коли це завершено, користувач може викликати завдання підсумовування або задавати запитання. Інтерфейс користувача надає деякі розширені параметри, як-от розмір фрагмента та перекриття фрагментів, що було б корисно для досвідчених користувачів, які тестують програму на нових документах.

Користувацький інтерфейс

Наступні кроки

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

  • Скористайтеся перевагами потужних LLM, які вже доступні в моделях фундаментів Jumpstart. За допомогою лише кількох рядків коду наш зразок програми може розгортати та використовувати передові LLM від AI21 і Cohere для узагальнення та генерації тексту.
  • Зробіть ці можливості доступними для нетехнічних користувачів. Обов’язковою умовою для обробки PDF-документів є вилучення тексту з документа, а виконання завдань узагальнення може тривати кілька хвилин. Для цього потрібен простий інтерфейс користувача з можливостями асинхронної обробки даних, який легко розробити за допомогою хмарних служб, таких як Lambda та Fargate.

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

Висновок

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

На даний момент немає причин не зробити ці потужні можливості доступними для ваших користувачів. Ми рекомендуємо вам почати використовувати Моделі фундаменту Jumpstart сьогодні.


Про автора

Авторський малюнокРенді ДеФо є старшим головним архітектором рішень в AWS. Він має ступінь MSEE Мічиганського університету, де працював над комп’ютерним зором для автономних транспортних засобів. Він також має ступінь магістра ділового адміністрування в Університеті штату Колорадо. Ренді обіймав різні посади в технологічному просторі, починаючи від розробки програмного забезпечення та закінчуючи управлінням продуктами. In увійшов у сферу великих даних у 2013 році та продовжує досліджувати цю сферу. Він активно працює над проектами у сфері машинного навчання та виступає з доповідями на численних конференціях, зокрема Strata та GlueCon.

Часова мітка:

Більше від AWS Машинне навчання