Книга: Анализ данных с LLM. Текст, таблицы, изображения и аудио
Назад: 1. Анализ данных с помощью больших языковых моделей
Дальше: Часть II. Анализ данных с помощью языковых моделей

2. Общение с ChatGPT

В этой главе

• Доступ к веб-интерфейсу ChatGPT.

• Использование ChatGPT для непосредственной обработки данных.

• Косвенное использование ChatGPT для обработки данных.

Пора познакомиться с ChatGPT! В этой главе мы будем работать с ChatGPT и начнем с анализа данных. Если вы никогда не пользовались ChatGPT, то здесь узнаете, как получить доступ к этому чат-боту, и составите первое впечатление о его возможностях (и ограничениях). Если вы уже пользовались им, но еще не применяли для анализа данных, то найдете в этой главе некоторые из множества способов использования ChatGPT в таком контексте.

Сначала мы обсудим веб-интерфейс, позволяющий получить доступ к ChatGPT от компании OpenAI. Мы рассмотрим процесс регистрации в OpenAI, обсудим основные функции, предлагаемые интерфейсом, и начнем в интерфейсе первый диалог с ChatGPT. Затем с помощью ChatGPT выполним анализ данных в нескольких примерах. Мы рассмотрим два способа использования ChatGPT для анализа данных: непосредственное использование и косвенное. При непосредственном использовании ChatGPT мы поручаем чат-боту выполнять фактическую обработку данных, предоставляя в качестве входных данных сами данные и описание задачи. Такой подход эффективен для типов данных, которые ChatGPT обрабатывает по умолчанию (например, текстовые данные).

Однако ChatGPT можно использовать для анализа данных и косвенно. В этом случае ChatGPT просто служит переводчиком, переводя описания задач анализа на формальные языки, понятные внешним инструментам обработки данных. Фактическая обработка данных выполняется внешними инструментами. В этой главе вы увидите, что чат-бот ChatGPT эффективен в обоих сценариях.

2.1. Доступ к веб-интерфейсу

Откройте браузер и введите в адресную строку адрес https://chat.openai.com/. Вы создадите учетную запись OpenAI, которая позволит использовать ChatGPT. Если она у вас уже есть, то можете пропустить описанные ниже шаги, войти в свою учетную запись и перейти к следующему разделу.

Чтобы создать учетную запись, нажмите кнопку регистрации. В результате вы попадете на следующий экран (рис. 2.1).

Рис. 2.1. Страница регистрации учетной записи OpenAI. Введите свой адрес электронной почты и нажмите кнопку Continue (Продолжить), чтобы продолжить работу, или зарегистрируйтесь, используя учетную запись Google или Microsoft

Существует несколько вариантов регистрации учетной записи OpenAI:

• с помощью учетной записи Google (нажав кнопку Continue with Google (Продолжить с Google));

• с помощью учетной записи Microsoft (нажав кнопку Continue with Microsoft Account (Продолжить с Microsoft));

• используя произвольный адрес электронной почты, введя его в поле Email Address (Адрес электронной почты) и нажав кнопку Continue (Продолжить). Далее следуйте инструкциям, которые появятся на экране.

Создав учетную запись любым из перечисленных способов, войдите в нее и выполните действия, описанные в следующем разделе.

Подписки OpenAI

Компания OpenAI предлагает различные типы учетных записей: одни из них бесплатные, а за другие взимается ежемесячная плата. Для приведенных ниже примеров достаточно бесплатной учетной записи. Вы можете выбрать платную подписку, чтобы получить доступ к большему количеству моделей и быстрее получать ответы от ChatGPT. В зависимости от того, какую подписку вы выберете, изображения на экране могут немного отличаться от снимков экранов, приведенных в этой главе.

2.2. Знакомство

Войдя в свою учетную запись OpenAI, вы должны увидеть интерфейс, показанный на рис. 2.2.

Этот интерфейс позволяет вести диалог с чат-ботом ChatGPT, вводя текст и получая ответы. Рассмотрим самые важные компоненты интерфейса.

Прежде всего здесь есть несколько примеров ввода, созданных по умолчанию. Можно просто нажать любой из них, чтобы начать чат.

Помимо этих примеров, можно ввести в текстовое поле произвольный текст. Далее в главе мы будем называть этот элемент интерфейса полем ввода. Наконец, в любой момент можно начать новый чат, нажав кнопку New chat (Новый чат). При этом из памяти ChatGPT стирается вся история диалога.

Какую модель выбрать

В списке Model (Модель) (см. рис. 2.2) можно выбрать одну из нескольких языковых моделей. ChatGPT поддерживает несколько моделей семейства GPT от компании OpenAI. Примеры, рассматриваемые ниже, должны работать с любой из доступных моделей. Можно протестировать несколько разных моделей, чтобы выяснить, как будут различаться результаты. В зависимости от того, какой вариант подписки вы выбрали, количество запросов, отправляемых конкретным моделям, может быть ограничено.

Рис. 2.2. Веб-интерфейс ChatGPT. Взаимодействуйте с ChatGPT, нажимая на готовые примеры вводных данных или вводя произвольный текст в поле ввода. Нажмите кнопку New chat (Новый чат), чтобы начать новую беседу

Пора поздороваться! Нажмите на поле ввода и поприветствуйте ChatGPT. Можно ввести какой угодно текст. Чат-бот ChatGPT был обучен вести диалоги с пользователями-людьми и должен быть в состоянии дать логичный ответ на большинство вводимых данных. Например, расскажите немного о себе. Или попросите у ChatGPT совета или помощи в решении предстоящих задач. Либо вы можете попросить написать стихотворение на выбранную вами тему. Возможно, вы захотите немного поболтать с ChatGPT, чтобы лучше понять его возможности и ограничения.

