Раскрытие силы текстовых данных с помощью LLM-моделей

Максимизация мощности текстовых данных с использованием LLM-моделей

ЛАБОРАТОРИЯ DATA SCIENCE

Узнайте, как обрабатывать текстовые данные с помощью моделей LLM: пошаговое руководство для новичков

Изображение, созданное автором с помощью Midjourney

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

Именно здесь на помощь приходят большие языковые модели (LLM). Они могут помочь выполнять такие задачи, как перевод, суммирование, анализ настроений и многое другое. Но что такое LLM, на самом деле? Для упрощения, можно представить LLM в виде попугая. Как попугай повторяет то, что слышит дома, так и LLM имитирует человеческий язык. Основное отличие заключается в том, что LLM обучено на огромном объеме данных – гораздо большем, чем то, что попугай может выучить в своей клетке! Вот почему LLM имеют способность генерировать связный и содержательный текст, не принося иногда чудачества попугая. 🦜

В этой статье мы рассмотрим, как работают LLM и как они позволяют аналитикам данных легче чем когда-либо извлекать инсайты из текстовых данных. Сейчас есть несколько LLM, доступных через API, каждая из которых обладает различными возможностями и ценами. Мы будем использовать GPT-3 через API OpenAI. На момент написания этого руководства, OpenAI взимает оплату за использование API на основе числа запросов и числа сгенерированных токенов. Общая стоимость для этого руководства составила $0.2.

Время начать!

Содержание

Шаг 1: Загрузка данныхШаг 2: Чтение данныхШаг 3: Предварительная обработка данныхШаг 3a: Работа с значениями NaNШаг 3b: Преобразование текста для GPT-3Шаг 3c: Подсчет токеновШаг 4: Настройка аккаунта OpenAIШаг 5: Работа с GPT-3Шаг 6: Суммирование результатов

Предварительные условия

Чтобы следовать пошаговому руководству, вам понадобятся следующие условия:

  • Рабочее знание Python
  • Среда Python 3
  • Ключ OpenAI API (см. шаг 4)

Шаг 1: Загрузка данных

Набор данных, который мы будем использовать, является широко отраслевым исследованием, проведенным Kaggle в 2017 году с целью выявления новых тенденций в машинном обучении и науке о данных. В этом руководстве мы будем использовать только файл csv freeformResponses, который содержит открытые ответы на вопросы Kaggle.

Фрагмент csv-файла freeformResponses

Шаг 2: Чтение данных

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

# загрузить библиотекуimport pandas as pd# прочитать файл и создать датафреймdf = pd.read_csv('freeformResponses.csv', usecols = ['PersonalProjectsChallengeFreeForm'])# проверить результатdf.head()
Вывод

Шаг 3: Подготовка данных

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

Шаг 3a: Обработка значений NaN

Мы начнем с обработки значений NaN (не числа). Значения NaN представляют собой отсутствующие или неопределенные значения с особыми свойствами, поэтому важно обнаружить их на ранней стадии с помощью функции isna(). После идентификации мы можем принять соответствующие меры для их эффективной обработки.

# подсчитать значения NaNdf.isna().sum()
Вывод

Есть 13 214 значений NaN (80% всех ответов!), что означает, что эти люди не дали ответ на вопрос. Самым простым подходом является удаление всех записей, содержащих значения NaN, с помощью функции dropna(). Однако в зависимости от конкретного случая использования можно предпочесть обрабатывать значения NaN по-разному, например, заменить их определенными значениями.

# удалить значения NaNdf = df.dropna()# проверить результатdf.head()
Вывод

В демонстрационных целях мы будем работать только с первыми 500 непустыми ответами из опроса.

# выбрать первые 500 строкdf = df.head(500)

Шаг 3b: Преобразование текста для GPT-3

Затем мы преобразуем текстовые данные в формат, подходящий для GPT-3. Мы извлечем все значения из столбца “PersonalProjectsChallengeFreeForm” и сохраним их в списке “challenges“. Это преобразование начинается с использования функции squeeze(), которая преобразует датафрейм в pandas-серию. Затем функция tolist() преобразует эту серию в список.

# преобразовать датафрейм в серию, а затем в спискochallenges = df.squeeze().tolist()# проверить результатchallenges[:5]
Вывод

