FinBert — это предварительно обученная модель обработки естественного языка (NLP) с открытым исходным кодом, которая была специально обучена финансовым данным и превосходит почти все другие методы NLP для анализа финансовых настроений.

Выполнение анализа настроений по финансовым данным сложнее, чем обычные варианты использования. Давайте посмотрим на пример:

Продовольственные компании преуспевают, несмотря на спад на мировых рынках из-за Covid.

Обычные методы НЛП не смогут определить, что приведенное выше предложение является хорошей новостью и имеет положительное отношение к пищевым компаниям. Это связано с тем, что обычные методы НЛП, такие как word2vec, рассматривают каждое слово отдельно и не имеют контекста для слов. Чтобы понять настроение приведенного выше предложения, нам нужно быть осведомленным о контексте.

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

БЕРТ Успех

Одна из причин, по которой BERT более успешна, чем другие модели, заключается в том, что она использует модель встраивания на основе контекста. Рассмотрим пример ниже:

Предложение 1: Питон съел кролика.

Предложение 2: Python — один из самых популярных языков программирования.

Без контекста слово «питон» имело бы одинаковое значение в обоих предложениях. BERT просматривает предложение и выясняет, с какими словами «python» связано в предложении, и создает вложение слова «python» на основе контекста. BERT делает это с помощью преобразователей, которые представляют собой современную архитектуру глубокого обучения, которая в основном используется для обработки естественного языка. Архитектура использует парадигму кодер-декодер.

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

Это был полный рот, не так ли? Давайте посмотрим на это схематично.

Модель BERT предварительно обучена на большом наборе слов. Что такое предварительная подготовка? Предварительное обучение — это когда мы обучаем модель с огромным набором данных и потенциально очень большим количеством параметров для конкретной задачи и сохраняем обученную модель. Для любой новой задачи вместо инициализации новой модели случайными весами мы инициализируем ее весами обученной модели и корректируем веса для новой задачи. Это полезно, так как для нашей работы у нас может не быть свободного доступа к огромным объемам обучающих данных, и мы сэкономим много времени и ресурсов, которые тратятся на обучение модели.

Модель BERT предварительно обучена с использованием двух задач: моделирования маскированного языка и предсказания следующего предложения. Модели BERT были обучены на BookCorpus и английской Википедии, которые в общей сложности содержат более 3,5 миллиардов слов. Я нашел эту книгу отличным справочником по BERT.

Тонкая настройка BERT для конкретного домена

Многие модели предметной области появились с использованием BERT в качестве основы и используются для задач НЛП. Некоторые из них: FinBERT для финансов, BioBERT для биомедицины, VideoBERT для категоризации субтитров к видео, ClinicalBERT для больниц и многие другие продолжают развиваться. Если вы ищете передовые, предварительно обученные модели глубокого обучения для какой-либо области, стоит изучить, существует ли модель DomainBERT для этой области. Вы можете сэкономить много времени и гораздо быстрее получить качественный результат.

В этой статье я сосредоточусь только на FinBERT.

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

ФинБЕРТ

FinBERT — это языковая модель, основанная на BERT. Он дополнительно обучает модель BERT для финансовых данных. Дополнительный учебный корпус представляет собой набор из 1,8 млн новостных статей Reuters и Financial PhraseBank. Как упоминается в этой статье, основным используемым набором данных для анализа настроений является Financial PhraseBank, который состоит из 4845 английских предложений, выбранных случайным образом из финансовых новостей, найденных в базе данных LexisNexis. Затем эти предложения были прокомментированы 16 людьми, имеющими опыт работы в сфере финансов и бизнеса.

Выполнение

Модель анализа настроений FinBERT доступна в хабе моделей Hugging Face. Получить модель можно здесь. Реализация FinBERT зависит от библиотеки pytorch_pretrained_bert Hugging Face и их реализации BERT для задач классификации последовательностей.

Чтобы продемонстрировать FinBert в действии, я буду использовать набор данных финансовых новостей от Kaggle. Часть моего кода вдохновлена ​​этим ноутбуком и проектом. Я использовал Google Colab для запуска этого кода, в первую очередь потому, что установка преобразователей pip на моем компьютере с Windows оказалась кошмаром из-за того, что зависимости библиотеки для конкретной версии было трудно разрешить. Он без проблем работал в Google Colab. Мне пришлось сократить размер набора данных до 50 строк, чтобы не выходить за пределы ОЗУ, поскольку я использовал уровень бесплатного пользования. Здесь вы можете увидеть работающий код:



Для удобства я вставляю соответствующий код ниже.

df = pd.read_csv("reuters_headlines.csv", nrows=50)

df_array = np.массив (df)

df_list = список (df_array [:, 0])

tokenizer = AutoTokenizer.from_pretrained("ProsusAI/finbert")

модель = AutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert")

inputs = tokenizer(df_list, padding = True, truncation = True, return_tensors=’pt’) #маркировать текст для отправки в модель

выходы = модель (** входы)

прогнозы = torch.nn.functional.softmax(outputs.logits, dim=-1)

model.config.id2label

положительный = предсказания [:, 0].tolist()

отрицательный = предсказания [:, 1].tolist()

нейтральный = прогнозы [:, 2].tolist()

table = {'Заголовок':df_list, «Положительный»:положительный, «Отрицательный»:отрицательный, «Нейтральный»:нейтральный}

df2 = pd.DataFrame (таблица, столбцы = [«Заголовок», «Положительный», «Отрицательный», «Нейтральный»])

Результат проведенного анализа настроений показан ниже.

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

Заключение

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

Не стесняйтесь связаться со мной в LinkedIn: https://www.linkedin.com/in/purohit/

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

  1. Книга: Начало работы с Google BERT https://www.packtpub.com/product/getting-started-with-google-bert/9781838821593
  2. Диссертация: FinBERT: анализ финансовых настроений с помощью предварительно обученных языковых моделей Dogu Tan Araci (https://arxiv.org/pdf/1908.10063.pdf)
  3. Исходная реализация FinBERT: https://github.com/ProsusAI/finBERT
  4. Набор данных Kaggle, используемый в этой статье: https://www.kaggle.com/notlucasp/financial-news-headlines
  5. Эталонная реализация 1: https://colab.research.google.com/drive/1C6_ahu0Eps_wLKcsfspEO0HIEouND-oI?usp=sharing
  6. Эталонная реализация 2: https://github.com/ProsusAI/finBERT/blob/master/scripts/predict.py

Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.