"Обработка естественного языка"

Анализатор настроений в режиме реального времени

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

В финансовом году 2020–2021, охваченном пандемией, колоссальные 142 миллиона новых инвесторов начали торговать на фондовом рынке.

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

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

Анализ фондовых новостей в режиме реального времени

Требования:

  1. BeautifulSoup
  2. Библиотека HuggingFace Transformers
  3. Урллиб
  4. Numpy
  5. Панды

Получение данных

Давайте начнем с анализа финансовых новостей из надежного источника.

После просмотра нескольких веб-сайтов я обнаружил, что телеграфная лента разделяет свои акции в алфавитном порядке и использует галочку (ключевое слово) в своем URL-адресе для перехода к определенной акции. Такой интерфейс оказывается весьма полезным для сбора данных в Интернете.

Во-первых, давайте создадим список всех тиков с телеграфной ленты.

Я создал функцию get_ticks () для извлечения всех тиков за один раз из тикертапа / акций. Здесь название каждой акции ссылается на соответствующую страницу проверки. Ссылка имеет формат «/ акции / название-акции-тик».

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

Используя BeautifulSoup и urllib, я извлек тик и название акции и сохранил их в Pandas DataFrame в алфавитном порядке.

Результат выглядит так:

Теперь перейдем к новостной части. Для этого мы следуем шаблону, аналогичному get_ticks (). Новости, относящиеся к каждой акции, расположены в «тикертапе / биржевом тике / новостях? Checklist = basic & ref = stock-overview_overview-section & type = news». Опять же, используя BeautifulSoup и urllib, мы можем извлечь эту новость.

Запустив цикл for, в котором мы заменяем часть stock-tick элементами столбца tick нашего DataFrame, мы можем извлечь новости по каждой акции и сохранить их в списке. называется новости.

Теперь, когда у нас есть новости в нужном нам формате, мы можем перейти к анализу настроений.

Анализ настроений финансовых новостей

В этом проекте я планирую использовать предварительно обученную модель, известную как FinBERT.

FinBERT - это модель, специально разработанная для работы с финансовыми новостями и текстами. Это модель, основанная на архитектуре BERT. Наряду с библиотекой трансформеров HuggingFace, FinBERT становится действительно простым в реализации.

Более подробную информацию о BERT и FinBERT вы можете найти в моем блоге:

Анализ настроений в отношении финансовых новостей с помощью FinBERT

Теперь, когда FinBERT загружен, мы начинаем процесс анализа.

Поскольку FinBERT возвращает тональность в числовом формате, нам необходимо преобразовать вывод в более удобный для человека формат. Для этого мы создадим словарь Python под названием label.

Теперь о хорошем. Здесь мы используем объект токенизатора для предварительной обработки текста в соответствии с передовой практикой НЛП, а затем передаем вывод токенизатора объекту finbert для анализа тональности.

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

Наконец, мы переходим к созданию совокупности настроений, комбинируя настроения каждого заголовка каждой акции. Для этого я просто добавляю +1 к переменной agg, если заголовок положительный, и -1, если заголовок отрицательный. В зависимости от окончательного значения переменной agg я присваиваю акции положительное, отрицательное или нейтральное значение.

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

Результат выглядит так:

Таким образом, нам удалось создать анализатор настроений для индийского фондового рынка на основе финансовых новостей.

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

Весь код доступен в моем профиле git:



Спасибо за прочтение! 😄