Обратите внимание, что ChatGPT может возвращаться к ранее введенным данным. Например, если вам не понравился предыдущий ответ, то можете попросить ChatGPT исправить его или изменить. При этом повторять первоначальный запрос не нужно. Кроме того, если ответ вас не устраивает, но вы не хотите по­дробно разъяснять требования, то можете нажать кнопку Regenerate (Попробуй еще раз) (рис. 2.3).

Рис. 2.3. После того как чат-бот ChatGPT сгенерирует ответ, под ним появится кнопка Regenerate (Попробуй еще раз). Нажмите ее, чтобы получить другой ответ на последнее введенное сообщение

Нажав эту кнопку, вы заставите ChatGPT заново сгенерировать последний ответ. ChatGPT допускает определенную степень рандомизации при генерации результатов, поэтому велика вероятность, что второй результат будет отличаться (и, возможно, в лучшую сторону) от первого.

Как правило, весь вводимый вами текст является частью одного чата. Если в какой-то момент вы захотите начать новый чат (по сути, стерев «память» ChatGPT о предыдущей беседе), то просто нажмите кнопку New chat (Новый чат) (см. рис. 2.2). Обратите внимание, что предыдущие беседы не теряются, даже когда вы начинаете новую. Компания OpenAI хранит прошлые беседы и позволяет пользователям вернуться и изучить их (или продолжить беседу с того места, где они остановились в прошлый раз). Доступ к истории предыдущих бесед можно получить, нажав кнопку History (История) (см. рис. 2.2). Каждой беседе присваивается короткое название, которое генерируется автоматически на основе ее содержания.

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

Что такое галлюцинации

Термином «галлюцинация» в языковых моделях обозначают ситуации, в которых языковая модель при отсутствии информации выдумывает новое содержание и интегрирует его в свои ответы. Часто результат кажется убедительным и распознать галлюцинации бывает трудно. В современных исследованиях [1] рассматриваются методы, позволяющие снизить вероятность возникновения таких эпизодов. Однако на момент написания этой книги не существовало надежных стратегий, позволяющих избежать галлюцинаций. Поэтому не стоит слепо доверять информации, предоставляемой языковыми моделями, и всегда следует проверять и подтверждать ее, используя альтернативные источники.

2.3. Обработка текста с помощью ChatGPT

Начнем использовать ChatGPT для обработки данных! В этом разделе с помощью ChatGPT мы проанализируем распространенный тип неструктурированных данных — текст. Это «родной» формат ввода и вывода для ChatGPT, поэтому можно использовать чат для анализа текстовых данных напрямую, не привлекая внешние инструменты анализа. Это позволит сохранить простоту процесса, а именно это нам и нужно на первых этапах анализа данных с помощью ChatGPT.

Представьте ситуацию: вы сотрудник компании Banana, производителя бытовой электроники, в том числе ноутбуков и смартфонов. На сайте компании пользователи могут оставлять текстовые комментарии в свободной форме. Оказалось, что многие пользователи пишут в них о том, удовлетворены они или нет конкретными продуктами компании. Пользователи часто указывают на отдельные элементы этих продуктов, которые выделяются или требуют улучшения. В совокупности все эти отзывы должны быть очень полезны для принятия решений при разработке будущих продуктов Banana! Но, чтобы это стало возможным, сначала их нужно проанализировать и выявить общие моменты. Именно такое задание дает вам руководитель: подготовить статистику, которая обобщит отзывы о различных продуктах и категориях товаров. Кроме того, он хочет, чтобы в процессе чтения отзывов вы написали на них несколько вежливых ответов. В идеале вы хотите избежать необходимости тратить ближайшие недели на чтение и обобщение отзывов. Нельзя ли автоматизировать процесс? Возможно, ChatGPT сможет помочь.

Далее с помощью веб-интерфейса ChatGPT мы проанализируем образец отзыва. Если получится, то можно будет масштабировать процесс и автоматически анализировать все отзывы! Если вы уже запускали диалог, то сначала нажмите кнопку New chat (Новый чат) (см. рис. 2.2), чтобы начать новую беседу. Так вы будете уверены, что темы прошлых бесед с ChatGPT не повлияют на работу с примерами анализа, которые мы будем рассматривать далее.

Сначала расскажем ChatGPT об отзыве, который требуется проанализировать. Нажмите на поле ввода, введите следующий текст после метки Вы, а затем нажмите Enter.

Вы: Изучи этот отзыв о товаре.

«Я купил BananaBook год назад и очень им доволен! Экран потрясающий, и с него удобно читать даже при ярком солнечном свете. Он достаточно быстрый для всех операций, которые мне нужно на нем выполнять, например для написания кода, офисной работы. Единственный недостаток — это вес, хотелось бы, чтобы он был полегче, так как мне приходится часто носить его с собой. Но за такую цену это отличное предложение».

GPT: Судя по отзыву, BananaBook — это товар, который автор отзыва приобрел год назад и которым до сих пор доволен. Экран BananaBook впечатляет, позволяя пользователю легко читать содержимое даже при ярком солнечном свете. Кроме того, устройство достаточно быстрое для нужд пользователя, в том числе для написания кода и офисной работы. Однако автор отзыва отметил, что BananaBook немного тяжеловат и это может доставлять неудобства при переноске. В целом, по мнению автора отзыва, BananaBook — отличное решение за свою цену.

Текст после метки GPT — это ответ, сгенерированный языковой моделью ChatGPT во время пробной сессии. В данном случае чат-бот просто повторяет отзыв, хотя и немного его перефразирует, показывая тем самым, что он принял и «понял» ваши данные.

Почему результаты вывода разные

Чат-бот ChatGPT допускает определенную степень рандомизации при генерации результатов. Следовательно, вы, как правило, будете видеть разные результаты, даже если дважды отправите абсолютно одинаковые данные. Поэтому вероятность, что будет выведен точно такой же результат, как показан здесь, — невелика. Однако, скорее всего, результат будет примерно такого же качества.

