Автор: Шамрин Ирам

Введение

В этом сообщении блога мы собираемся выполнить анализ настроений в обзорах фильмов, используя SliceX AI™ Cloud API. Мы знаем, когда кто-то говорит: Мне понравился этот фильм! они выражают положительные настроения. А если они скажут: Этот фильм был очень скучным, я его ненавидел! они настроены решительно негативно по этому поводу. Но как сделать это систематически? Как отзывы критиков соотносятся с отзывами пользователей и что вы о них думаете? Очень хочется проверить, но стоит ли? 🤓 Итак, приступим.

Анализ настроений — отличная вводная задача в НЛП. Этот метод включает анализ мнений, выраженных в данных на естественном языке, для выявления полярности преобладающих настроений. Он широко используется в областях, где обратная связь от клиента/покупателя/конечного пользователя восходит к организационным и бизнес-стратегиям. Например. использование обзоров продуктов для улучшения дизайна продукта и принятия решений о продажах. Или использовать опросы удовлетворенности, чтобы улучшить качество обслуживания клиентов в сфере услуг.

Мы будем выполнять наш анализ с помощью предварительно обученного API-интерфейса отзывов клиентов Predictor из облачной платформы SliceX AI™. Облачные API-интерфейсы SliceX AI™ работают из коробки, невероятно быстры и очень просты в использовании (см. вводный блог здесь). Существуют различные доступные планы подписки, в том числе бесплатный, если вы хотите сначала просто попробовать. Итак, давайте начнем.

Подготовка набора данных — парсинг веб-страниц

Сначала нам нужно собрать набор данных. Мы сделаем небольшой парсинг, используя пакет Python Beautiful Soup. Вам также понадобится пакет Requests. Вы можете быстро установить обе зависимости, используя pip или conda install:

conda install requests
conda install BeautifulSoup4

Теперь мы готовы к скребку! 😎 В качестве источника данных мы будем использовать сайт обзоров фильмов Metacritic. Перейдите на https://www.metacritic.com и найдите нужный фильм в строке поиска. Здесь воспользуемся Top Gun Maverick.

Мы будем собирать обзоры критиков и пользователей отдельно и анализировать их, чтобы увидеть, как они соотносятся друг с другом. Теперь самое время изучить сайт и понять древовидную структуру его HTML-тегов, из которых нам нужно будет передать в качестве class заголовков соответствующие заголовки в Beautiful Soup, чтобы он мог анализировать правильные записи (т.е. обзоры). . Вы можете сделать это, например, в Google Chrome, наведя указатель мыши на нужные записи (например, на отзыв конкретного пользователя) и используя параметр Inspect в раскрывающемся меню правой кнопки мыши. Вот как это будет выглядеть для записи на странице отзывов пользователей:

Тег class для основного текста отзыва выглядит как 'review-body' . Мы также передадим user-agent в наш скрипт, чтобы сайт не помечал наш запрос как бот. Обзоры разделены на 5 страниц, поэтому мы будем перебирать URL-адреса для всех 5. Теперь мы можем проанализировать записи:

import requests
from bs4 import BeautifulSoupuser_agent = {'User-agent': 'Mozilla/5.0'}reviewsUser=[]for i in range(5):
    url = f'https://www.metacritic.com/movie/top-gun-maverick/user-reviews?page={i}'
    
    response = requests.get(url, headers = user_agent)
    soup = BeautifulSoup(response.text, 'html.parser')
    for j in range(len(soup.find_all('div', class_='review_body'))):
        reviewsUser.append(soup.find_all('div', class_='review_body')[j].find('span').text)

Вы можете просмотреть список reviewsUser, чтобы убедиться, что вы смогли извлечь нужные записи. Вот фрагмент из записи reviewsUser[1] :

"It is really good I like the actions and the relations between maverick and the students."

Точно так же для обзоров критиков изменяются теги URL и class, и вы можете снова использовать тот же сценарий с небольшим изменением форматирования извлеченного текста. Все отзывы теперь на одной странице:

reviewsCritic=[]url = 'https://www.metacritic.com/movie/top-gun-maverick/critic-reviews'
    
response = requests.get(url, headers = user_agent)
soup = BeautifulSoup(response.text, 'html.parser')
for i in range(len(soup.find_all('div', class_='summary'))):
    reviewsCritic.append(soup.find_all('div', class_='summary')[i].text.strip().split('\n')[0])

Теперь у нас есть наши очищенные отзывы пользователей и критиков в списках reviewsUserи reviewsCritic, и мы готовы начать вывод. Вы можете добавить очищенные данные из другого источника, например https://www.imdb.com/, используя тот же процесс, описанный здесь. Мы оставляем это как упражнение!