В этом примере “challenges” – это список, в котором каждый элемент представляет собой ответ из оригинального опроса. Мы предоставим этот текст в качестве ввода для GPT-3.

Шаг 3c: Подсчет токенов

Наш текст почти готов для GPT-3. Прежде чем продолжить, важно понять, как GPT-3 понимает и работает с текстом. Сначала он выполняет “токенизацию”, которая включает разбиение текста на более мелкие единицы, известные как токены. Токены – это единицы текста, такие как предложения, слова, числа или даже знаки препинания. Например, фразу “привет друг!” можно разделить на три токена: “привет”, “друг” и “!”.

Пример токенизации

После токенизации GPT-3 переходит к “кодированию”, что означает преобразование этих токенов в номера токенов. В нашем примере три токена “привет”, “друг” и “!” могут быть преобразованы в три номера токенов: “15339”, “4333” и “0”.

Пример кодирования

Определяя количество токенов в нашем тексте, мы узнаем, является ли текст слишком длинным для обработки моделью, а также сколько будет стоить вызов OpenAI API (так как вызовы API тарифицируются в зависимости от количества токенов, отправленных в ваш ввод, плюс количество токенов, которое GPT возвращает в выводе).

Для этого мы установим библиотеку под названием “tiktoken” и импортируем необходимый модуль “encoding_for_model”. Поскольку разные LLM используют разные методы для кодирования текста, нам нужно указать модель, которую мы будем использовать, которая является “gpt-3.5-turbo-16k”. Затем мы токенизируем и кодируем текст для каждого предложения.

# установка библиотекипип установить tiktoken
# импорт библиотекииз tiktoken импортировать encoding_for_model
# определение модели для кодирования текста, в данном случае "gpt-3.5-turbo-16k"
enc = encoding_for_model("gpt-3.5-turbo-16k")
# создание пустого списка для хранения токенов
tokens = []
# проходим через каждое предложение в списке "challenges"
for sentence in challenges:
    # кодируем предложение с использованием указанной модели и добавляем его в список "tokens"
    tokens.append(enc.encode(sentence))
# проверяем выводpd.DataFrame(data={'challenges':challenges, 'tokens':tokens}).head(3)
Вывод

Последним шагом является подсчет токенов, что можно сделать, определив длину списка “num_tokens”.

# создание пустого списка для хранения количества токенов
num_tokens = []
# итерация через список "tokens", который является списком списков
for item in tokens:
    # вложенный цикл для итерации по подспискам внутри "tokens"
    for subitem in item:
        # добавление подэлемента (токена) в список "num_tokens"
        num_tokens.append(subitem)
# проверяем выводlen(num_tokens)
Вывод

Чтобы оценить общую стоимость на основе нашего ввода, мы можем обратиться к документации по ценообразованию. В нашем случае 4629 токенов означают стоимость в размере $0.01.

Шаг 4: Настройка учетной записи OpenAI

Наш текст наконец-то готов для GPT-3 (мы приближаемся к интересному!). Для работы с GPT-3 мы будем использовать OpenAI API. Убедитесь, что у вас есть учетная запись OpenAI, чтобы получить доступ к OpenAI API. Если у вас еще нет учетной записи, следуйте описанным ниже шагам, чтобы создать ее.

Чтобы начать, перейдите на веб-сайт OpenAI и нажмите кнопку «Зарегистрироваться» в правом верхнем углу страницы. Заполните форму своим адресом электронной почты, создайте пароль и предоставьте любую другую необходимую информацию. Затем нажмите кнопку «Создать учетную запись». Отслеживайте свою почту, так как вы получите письмо для подтверждения. Кликните по ссылке в письме, чтобы подтвердить свою учетную запись. После этого вы можете войти в систему.

Создав учетную запись, следующим шагом будет ее пополнение. Помните, что при использовании API вы будете оплачивать его использование. Просто перейдите на вкладку «Управление учетной записью» и найдите вкладку «Платежи». Там вы можете указать данные своей платежной карты и указать начальную сумму, которую вы хотите внести на свой счет.

Последний важный шаг – сгенерировать ваш API-ключ, который служит как приватный ключ доступа к API. Вы можете создать его на вкладке «Ключи API». Храните этот ключ в надежном месте, так как его невозможно восстановить в случае потери. Однако, если он утрачивается, у вас есть возможность создать новый.