Начнем анализ текста с простой классификации, сопоставив отзыв с категорией. В частности, мы попробуем отнести отзыв к одной из трех категорий товаров: мобильные телефоны, персональные компьютеры и игровые приставки.

ПРЕДУПРЕЖДЕНИЕ Не нажимайте кнопку New chat (Новый чат) перед тем, как ввести следующее сообщение! Назначение этой кнопки — стереть из памяти ChatGPT историю предыдущего разговора. А нам это совершенно не нужно. Все последующие анализы будут относиться к тому же отзыву, который мы ввели вначале. А это возможно только в том случае, если ChatGPT будет его помнить.

Вы: Для какой категории товаров написан отзыв (мобильные телефоны, персональные компьютеры, игровые приставки).

GPT: Исходя из информации, представленной в отзыве, неясно, к какой категории товаров относится BananaBook. Автор отзыва не уточнил, является ли товар мобильным телефоном, персональным компьютером или игровой приставкой. Однако, судя по тому, что автор отзыва упомянул об использовании устройства для написания кода и офисной работы, вероятнее всего, BananaBook — это персональный компьютер или ноутбук, а не мобильный телефон или игровая консоль.

Неплохо! Чат-бот четко понял задачу и дал развернутый ответ. BananaBook — это вымышленное устройство, и не сразу понятно, о каком типе товара идет речь. Однако, как справедливо отмечает ChatGPT, написание кода и офисная работа чаще всего ассоциируются с персональными компьютерами (в большей степени, чем с мобильными телефонами или игровыми приставками). Несмотря на неопределенность, ChatGPT может дать логичный ответ и хорошо его обосновать. В данном случае ответ чат-бота даже более точен, чем требуется: ChatGPT не только относит отзыв к одной из трех представленных категорий, но и выдвигает гипотезу о том, что отзыв относится к ноутбуку (подкатегории персональных компьютеров). Это предположение кажется разумным в данном контексте, учитывая, что пользователь регулярно носит компьютер с собой (что обычно характерно для ноутбуков, а не для персональных компьютеров).

Предыдущий ответ логичен, но, пожалуй, длинноват. Фактически его длина почти такая же, как у исходного отзыва. Нет смысла использовать ChatGPT для анализа текста, если полученный ответ будет таким же длинным, как изначальный текст. Попросим ChatGPT писать более лаконично. Нам нужно не подробное обоснование, а только название наиболее вероятной категории, к которой относится отзыв.

Вы: Отвечай лаконично, напиши только название наиболее вероятной категории товара (мобильные телефоны, персональные компьютеры, игровые приставки).

GPT: Персональные компьютеры.

Так гораздо лучше! Очевидно, что ChatGPT смог понять наши инструкции и соответствующим образом адаптировать свой предыдущий ответ. Помимо того что лаконичный вывод читается быстрее, у него есть еще одно преимущество. Если в конечном счете нам потребуется проанализировать не один отзыв, а множество, то важно, чтобы результаты для всех были единообразными. Наличие единообразного вывода облегчает подсчет количества отзывов в каждой из трех категорий.

Классифицируем отзывы по категориям. На этот раз напрямую укажем желаемый формат вывода (обратите внимание, что уточнение «отвечай лаконично» отсылает к предыдущим инструкциям).

Вы: К какой категории товаров — продукты питания, косметика, электроника — относится отзыв? Отвечай лаконично.

GPT: Электроника.

Отлично! Категория указана верно, и формат вывода соответствует ожиданиям. Пока мы выяснили, что ChatGPT умеет классифицировать отзывы по различным критериям. Эта возможность может быть полезной, в частности, для формирования статистики путем подсчета количества отзывов в каждой категории. Но в идеале нам также нужно проанализировать содержание этих отзывов. Какие товары или категории товаров требуется улучшить в первую очередь? Чтобы определить это, необходимо знать, какими являются отзывы: положительными или отрицательными, то есть доволен пользователь товаром или нет. Это еще один способ классификации текстов отзывов. Однако теперь объектом классификации является не товар, о котором идет речь в отзыве, а содержание отзыва.

Вы: Покупатель доволен товаром или нет? Ответь «доволен» или «недоволен».

GPT: Доволен.

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

Вы: Какие достоинства товара упоминаются в отзыве? Оформи ответ в виде нумерованного списка, опиши каждый элемент максимум тремя словами.

GPT: 1. Впечатляющий экран.

2. Быстрая производительность.

3. Можно писать код.

4. Отличная цена.

Снова правильно! Чат-бот извлекает наиболее значимые преимущества товара, упомянутые в отзыве. Обратите внимание, что формат вывода снова соответствует инструкциям: это нумерованный список и каждая запись содержит не более трех слов. А что насчет недостатков, упомянутых в отзыве?

Вы: Какие недостатки товара упоминаются в отзыве? Оформи ответ в виде нумерованного списка, опиши каждый элемент максимум тремя словами.

GPT: 1. Большой вес.

Действительно, единственным недостатком BananaBook, по мнению пользователя, является вес. Обратите внимание, что ChatGPT придерживается заданного формата вывода (нумерованный список), даже если результат содержит всего одну запись.

Классификация отзывов и извлечение конкретных достоинств и недостатков — это отличный способ подготовить данные для статистики. Однако при этом может потеряться информация: например, более подробное обоснование, почему пользователям нравятся или не нравятся определенные характеристики товара. Иногда может понадобиться прочитать выборку отзывов. Но чтобы не тратить время на чтение слишком длинных отзывов, было бы хорошо сначала обобщить их. Сделаем это с помощью ChatGPT.

Вы: Кратко перескажи отзыв в трех предложениях.

GPT: Автор отзыва приобрел электронное устройство BananaBook год назад и до сих пор им доволен. BananaBook имеет впечатляющий экран, который позволяет легко читать текст при ярком солнечном свете, и достаточно быстр для написания кода и офисной работы. Единственный недостаток — большой вес, но за свою цену BananaBook — отличное приобретение.

