Автор: Шамрин Ирам
Введение
В этом сообщении блога мы собираемся выполнить анализ настроений в обзорах фильмов, используя 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, а также хватайте свой кусочек ИИ 📣📣📣