Узнайте, как ChatGPT-3 выводит анализ настроений на новый уровень в Python

Узнайте, как ChatGPT-3 выводит анализ настроений на новый уровень в Python

Анализ настроений распознаёт и извлекает из текста субъективные знания, такие как мнения, эмоции и отношения. Он имеет широкое применение в различных областях, от исследования рынка и анализа отзывов клиентов до мониторинга социальных сетей и политических опросов.

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

GPT-3 , или Generative Pre-trained Transformer 3 , — это языковая модель искусственного интеллекта, разработанная OpenAI . Она произвела фурор в сообществе ИИ благодаря своей исключительной способности генерировать связный и похожий на человеческий текст в различных стилях и тонах. Однако GPT-3 не ограничивается только генерацией текста; он также обладает огромным потенциалом для приложений, связанных с речью, включая анализ настроений.

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

В этом руководстве мы увидим, как использовать возможности GPT-3 для анализа настроений в Python и как настроить среду, подготовить набор данных, построить модель и оценить модель с помощью GPT-3 API для анализа настроений. К концу этого руководства у вас будет четкое представление о том, как GPT-3 работает для анализа настроений и как использовать этот мощный инструмент искусственного интеллекта, чтобы получить представление об эмоциях и мнениях, выраженных в тексте.

Содержание статьи

  • Настройка среды
  • Подготовка данных
  • Построение модели
  • Оценка модели
  • Заключение
  • Ссылки

I. Настройка среды

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

Вот основные компоненты, которые нам понадобятся для этого проекта:

  • Python 3.x
  • Ключ API OpenAI
  • Библиотека OpenAI Python
  • Библиотека Pandas
  • Библиотека Numpy