В результате получился корректный краткий пересказ, в котором использовано ровно столько предложений, сколько указано в инструкции. Можно ли сделать его еще короче?

Вы: Резюмируй отзыв в одном предложении.

GPT: Автор отзыва доволен электронным устройством BananaBook из-за его впечатляющего экрана, быстрой работы и отличной цены, несмотря на то что устройство немного тяжеловато.

Да, этот вариант тоже работает! Действительно, после первоначального тестирования кажется, что чат-бот способен помочь автоматизировать различные задачи анализа. Наконец, выясним, можно ли его использовать для задач, выходящих за рамки простого анализа. Поддержание хороших отношений с клиентами приоритетно для компании Banana! И поэтому руководитель поручает вам по возможности писать ответы на комментарии, выдерживая их в дружеском тоне. На это тоже требуется время. Нельзя ли с помощью ChatGPT автоматизировать и этот этап? Давайте посмотрим...

Вы: Напиши в дружеском тоне ответ на отзыв от компании-производителя Banana Book!

GPT: Конечно, вот дружеский ответ на отзыв:

Уважаемый покупатель,

Мы рады, что вы все еще довольны своим электронным устройством Banana­Book спустя год после покупки! Мы разработали BananaBook, стремясь предложить нашим пользователям впечатляющий экран и быструю производи­тельность, и рады видеть, что эти характеристики отвечают вашим потреб­ностям при написании кода и в офисной работе. Мы ценим ваше мнение о весе устройства и учтем этот момент при дальнейших улучшениях. Благодарим за выбор BananaBook и надеемся и дальше превосходить ваши ожидания!

С наилучшими пожеланиями,

[Название компании]

Очень хорошо! Чат-бот отвечает клиенту дружеским сообщением, ссылаясь на конкретные детали отзыва и делая это в соответствующей манере (подтверждая положительные моменты, упомянутые клиентом, и обещая исправить недостатки). Обратите внимание, что ChatGPT оставляет метку-заполнитель вместо названия компании (отмечено квадратными скобками). Мы еще не сообщали ChatGPT название нашей компании (Banana). Исправим это.

Вы: Название компании — Banana. Вставь его вместо метки-заполнителя в своем ответе.

GPT: Прошу прощения за ошибку в моем предыдущем ответе. Вот обновленный ответ с правильным названием компании:

Уважаемый покупатель,

Мы рады, что вы все еще довольны своим электронным устройством Banana­Book спустя год после покупки! Мы разработали BananaBook, стремясь предложить нашим пользователям впечатляющий экран и быструю производительность, и рады видеть, что эти характеристики отвечают вашим потребностям при написании кода и в офисной работе. Мы ценим ваше мнение о весе устройства и учтем это при дальнейших улучшениях. Благодарим за выбор BananaBook и надеемся и дальше превосходить ваши ожидания!

С наилучшими пожеланиями, команда компании Banana

Хорошо, это работает! Основываясь на дополнительной информации, чат-бот смог подставить в предыдущий ответ название компании.

ПРЕДУПРЕЖДЕНИЕ Языковые модели наподобие ChatGPT могут иногда генерировать вредоносный контент, хотя в последних моделях вероятность таких случаев значительно снизилась. Рекомендуется проверять текст, сгенерированный ChatGPT, прежде чем размещать его на публичных форумах. Следовательно, автоматически генерировать ответы на отзывы клиентов без контроля со стороны человека нецеле­сообразно.

Мы убедились, что ChatGPT можно использовать для решения различных задач, касающихся обработки текстов. С его помощью мы выполняли категоризацию текста согласно заданным критериям и пользовательским классификациям (классификация по цели отзыва и по его содержанию). Затем мы использовали языковую модель для извлечения определенных фрагментов информации из текста и обобщения документов (то есть отзывов). Наконец, с помощью ChatGPT мы создали текст ответа на отзыв покупателя. Во всех случаях чат-бот был способен следовать инструкциям, касающимся задачи и желаемого формата вывода. Если хотите, то попробуйте написать еще один отзыв и убедитесь, что ChatGPT по-прежнему может решить все эти задачи.

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

Обратите внимание, что мы обработали только один короткий отзыв. Здесь использование ChatGPT не дает значительных преимуществ. Мы могли бы классифицировать или обобщить отзыв вручную и сделали бы это гораздо быстрее, чем с помощью ChatGPT. Конечно, целью автоматизации является масштабирование обработки на большое количество (возможно, более длинных) отзывов. Если говорить о сотнях или тысячах отзывов, то анализ вручную займет гораздо больше времени, чем настройка ChatGPT для выполнения этой задачи. Однако мы не затрагивали еще один важный элемент: как предоставить ChatGPT все тексты отзывов? Можно ли просто скопировать весь набор отзывов и вставить его в веб-интерфейс ChatGPT?

Такой подход не сработает. Языковые модели обычно имеют ограничения по объему данных, поступающих на обработку одновременно. Следовательно, нужен механизм, который будет автоматически «подавать» в ChatGPT отдельные отзывы (или небольшие наборы отзывов) для обработки. Соответствующие подходы мы рассмотрим в следующих главах. А пока просто хотим убедиться, что ChatGPT в принципе можно использовать для выполнения разнообразных задач анализа текстовых документов.

2.4. Обработка таблиц с помощью ChatGPT