Анализ обзоров фильмов с использованием общедоступного API SliceX AI™ Cloud

Для выполнения логического вывода мы будем использовать предварительно обученный customer-review API от SliceX AI™ Cloud Platform. Эта модель была обучена на большом и разнообразном корпусе, чтобы идентифицировать и классифицировать настроения в отзывах по двухуровневой схеме: положительныеилиотрицательные. Выполнениевывода в этом API так же просто, как отправка cURL или python request в нужную конечную точку из вашей командной строки, передавая ваш запрос.

Начало работы.Чтобы получить доступ к API, сначала необходимо зарегистрироваться и получить уникальный ключ API. Перейдите на https://slicex.ai/GetStarted, чтобы получить свой, если у вас его нет. Вы можете подписаться на бесплатный базовый уровень, чтобы начать прямо сейчас. У вас по-прежнему будет доступ к 10 000 запросов на вывод и 3 настраиваемым заданиям по обучению в месяц (без необходимости указывать кредитную карту в файле).

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

headers = {
    'Content-Type': 'application/json',
    'x-api-key': API_Key, #enter your key here
}body = {
        'query': reviewsUser[1],
    }response = requests.post(
        'https://api.slicex.ai/predictor/language/pre-trained/customer-review',
        headers=headers,
        json=body,
    )print(response.json())

с ответом API:

{'data': {'labels': ['POSITIVE', 'NEGATIVE'], 'scores': [0.9870514869689941, 0.01294851303100586]}, 'metadata': {'model_inference_time_ms': 7.71728515625}}

Как видите, модель смогла правильно определить положительное настроение, выраженное в обзоре, со сквозной задержкой около 8 мс. Теперь мы запустим весь набор данных с 476 отзывами пользователей и 63 отзывами критиков. Здесь я использовал requests_cache вместо requests для дальнейшего ускорения вывода:

from tqdm import tqdm
import requests_cache%%timesession = requests_cache.CachedSession('demo_cache')headers = {
    'Content-Type': 'application/json',
    'x-api-key': API_key, 
}sentimentUser = []for review in tqdm(reviewsUser):body = {
        'query': review,
    }response = session.post(
        'https://api.slicex.ai/predictor/language/pre-trained/customer-review',
        headers=headers,
        json=body,
    )
    
    sentimentUser.append(response.json()['data']['labels'][0])

Аналогичным образом повторите процесс для reviewsCritic, чтобы получить ответы в списке sentimentCritic. Вот и все! Наша задача на вывод завершена.

Заключение

Теперь мы быстро изучаем результаты, чтобы принять крайне важное решение о том, хотим мы смотреть этот фильм или нет. 😝 Интересно проверить режим — что большинство пользователей и большинство критиков думают о фильме?

import statistics
from statistics import mode
mode(sentimentUser)

дает ‘POSITIVE’. Точно так же mode(sentimentCritic) также дает ‘POSITIVE’. Если вы хотите посмотреть на распространение раздачи:

import matplotlib.pyplot as plt
plt.hist(sentimentUser, alpha=0.2, label="user")
plt.hist(sentimentCritic, alpha=0.5, label="critic")
plt.legend()
plt.show()

Итак, вердикт таков: громкое «Смотрите!» как от критиков, так и от пользователей!

Следующие шаги

Хотя этот ироничный пример был просто предназначен для того, чтобы провести вас через процесс начала работы с логическим выводом, вы можете очень легко адаптировать его в соответствии со своей областью выбора. Облачная платформа SliceX AI™ Cloud Platform имеет множество других предварительно обученных API-интерфейсов классификации для множества интересных вариантов использования, таких как анализ отзывов клиентов, категоризация новостей, финансовая поддержка клиентов. категоризация, обнаружение токсичности и т. д. Наряду с API для распознавания именованных объектов, ответов на вопросы и многого другого, например генерации текста. , суммирование текста и встраивание текстового представления (скоро!). Чтобы получить доступ и начать свои собственные проекты, перейдите на https://slicex.ai/Getstarted.

Ознакомьтесь с документами для различных вариантов использования, к которым вы можете адаптировать свои коды логического вывода. Еще лучше — если вы чувствуете, что готовы приступить к индивидуальному обучению своих собственных моделей, пришло время проверить API-интерфейсы Trainer. Следите за новостями — это будет дальше в блоге! Спасибо, что прочитали об этом!

Подпишитесь на нас 👉 LinkedIn, Twitter, а также хватайте свой кусочек ИИ 📣📣📣