Ниже приведено пошаговое руководство по установке и настройке необходимых компонентов:

  • Установите Python 3.x. Если вам всё ещё нужно установить Python 3.x на свой компьютер, загрузите его с официального веб-сайта документации Python ( https://www.python.org/downloads/ ).
  • Получите ключ API OpenAI: вы должны создать учётную запись в OpenAI и сгенерировать ключ API, чтобы использовать GPT-3. Вы можете сделать это, следуя инструкциям на сайте OpenAI ( https://platform.openai.com/account/api-keys ).
  • Установите библиотеку OpenAI Python: получив ключ API, вы можете установить библиотеку OpenAI Python с помощью pip. Откройте командную строку или окно терминала и выполните следующую команду: pip install openai
  • Установите библиотеку Pandas: Pandas — это популярная библиотека для работы с данными в Python, которую мы будем использовать в этом проекте. Вы можете установить её с помощью pip, выполнив следующую команду: pip install pandas
  • Установите библиотеку Numpy: Numpy — ещё одна библиотека для числовых операций в Python. Вы можете установить её с помощью pip, выполнив следующую команду: pip install numpy

Теперь, когда у нас установлены все необходимые компоненты, мы готовы перейти к следующим шагам проекта.

II. Подготовка данных

Прежде чем мы сможем использовать GPT-3 для анализа настроений, нам нужен набор данных для обучения модели. В этом руководстве мы будем использовать набор данных Stanford Sentiment Treebank , который содержит обзоры фильмов, помеченные соответствующими оценками настроений ( положительными или отрицательными ).

Примечание. Набор данных можно загрузить с веб-сайта Стэнфорда ( http://nlp.stanford.edu/~socherr/stanfordSentimentTreebank.zip ) .

Набор данных содержит пять файлов:

  • Dictionary.txt: сопоставление каждого слова с уникальным индексом.
  • datasetSentences.txt: список всех предложений в наборе данных вместе с их исходным индексом.
  • mind_labels.txt: сопоставление индекса каждого предложения с соответствующей оценкой тональности (0–1).
  • SOStr.txt: исходные предложения из набора данных.
  • STree.txt: дерево синтаксического анализа для каждого предложения в наборе данных.

Предварительная обработка данных для анализа настроений GPT-3. Чтобы использовать GPT-3 для анализа настроений в этом наборе данных, мы должны предварительно обработать данные, преобразовав исходные предложения в формат, который может использовать API GPT-3.

Вот основные этапы предварительной обработки данных:

  • Удалите все специальные символы или знаки препинания из предложений.
  • Замените сокращения (например, "don’t” -> “do not”)
  • Разделите предложения на отдельные слова.
  • Разбейте предложения на куски фиксированной длины (например, 256 токенов), чтобы избежать превышения максимальной длины последовательности, разрешённой GPT-3.
import re import numpy as np def preprocess_text(text): # Remove special characters and punctuation text = re.sub(r'[^\w\s]', '', text) # Replace contractions with full words text = re.sub(r"won't", "will not", text) text = re.sub(r"can\'t", "can not", text) text = re.sub(r"n\'t", " not", text) text = re.sub(r"\'re", " are", text) text = re.sub(r"\'s", " is", text) text = re.sub(r"\'d", " would", text) text = re.sub(r"\'ll", " will", text) text = re.sub(r"\'t", " not", text) text = re.sub(r"\'ve", " have", text) text = re.sub(r"\'m", " am", text) # Tokenize the text into individual words tokens = text.split() # Split the tokens into chunks of fixed length (e.g. 256 tokens) max_seq_len = 256 num_chunks = int(np.ceil(len(tokens) / max_seq_len)) token_chunks = [tokens[i * max_seq_len:(i + 1) * max_seq_len] for i in range(num_chunks)] # Join the token chunks back into strings text_chunks = [' '.join(chunk) for chunk in token_chunks] return text_chunks
  • Этот код определяет функцию preprocess_text() , которая принимает текстовую строку и выполняет этапы предварительной обработки, упомянутые ранее.
  • Она возвращает список предварительно обработанных фрагментов текста, где каждый фрагмент представляет собой строку, состоящую не более чем из 256 токенов.

Изучение предварительно обработанных данных:

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

Вы можете вызвать функцию preprocess_text() для предложений в файле datasetSentences.txt , чтобы предварительно обработать данные анализа настроений GPT-3.

Мы можем использовать библиотеку Pandas, чтобы загрузить файл sentient_labels.txt и создать гистограмму оценок тональности.

Вот пример того, как загрузить оценки настроений и создать гистограмму:

import pandas as pd import matplotlib.pyplot as plt # Load sentiment scores from sentiment_labels.txt sentiment_labels = pd.read_csv("stanfordSentimentTreebank/sentiment_labels.txt", delimiter='|') sentiment_scores = sentiment_labels['sentiment values'].tolist() # Preprocess sentences from datasetSentences.txt with open("stanfordSentimentTreebank/datasetSentences.txt", "r") as f: sentences = f.readlines() preprocessed_sentences = [preprocess_text(sentence) for sentence in sentences] # Flatten preprocessed sentences into a single list of chunks preprocessed_chunks = [chunk for sentence in preprocessed_sentences for chunk in sentence] # Plot histogram of sentiment scores plt.hist(sentiment_scores, bins=10) plt.title("Distribution of Sentiment Scores") plt.xlabel("Sentiment Score") plt.ylabel("Frequency") plt.show()
Узнайте, как ChatGPT-3 выводит анализ настроений на новый уровень в Python

Этот код загружает оценки настроений из файла sense_labels.txt , выполняет предварительную обработку предложений из datasetSentences.txt с помощью определённой ранее функции preprocess_text() и объединяет предварительно обработанные предложения в единый список фрагментов. Наконец, он создает гистограмму оценок настроений с использованием библиотеки Matplotlib . Он отображает его с помощью функции plt.show() .

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

III. Построение модели

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

Чтобы сгенерировать прогноз настроений, мы можем использовать API OpenAI для отправки предварительно обработанных текстовых фрагментов в GPT-3 и получения на выходе оценки настроений от 0 до 1 .

Чтобы использовать GPT-3 для анализа настроений в наборе данных Stanford Sentiment Treebank, нам сначала нужно обучить его на подмножестве данных.

Вот основные этапы обучения модели GPT-3:

  • Разделите предварительно обработанные фрагменты текста на наборы для обучения и проверки.
  • Используйте API OpenAI для отправки обучающего набора в GPT-3 и получения прогнозов тональности для каждого фрагмента.
  • Обучите простую модель линейной регрессии на прогнозах GPT-3 и фактических оценках настроений из набора данных.
  • Оцените модель на проверочном наборе, чтобы измерить её производительность.

Вот, как реализовать эти шаги в Python:

# Split preprocessed chunks into training and validation sets num_chunks = len(preprocessed_chunks) train_size = int(num_chunks * 0.8) train_chunks = preprocessed_chunks[:train_size] val_chunks = preprocessed_chunks[train_size:] # Use OpenAI API to generate sentiment predictions for training set import openai openai.api_key = "YOUR_API_KEY" model_engine = "davinci" train_predictions = [] for chunk in train_chunks: response = openai.Completion.create( engine=model_engine, prompt=chunk + " Sentiment: ", max_tokens=1 ) sentiment_prediction = float(response.choices[0].text) train_predictions.append(sentiment_prediction) # Train linear regression model on GPT-3 predictions from sklearn.linear_model import LinearRegression X_train = np.array(train_predictions).reshape(-1, 1) y_train = sentiment_scores[:train_size] regressor = LinearRegression() regressor.fit(X_train, y_train) # Use OpenAI API to generate sentiment predictions for validation set val_predictions = [] for chunk in val_chunks: response = openai.Completion.create( engine=model_engine, prompt=chunk + " Sentiment: ", max_tokens=1 ) sentiment_prediction = float(response.choices[0].text) val_predictions.append(sentiment_prediction) # Evaluate model on validation set X_val = np.array(val_predictions).reshape(-1, 1) y_val = sentiment_scores[train_size:] val_score = regressor.score(X_val, y_val) print("Validation R^2 Score: ", val_score) #The training of the model can take anywhere between 6-12hours #based on your processor and power of your device.
  • Этот код разбивает предварительно обработанные фрагменты на наборы для обучения и проверки.
  • Создаёт прогнозы настроений для обучающего набора с помощью API OpenAI.
  • Обучает простую модель линейной регрессии на прогнозах GPT-3 и точных оценках настроений.
  • Создает прогнозы настроений для набора проверки
  • Оценивает производительность модели с помощью показателя R².

Тонкая настройка модели для повышения производительности:

После обучения модели на подмножестве данных мы можем точно настроить её на полном наборе данных, чтобы повысить её производительность.

Вот основные этапы тонкой настройки модели:

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

Вот пример того, как реализовать эти шаги в Python:

# Use OpenAI API to generate sentiment predictions for full dataset full_predictions = [] for chunk in preprocessed_chunks: response = openai.Completion.create( engine=model_engine, prompt=chunk + " Sentiment: ", max_tokens=1 ) sentiment_prediction = float(response.choices[0].text) full_predictions.append(sentiment_prediction) # Train linear regression model on full dataset X_full = np.array(full_predictions).reshape(-1, 1) y_full = sentiment_scores regressor = LinearRegression() regressor.fit(X_full, y_full) # Evaluate model on full dataset full_score = regressor.score(X_full, y_full) print("Full Dataset R^2 Score: ", full_score)

Этот код генерирует прогнозы тональности для полностью предварительно обработанного набора данных с помощью API OpenAI, обучает простую модель линейной регрессии на прогнозах GPT-3 и точных оценках тональности, а также оценивает производительность модели, используя показатель R² для полного набора данных.

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

IV. Оценка модели

Чтобы оценить производительность модели GPT-3 для анализа настроений, мы можем использовать различные показатели, такие как точность, достоверность, полнота и оценка F1 . В этом руководстве мы сосредоточимся на показателе R² , который измеряет долю дисперсии в точных показателях тональности, которую могут объяснить прогнозы GPT-3.

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

Вот основные этапы тестирования модели:

  • Используйте API OpenAI для создания прогнозов настроений для проверочного набора.
  • Оцените производительность модели, используя показатель R².

Вот пример того, как реализовать эти шаги в Python:

# Use OpenAI API to generate sentiment predictions for validation set val_predictions = [] for chunk in val_chunks: response = openai.Completion.create( engine=model_engine, prompt=chunk + " Sentiment: ", max_tokens=1 ) sentiment_prediction = float(response.choices[0].text) val_predictions.append(sentiment_prediction) # Evaluate model on validation set X_val = np.array(val_predictions).reshape(-1, 1) y_val = sentiment_scores[train_size:] val_score = regressor.score(X_val, y_val) print("Validation R^2 Score: ", val_score)

Этот код генерирует прогнозы настроений для проверочного набора с помощью API OpenAI. Он оценивает производительность модели на проверочном наборе с использованием оценки R².

Анализ производительности модели:

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

Вот некоторые вещи, которые следует учитывать при анализе производительности модели:

  • Достаточно ли высок показатель R², чтобы указать на хорошую производительность?
  • Существуют ли закономерности или тенденции в ошибках модели (например, постоянно недооценка или переоценка настроений)?
  • Существуют ли какие-либо типы предложений или фраз, с которыми модель постоянно нуждается в помощи?

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

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

import seaborn as sns # Use OpenAI API to generate sentiment predictions for full dataset full_predictions = [] for chunk in preprocessed_chunks: response = openai.Completion.create( engine=model_engine, prompt=chunk + " Sentiment: ", max_tokens=1 ) sentiment_prediction = float(response.choices[0].text) full_predictions.append(sentiment_prediction) # Create scatter plot of model predictions vs. true sentiment scores sns.scatterplot(x=full_predictions, y=sentiment_scores) plt.title("Model Predictions vs. True Sentiment Scores") plt.xlabel("GPT-3 Predictions") plt.ylabel("True Sentiment Scores") plt.show()

Этот код генерирует прогнозы настроений для полностью предварительно обработанного набора данных с использованием API OpenAI . Он создаёт точечную диаграмму прогнозов модели по сравнению с точными оценками настроений. Это может помочь нам визуализировать закономерности или тенденции ошибок модели.

Анализируя производительность модели, мы можем получить представление о её сильных и слабых сторонах и внести улучшения для повышения её производительности.

Заключение

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

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

Рекомендации

  • OpenAI. (2021). ГПТ-3. https://openai.com/gpt-3/
  • Stanford Sentiment Treebank. https://nlp.stanford.edu/sentiment/index.html
  • Пеннингтон, Дж., Сочер, Р., и Мэннинг, CD (2014). GloVe: глобальные векторы для представления слов. Материалы конференции 2014 г. по эмпирическим методам обработки естественного языка (EMNLP), 1532–1543 гг.
11
Начать дискуссию