В предыдущем разделе мы использовали чат-бот непосредственно для обработки данных, предоставляя ему сами данные и описание задачи. Такой подход целесообразен, если мы обрабатываем текст. Это «родной» формат ввода и вывода ChatGPT. Для обработки других типов данных гораздо эффективнее использовать специализированные инструменты в зависимости от типа данных. Возникает вопрос: если мы используем для обработки данных внешние инструменты, то какую пользу приносит ChatGPT? Существует множество инструментов для обработки данных, специализированных для различных типов данных, видов обработки, а также аппаратных или программных платформ. Для работы с такими инструментами пользователям приходится формулировать задачи анализа на формальных языках этих инструментов. Написание кода для анализа данных — трудоемкая задача даже для специалистов, не говоря уже о пользователях, не имеющих соответствующей подготовки в области ИТ. Именно в подобных ситуациях и можно применять языковые модели наподобие ChatGPT, поскольку они понимают как естественный язык, так и формальные языки, используемые инструментами анализа данных. Это означает, что ChatGPT можно задействовать в качестве своеобразного «переводчика» для перевода наших вопросов о данных, сформулированных простым русским языком, в код на различных языках, исполняемый внешними инструментами. Именно этим мы и займемся далее.

Вернемся к примеру с компанией Banana. Вы по-прежнему работаете в ней и успешно используете ChatGPT для анализа всего многообразия отзывов, оставленных пользователями. Эту информацию логично отобразить в виде таблицы, где каждая строка соответствует одному отзыву, а столбцы представляют собой различные типы данных, извлеченных из отзыва. В табл. 2.1 показаны первые несколько строк.

Таблица 2.1. Пример таблицы с тремя столбцами: идентификатор отзыва, показатель удовлетворенности клиента и категория товара

Идентификатор отзыва

Доволен

Категория

1

1

Ноутбуки

2

0

Телефоны

2

1

Игры

Чтобы не усложнять пример, воспользуемся таблицей с небольшим количеством столбцов, соответствующих подмножеству анализов, описанных в предыдущем разделе. Первый столбец содержит идентификатор отзыва, второй — показатель, сообщающий, доволен ли автор отзыва товаром (1) или недоволен (0). В последнем столбце указывается категория. В рамках текущего примера мы рассматриваем только три категории: ноутбуки, телефоны и игры. В этой усеченной таблице исходные отзывы представлены в гораздо более сжатом виде. Однако полная таблица содержит множество строк (поскольку мы начали с большого количества отзывов), и чтение указанных в ней необработанных табличных данных мало что прояснит. В идеале необходимо агрегировать данные нетривиальными методами и продемонстрировать руководству только общие тенденции. Какие инструменты можно для этого использовать?

2.4.1. Обработка таблиц в веб-интерфейсе

Первый вариант — использовать веб-интерфейс компании OpenAI непосредственно для анализа табличных данных. Сначала нужно скачать пример таблицы с результатами анализа отзыва. Для этого зайдите на сайт книги (www.dataanalysiswithllms.com), перейдите в раздел Resources (Дополнительные материалы), откройте материалы к главе 2, найдите ссылку Review Table и скачайте соответствующий файл. В нем содержится таблица в формате .csv со структурой, показанной в табл. 2.1.

Что такое формат .csv

Расширение CSV означает «значения, разделенные запятыми». Оно обозначает особый формат, используемый для представления табличных данных. Каждая строка таблицы хранится в отдельной строке, а значения для разных столбцов в одной строке разделяются запятыми.

Чтобы проанализировать такие данные непосредственно в веб-интерфейсе чат-бота ChatGPT, их сначала нужно загрузить. Нажмите кнопку загрузки, как показано на рис. 2.4 (перед этим можно начать новый чат). Выберите команду Upload From Computer (Добавить фото и файлы), а затем — файл, который вы только что скачали (reviews_table.csv).

Рис. 2.4. Для загрузки файлов с диска нажмите кнопку загрузки и выберите команду Upload from computer (Загрузить с компьютера)

После загрузки файл должен появиться рядом с полем ввода текста. Теперь в это поле можно вводить какие угодно вопросы о данных. При генерации ответов ChatGPT будет учитывать и анализировать предоставленные вами данные. Например, спросим о количестве отзывов для каждой категории товаров.

Пользователь: Сколько отзывов у нас есть для каждой категории товаров?

Отобразившийся результат должен быть таким же, как на рис. 2.5. ChatGPT создает таблицу, содержащую ответ на ваш вопрос (в каждой строке подсчитывается количество отзывов для одной категории товаров) и сопроводительный текст.

Как чат-бот вычислил ответ? Прочитал всю таблицу, чтобы сгенерировать ответ напрямую? Не совсем так. В фоновом режиме ChatGPT генерирует и выполняет код Python на платформе OpenAI, который анализирует входные данные (в  данном сценарии механизм выполнения Python — это внешний инструмент, на который мы ссылались вначале). Сгенерированный код можно увидеть, нажав кнопку Show analysis (Показать анализ) (см. рис. 2.5). На самом деле настоятельно рекомендуется проверить сгенерированный код — не стоит слепо верить ответу. В конце концов, несмотря на свои удивительные возможности, языковые модели регулярно допускают ошибки.

Рис. 2.5. Ответ, сгенерированный ChatGPT на вопрос о входной таблице. Нажмите кнопку Show analysis (Показать анализ), чтобы увидеть, как чат-бот составлял ответ

Задайте еще несколько вопросов, проверьте сгенерированный код и, пожалуй, даже протестируйте модель на еще нескольких разных наборах данных (вы можете загрузить на свой компьютер любые табличные данные, например в формате Excel). Вы увидите, что ChatGPT может обрабатывать самые разные наборы данных и запросы.

Вроде бы все работает отлично! Зачем делать что-то еще? Рассмотреть другие внешние инструменты для анализа данных стоит по нескольким причинам.

• Начнем с того, что существуют строгие ограничения допустимого размера файлов для загрузки (512 Мбайт на момент написания книги). Загрузка больших наборов данных невозможна.

• Далее, вы могли заметить, что анализ данных с помощью Python может занимать несколько секунд даже для наборов данных умеренного размера (например, таблица с отзывами содержит всего 10 000 строк, что очень мало по современным стандартам). Анализ больших наборов данных занимает непозволительно много времени.