Шаг 5: Работа с GPT-3

Теперь, когда у нас есть доступ к GPT-3 через OpenAI API, мы можем отправить запрос с содержимым и API-ключом. В ответ мы получим ответ с содержимым GPT-3.

Использование GPT-3 через OpenAI API

Сначала мы установим библиотеку под названием openai. Затем мы установим API-ключ для аутентификации наших запросов.

# установка библиотеки pip install openai# импорт библиотекиimport openai as ai# замените 'your_api_key' на ваш настоящий API-ключai.api_key = 'your_api_key'

Мы отправим наш текст в GPT-3 и попросим его подвести итог основным темам, которые затем сохраняются в переменной «response».

💡 Примечание: Этот код является упрощенным примером, и вы можете адаптировать его для различных задач, изменяя пользовательское сообщение и системное сообщение в соответствии с вашими конкретными потребностями.

# получение ответа от GPT-3response = ai.ChatCompletion.create(    model = 'gpt-3.5-turbo-16k',    messages = [        {"role": "system", "content": "Вы полезный помощник. Ваша задача - проанализировать набор обзоров."},        {"role": "user", "content": f'''            Ниже представлен набор обзоров. Пожалуйста, определите основные темы, упомянутые в этих комментариях.             Вернуть список из 5 тем с описанием. Обзоры:            {challenges}            '''        }    ],    temperature = 0,    max_tokens = 6000)

Давайте разберемся с кодом по шагам:

  • response = ai.ChatCompletion.create(: Эта строка инициирует запрос к GPT-3 и присваивает ответ переменной «response».
  • model = 'gpt-3.5-turbo-16k': Этот параметр указывает, какую модель GPT-3 использовать.
  • messages = [ ... ]: В этом разделе определяется список сообщений, для которых GPT-3 будет создавать ответ. Каждое сообщение имеет роль (например, системы или пользователя) и содержимое. Системное сообщение помогает установить поведение GPT-3. Например, мы можем сказать: «Вы полезный помощник. Ваша задача – проанализировать набор обзоров». Пользовательское сообщение, с другой стороны, содержит инструкции для задачи. Например, мы можем сказать: «Ниже представлен набор обзоров. Пожалуйста, определите основные темы, упомянутые в этих комментариях».
  • temperature = 0: Этот параметр влияет на случайность ответов. Вы можете представить его как способ контроля того, насколько творческими и непредсказуемыми являются ответы. Установка его на 0 означает, что вы будете получать одинаковый вывод каждый раз, ка

    Получив ответ от GPT-3, мы вернем содержимое (без дополнительной мета-информации).

    # показать ответresponse['choices'][0]['message']['content']

    GPT-3 вернул пять тем:

    «1. Очистка и подготовка данных: Многие отзывы упоминают сложности очистки и подготовки данных для анализа. Это включает работу с отсутствующими значениями, проблемы форматирования, неструктурированными данными и необходимость обработки данных.

    2. Качество и документация данных: Несколько отзывов подчеркивают плохое качество данных, включая отсутствие документации, неправильную документацию и ненадежные данные. Также упоминаются проблемы полноты, точности и надежности данных.

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

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

    5. Вычислительная мощность и масштабируемость: В нескольких отзывах упоминаются проблемы, связанные с вычислительной мощностью и масштабируемостью, особенно при работе с большими наборами данных или при обработке данных на одной машине.»,«Эти темы отражают типичные проблемы, с которыми сталкиваются люди при работе с данными, включая проблемы, связанные с качеством данных, подготовкой данных, доступностью наборов данных и техническими ограничениями.»

    💡 Примечание: Хотя GPT-3 достаточно мощная, обычно лучшие результаты можно достичь, находясь в режиме доработки модели с помощью обучающих данных.

    Шаг 6: Подведение итогов

    Эти темы отражают типичные проблемы, с которыми сталкиваются люди при работе с данными, включая проблемы, связанные с подготовкой данных, качеством данных, надежностью и масштабируемостью. Компания, такая как Kaggle, может использовать эти идеи для создания образовательных материалов, которые специально решают эти проблемы, тем самым предоставляя ценную поддержку своему сообществу.

    Заключение

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

    Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы или мысли, я с удовольствием прочитаю их в комментариях!