• И наконец, в некоторых сценариях использования загрузить данные в OpenAI не представляется возможным. Чтобы обеспечить конфиденциальность персональных данных, пользователи могут предпочесть анализировать их на собственных платформах.

В следующем подразделе мы рассмотрим варианты использования ChatGPT для анализа данных вне веб-интерфейса OpenAI.

2.4.2. Обработка таблиц на вашей платформе

В некоторых сценариях анализ данных непосредственно в веб-интерфейсе OpenAI невозможен. Вместо этого ChatGPT может помочь применить для анализа данных другие инструменты, которыми можно управлять напрямую. Далее мы задействуем реляционную систему управления базами данных (РСУБД) (relational database management system, RDBMS). Такие системы специализируются на работе с данными интересующего нас типа и, как правило, демонстрируют высокую эффективность обработки. Это лишь пример: предлагаемый подход применим и к другим типам систем анализа данных.

Реляционные системы управления базами данных (РСУБД)

РСУБД специализируются на работе с реляционными данными, то есть наборами данных, содержащими одну или несколько таблиц наподобие приведенной выше (см. табл. 2.1). Большинство таких систем поддерживают варианты языка структурированных запросов (англ. Structured Query Language, SQL), используемого для описания данных и операций с ними.

В примерах ниже предполагается, что вы знакомы с основами SQL и РСУБД. Если это не так, то в главе 5 можете прочитать краткое введение в SQL.

Для получения более подробной информации рекомендую прочитать книгу Database Management Systems (авторы Герке и Рамакришнан) [2] или пройти мой онлайн-курс на сайте www.databaselecture.com.

Мы будем пользоваться SQLite — одной из наиболее популярных РСУБД. Чтобы не тратить время и силы на установку и настройку этой системы на своем компьютере, зайдите на сайт книги и перейдите по ссылке на ресурс BananaDB. Вы попадете в блокнот Google Colab, в котором можно выполнить описанные ниже действия. На рис. 2.6 показано, как должен выглядеть блокнот после того, как вы перейдете в него по ссылке.

Рис. 2.6. Блокнот Google Colab, позволяющий запрашивать базу данных BananaDB через SQLite. Запустите верхнюю ячейку (Создать базу данных) для создания базы данных, замените заданный SQL-запрос другим запросом на свой выбор, а затем запустите нижнюю ячейку (Выполнить запрос), чтобы увидеть результат запроса. Стрелка указывает на кнопку запуска верхней ячейки

Блокноты Google Colab

Мы будем работать с блокнотами Google Colab, чтобы вы могли протестировать приведенные ниже примеры, не устанавливая программное обеспечение на свой компьютер. Далее в объяснениях предполагается, что вы в общих чертах знакомы с блокнотами Colab. Освежить навыки работы с ними поможет руководство, доступное на сайте https://colab.research.google.com.

Блокнот уже содержит код для создания примера базы и анализа данных в ней. Эта глава посвящена знакомству с веб-интерфейсом ChatGPT. Следовательно, в данный момент мы не будем тратить время на подробное обсуждение этого кода. Для работы с остальной частью главы вам достаточно знать, что код делает и какие именно его фрагменты необходимо будет изменить. Если говорить упрощенно, то код в блокноте создает базу данных с данными примера и позволяет выполнять SQL-запросы, анализирующие эти данные через SQLite.

В блокноте представлены две ячейки, содержащие код (на рис. 2.6 обозначены как Создать базу данных и Выполнить запрос). В верхней ячейке (Создать базу данных) находится код, который создает базу, содержащую расширенную версию табл. 2.1, заполняя ее данными примерно 1000 отзывов. Сначала запустим эту ячейку, нажав кнопку Run (Запуск) в левом верхнем углу ячейки (на рис. 2.6 отмечена стрелкой). Через несколько секунд база данных SQLite должна быть создана и заполнена соответствующими данными. Эту ячейку необходимо запускать только один раз за сессию. Если не взаимодействовать с блокнотом в течение достаточно длительного периода времени, то среда будет сброшена и ячейку придется запускать снова.

Попросим ChatGPT написать для нас SQL-запросы, обращающиеся к этой базе данных. Эти запросы к данным можно выполнить с помощью нижней ячейки (см. рис. 2.6) (Выполнить запрос). По умолчанию ячейка содержит SQL-запрос, подсчитывающий количество отзывов в категории игр. Выполните его (нажав кнопку Run (Запуск), чтобы проверить, все ли работает. После запуска ячейки вы должны увидеть количество отзывов в категории игр (gaming): 342. Замените текущий запрос (select count(*) from reviews where category = 'gaming';) на запросы, предложенные ChatGPT, а затем повторно запустите ячейку, чтобы получить результаты для новых запросов.

Итак, пришло время поручить чат-боту выполнить для нас анализ данных! Начните новый диалог, нажав кнопку New Chat (Новый чат) в веб-интерфейсе ChatGPT. Важно убедиться, что предыдущие сообщения в окне диалога не помешают нашей новой задаче.

Чтобы написать запросы с помощью ChatGPT, сначала нужно рассказать чат-боту немного о том, как выглядит наша база данных. В частности, описать структуру таблицы, а именно указать имя таблицы отзывов (Reviews) и все связанные с ней столбцы. В данном случае в таблице три столбца, и, пожалуй, стоит добавить текст, описывающий их содержимое. При составлении SQL-запросов следует знать, какие типы данных находятся в каждом столбце, и в идеале иметь представление о возможных значениях и их семантике.

Наконец, еще один важный фрагмент информации — указание конкретной системы, использующейся для анализа данных. Несмотря на то что многие СУБД поддерживают SQL, а сам язык SQL достаточно стандартизирован, конкретный набор поддерживаемых функций SQL в разных системах может различаться. Кроме того, некоторые системы могут поддерживать синтаксис SQL, немного отклоняющийся от стандартного.

Теперь, когда мы выяснили, что важно для написания SQL-запросов, предоставим эту информацию ChatGPT для базы данных BananaDB, служащей в качестве примера.

Вы: У нас есть база данных SQLite 3 с таблицей (с именем Reviews), в которой обобщены сведения об отзывах на товары. В таблице три столбца:

ReviewID (целочисленный идентификатор отзыва);

Satisfied, обозначающий удовлетворенность пользователя (1, если автор отзыва доволен, и 0, если недоволен);

Category для обозначения категории («ноутбуки», «телефоны» или «игры»).

GPT: Отлично! Наличие базы данных SQLite с таблицей отзывов Reviews, в которой обобщаются отзывы о товарах, может оказаться весьма полезным. Используя три упомянутых вами столбца (ReviewID, Satisfied и Category), можно хранить и извлекать ценную информацию об отзывах.

Чтобы помочь вам в дальнейшем, я предоставлю несколько примеров запросов в формате SQLite, которые можно использовать для работы с базой данных. Пожалуйста, сообщите мне, какие конкретные операции или информацию вы хотите выполнить или получить из базы данных.

Чат-бот ChatGPT с воодушевлением воспринимает перспективу анализа базы данных и выводит в ответе краткое описание структуры базы, которое мы предоставили в исходных данных. Кроме того, ChatGPT уже понимает, к чему все идет, и активно предлагает написать несколько примеров SQL-запросов, хотя мы еще об этом не просили. Посмотрим, что он предлагает.

Вы: Конечно! Пожалуйста, предоставь несколько примеров запросов!

GPT: Разумеется! Вот несколько примеров запросов, которые можно использовать для взаимодействия с таблицей отзывов базы данных в формате SQLite с именем Reviews:

Для получения всех отзывов:

SELECT * FROM Reviews;

Для получения положительных отзывов:

SELECT * FROM Reviews WHERE Satisfied = 1;

Для получения отрицательных отзывов:

SELECT * FROM Reviews WHERE Satisfied = 0;

Для получения отзывов о ноутбуках:

SELECT * FROM Reviews WHERE Category = 'laptops';

Для получения отзывов о телефонах:

SELECT * FROM Reviews WHERE Category = 'phones';

Для получения отзывов об играх:

SELECT * FROM Reviews WHERE Category = 'gaming';

Для подсчета общего количества отзывов:

SELECT COUNT(*) FROM Reviews;

Для подсчета количества положительных отзывов:

SELECT COUNT(*) FROM Reviews WHERE Satisfied = 1;

Для подсчета количества отрицательных отзывов:

SELECT COUNT(*) FROM Reviews WHERE Satisfied = 0;

Эти запросы должны послужить отправной точкой для выполнения различных операций с таблицей отзывов Reviews. Их можно изменять или комбинировать в соответствии с вашими конкретными требованиями.

Неплохо! Запросы охватывают довольно большое количество естественных вопросов; например, о количестве отзывов, относящихся к определенным категориям. Вообще, попросить ChatGPT предложить несколько запросов — неплохой способ начать анализ набора данных.

Кстати, можно заметить, что веб-интерфейс отображает SQL-запросы с помощью специфического представления. На рис. 2.7 показано, как отображается первый запрос.

Рис. 2.7. В веб-интерфейсе ChatGPT для представления кода, в том числе SQL-запросов, используется особая разметка. Скопируйте код, нажав соответствующую кнопку (что позволит вставить этот код в нужный интерфейс для выполнения)

SQL-запрос находится в рамочке, благодаря этому его можно легко скопировать, нажав кнопку Copy (Копировать).

Чтобы протестировать какой-либо из предложенных запросов, скопируйте его (как описано выше), а затем вставьте в соответствующую позицию в блокноте BananaDB (метка SQL-запрос на рис. 2.6). В завершение запустите эту ячейку в блокноте — и полу́чите результат запроса.

Посмотрим, удастся ли нам заставить GPT перевести подобным образом наши вопросы в запросы.

Вы: Напиши SQL-запрос для получения категории товаров с наибольшим количеством отзывов!

GPT: Чтобы получить категорию товаров с наибольшим количеством отзывов из вашей таблицы Reviews в базе данных SQLite, можно использовать следующий SQL-запрос:

SELECT Category, COUNT(*) AS ReviewCount

FROM Reviews

GROUP BY Category

ORDER BY ReviewCount DESC

LIMIT 1;

В запросе используется выражение GROUP BY для группировки отзывов по столбцу Category. Затем применяется функция COUNT(*) для подсчета количества отзывов в каждой категории. Результаты упорядочиваются по убыванию на основе количества отзывов с помощью выражения ORDER BY. Наконец, выражение LIMIT 1 гарантирует, что будет возвращена только категория с наибольшим количеством отзывов.

Запрос вернет категорию товаров вместе с соответствующим количеством отзывов для этой категории.

Нас интересует, для какой категории товаров собрано больше всего отзывов. ChatGPT переводит наш вопрос в SQL-запрос, который извлекает соответствующий результат. При выполнении в нашем примере базы данных этот запрос должен извлечь категорию Gaming, а также количество связанных с ней отзывов.

Как работать с многострочными запросами

Чат-бот ChatGPT сгенерировал первый многострочный SQL-запрос. Чтобы использовать его в блокноте Colab, заключите запрос в тройные кавычки ("""), а не в одинарные. Это гарантирует, что весь запрос будет обработан как одна строка.

Строго говоря, мы просили указать только категорию, а не связанное с ней количество. Здесь ChatGPT немного своевольничает, добавляя количество к результатам запроса. В данном случае это может быть приемлемо и даже интересно. В общем случае, используя ChatGPT для перевода вопросов в запросы, убедитесь, что чат-бот не расширяет ваши запросы недопустимым образом (например, при передаче в инструмент со строгими требованиями к формату ввода). Посмотрим, можно ли заставить ChatGPT точнее следовать инструкциям.

Вы: Результат запроса должен возвращать только категорию.

GPT: Извините за упущение. Если вы хотите, чтобы запрос возвращал только категорию с наибольшим количеством отзывов, то можете изменить предыдущий запрос, выбрав только столбец Category:

SELECT Category

FROM Reviews

GROUP BY Category

ORDER BY COUNT(*) DESC

LIMIT 1;

Обновленный запрос извлекает из таблицы отзывов Reviews категорию продукта с наибольшим количеством отзывов. Он группирует отзывы по категориям, упорядочивает их по количеству в порядке убывания, а затем выбирает только верхний результат с помощью выражения LIMIT 1. Запрос возвращает категорию с наибольшим количеством отзывов.

Идеально! ChatGPT немного изменил предыдущий запрос, чтобы в выводе содержалась только категория без указания количества отзывов в ней. Можно заметить, что ответы чат-бота содержат запрос и объяснение, как он работает. Подобные объяснения полезны, поскольку позволяют проверить что запросы, сгенерированные ChatGPT, действительно корректны. Теперь немного углубим анализ и посмотрим, сколько авторов отзывов остались довольны своими играми.

Вы: Каково соотношение положительных отзывов в категории игр?

GPT: Рассчитать соотношение положительных отзывов в категории игр в вашей таблице отзывов Reviews базы данных SQLite можно с помощью следующего SQL-запроса:

SELECT (CAST(SUM(Satisfied) AS REAL) / COUNT(*)) AS PositiveRatio

FROM Reviews

WHERE Category = 'gaming';

Этот запрос фильтрует отзывы конкретно для категории игр (gaming) с помощью оператора WHERE. Затем с помощью функции SUM() он вычисляет сумму в столбце удовлетворенности (Satisfied), которая представляет количество положительных отзывов. Далее результат делится на общее количество отзывов в категории игр, полученное с помощью функции COUNT(*). Функция CAST() используется для того, чтобы деление выполнялось с точностью до десятых долей. Запрос возвращает соотношение положительных отзывов (от довольных покупателей) в категории игр в виде десятичной дроби.

Выполнив запрос, скорее всего, вы увидите, что процент положительных ответов будет около 50 % (то есть соответствующий автор отзыва доволен). Наконец, посмотрим, какую категорию товаров необходимо улучшить в первую очередь.

Вы: У какой категории товаров наименьший процент положительных отзывов?

GPT: Для определения категории товаров с наименьшим процентом положительных отзывов из вашей таблицы отзывов Reviews базы данных SQLite можно выполнить следующий SQL-запрос:

SELECT Category, (CAST(SUM(Satisfied) AS REAL) / COUNT(*))

AS PositiveRatio

FROM Reviews

GROUP BY Category

ORDER BY PositiveRatio ASC

LIMIT 1;

В этом запросе для группировки отзывов по столбцу категорий (Category) используется оператор GROUP BY. Затем он вычисляет соотношение положительных отзывов для каждой категории, разделив сумму их значений (Satisfied) на общее количество отзывов в этой категории. Результаты упорядочиваются в порядке возрастания на основе соотношения положительных отзывов с помощью оператора ORDER BY. Наконец, выражение LIMIT 1 гарантирует, что будет возвращена только категория с наименьшим соотношением положительных отзывов.

Запрос возвращает название категории товаров вместе с соответствующим соотношением положительных отзывов (где автор доволен). Будет представлена категория с наименьшим соотношением положительных отзывов.

При выполнении этого запроса должна быть выведена категория Phones вместе с соответствующим количеством положительных отзывов.

В этом разделе мы разобрали второй способ использования ChatGPT для анализа данных: вместо того чтобы применять ChatGPT непосредственно к данным, мы используем его как механизм перевода. В этом случае мы переводим вопросы о данных (сформулированные на обычном русском языке) в SQL-запросы, которые затем можно выполнить с помощью соответствующего инструмента (в этом сценарии — СУБД). В следующих главах мы также будем использовать ChatGPT для перевода на другие формальные языки.

Мы вводили вопросы вручную, а затем копировали их в другой интерфейс. Очевидно, что этот подход не самый удобный. В главе 5 вы узнаете, как создавать платформы, автоматизирующие все эти действия.

Резюме

• Языковые модели могут решать различные задачи, получая инструкции на естественном языке.

• Несмотря на свои широкие возможности, языковые модели могут выдавать неверные результаты.

• Вы можете работать с чат-ботом ChatGPT через веб-интерфейс в своем браузере.

• ChatGPT позволяет пользователям взаимодействовать с различными версиями моделей GPT.

• Для обработки текста с помощью ChatGPT введите текст и описание задачи.

• ChatGPT умеет классифицировать текст по заданным категориям, извлекать информацию из текста по соответствующим вопросам, а также кратко излагать текст в соответствии с указаниями пользователя.

• ChatGPT не подходит для прямой обработки больших наборов данных. Однако модель способна генерировать код, который обрабатывает большие данные с помощью других инструментов. Для создания кода введите описание данных, задачи и формата вывода.

Литература

1. Ji Z., Lee N., Frieske R. et al. Survey of Hallucination in Natural Language Generation // ACM Computing Surveys, 2023. — № 55 (12). — Pp. 1–38.

2. Ramakrishnan R., Gehrke J. Database Management Systems. 3rd ed. — New York: McGraw Hill, 2002.


Неудивительно, учитывая, что наши тестовые данные сгенерированы с использованием равномерного случайного распределения (то есть количество положительных и отрицательных отзывов должно быть примерно одинаковым).

Назад: 1. Анализ данных с помощью больших языковых моделей
Дальше: Часть II. Анализ данных с помощью языковых моделей