Авторы: Дэниел Тан Вэй Хао (технический руководитель), Клеон Анг Канронг (технический руководитель), Тео Вэй Мин, Чжэн Илинь, Чан Чжо Ян, Брэндон Чиу Си, Ханс Неддьянто Танджунг

Введение

Могут ли компьютеры понимать человеческий язык так же хорошо, как люди? Область обработки естественного языка (NLP) ищет ответ на этот вопрос. Машинное обучение используется в НЛП для обработки больших объемов текстовых данных и извлечения из этих данных полезной информации. В частности, анализ настроений — это подраздел НЛП, в котором используются такие методы машинного обучения для извлечения эмоций или коннотаций за текстовыми данными.

Алгоритмы, используемые при анализе настроений, обычно классифицируют текст по категориям положительных, отрицательных или нейтральных настроений. В качестве альтернативы это может быть представлено оценкой тональности, которая может варьироваться от -1 (отрицательная тональность) до 0 (нейтральная тональность) и до 1 (положительная тональность).

В финансах анализ настроений имеет множество применений. В этом проекте нам было интересно изучить, как настроение новостных статей об определенных акциях может повлиять на их доходность в разные периоды времени. Мы изучили эффективность обучения различных моделей машинного обучения (включая логистическую регрессию, случайный лес, XGBoost и BERT) для прогнозирования поведения публично зарегистрированных акций по отношению к рыночному индексу (S&P500). Этот анализ был проведен в течение 3 краткосрочных и среднесрочных периодов времени: 3 месяца, 6 месяцев и 1 год.

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

Предварительная обработка данных

Финансовые новости были получены с помощью запроса на получение одной из конечных точек API от Marketaux, поставщика новостей о фондовом рынке и финансах. Конечная точка API, которую мы использовали, — https://api.marketaux.com/v1/news/all, и пример параметров, которые мы передали для получения всех новостей Apple за последний год, выглядит следующим образом. :

{
   “api_token”: <Your API token found on your account dashboard>,
   “symbols”: “AAPL”,
   “published_before”: 2021-12-16
   “Published_after”: 2022-12-16
}

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

Исторические цены S&P 500 были получены от Yahoo Finance с использованием библиотеки yfinance Python и из базы данных Центра исследований цен на ценные бумаги (CRSP), предоставленной Wharton Research Data Services. База данных CRSP предоставила нам подробную ежедневную и даже ежечасную финансовую информацию об акциях. Однако мы решили использовать для этого проекта только дневные исторические цены.

Для каждого биржевого тикера и даты берется его цена через 3 месяца, 6 месяцев и 1 год после даты (если будущая дата приходится на выходные, берется следующий день). Рассчитывается процентное изменение. Это сравнивается с процентным изменением цены S&P 500 за тот же период времени. Если процентное изменение меньше определенного порогового значения, данные будут помечены как 0. Если изменение цены акции по крайней мере на пороговый процент больше, чем у цен S&P 500, то оно превзошло S&P 500, и данные помечены как 1. В противном случае акции показали низкие результаты и помечены цифрой 2.

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

Этапы предварительной обработки

Как маркированные рыночные данные, так и новостные данные содержат биржевой тикер и поле даты. Метки были перенесены в новостные данные путем нахождения соответствующей метки для того же тикера и даты новости в рыночных данных.

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

Обучение модели

BM25

BM25 (Best Match 25) — это функция поиска набора слов, которая ранжирует набор документов на основе появления терминов запроса в каждом документе, игнорируя близость терминов запроса. Это функция ранжирования, используемая поисковыми системами для определения степени релевантности набора документов по отношению к поисковому запросу, и ее можно рассматривать как улучшение по сравнению с TF-IDF.

Функция оценки BM25 выглядит следующим образом:

Чтобы лучше понять BM25, мы углубимся в компоненты функции оценки BM25.

Частота термина (TF)
TF обозначается как f(q, D) в приведенной выше формуле. Это количество раз, когда термин появляется в документе. Например, у нас есть следующий набор документов:

Частота термина «а» для документа 1, f(qa, D1), равна 2. Это связано с тем, что термин «а» дважды появился в документе 1.

Интуитивно, документ должен быть более релевантным, если ключевое слово появляется часто. Таким образом, показатель BM25 увеличивается с более высоким TF.

Частота документов (DF)
DF – это количество документов, содержащих определенный термин. Возвращаясь к предыдущему примеру, частота документа для слова «a», DF('a'), равна 2. Это связано с тем, что слово «a» появилось в документах 1 и 2. Обратите внимание, что мы не подсчитываем количество раз слово «а» появлялось в наборе документов.

Частота обратного документа (IDF)
IDF – это логарифмически масштабированная обратная доля документов, содержащих условие запроса.

Чтобы получить это, мы сначала рассчитаем долю документов, содержащих термин запроса. Это можно получить, разделив общее количество документов N на DF. После этого мы просто применим логарифм к обратной этой дроби.

Математически это выражается следующей формулой:

где n(qᵢ) — DF для термина запроса qᵢ, а N — общее количество документов.

IDF измеряет частоту поискового термина во всех документах и ​​наказывает те поисковые термины, которые являются общими (n (qᵢ) находится в знаменателе).

Это сделано для того, чтобы учесть сценарий, в котором условия поиска являются общеупотребительными словами. Для обычных слов они, как правило, имеют высокие значения TF и ​​DF. Однако эти условия поиска могут оказаться бесполезными для определения степени релевантности. Без части IDF оценка BM25 будет несправедливо высокой для поисковых запросов, содержащих общие слова, из-за высокого значения TF. Таким образом, мы должны ввести штраф (IDF), чтобы уменьшить влияние высокого TF на оценку BM25.

Существуют различные варианты расчета IDF, но основная идея остается неизменной. Для BM25 мы обычно используем вероятностную IDF, которая выглядит следующим образом:

Объяснение (|D| / avgdl) в функции оценки BM25
|D| обозначает длину текущего документа, а avgdl обозначает среднюю длину всех документов. Этот термин можно рассматривать как текущую длину документа по отношению к средней длине документа, и он будет иметь большое значение для длинных документов. Так как этот член стоит в знаменателе, мы штрафуем длинные документы. Интуитивно это имеет смысл, так как более вероятно, что длинные документы будут содержать условия поиска. При прочих равных условиях более короткий документ более релевантен, чем длинный документ с тем же значением TF.

Таким образом, вышеуказанные компоненты составляют функцию оценки BM25. Значение балла BM25 будет указывать на степень релевантности соответствующих документов.

TF-IDF

TF-IDF измеряет релевантность слова в документе среди набора документов. Оценка слов TF-IDF в заголовке каждой новостной статьи использовалась в качестве признаков для обучения моделей машинного обучения.

TF-IDF рассчитывается путем умножения двух показателей: частоты терминов (TF) и обратной частоты документов (IDF). Термин «частота слова в документе» — это количество раз, когда это слово встречается в документе. Затем обратная частота документа говорит нам, насколько часто слово встречается в наборе документов. Его можно рассчитать, разделив общее количество документов на количество документов, содержащих слово, а затем вычислив его логарифм. Такие термины, как «есть», «тот» и «из», часто встречаются во всех документах, поэтому их очень низкий балл IDF помогает минимизировать их вес при увеличении количества более редких терминов, которые, вероятно, окажут большее влияние на конкретный документ.

Предварительная обработка заголовков новостей происходит следующим образом. Во-первых, все слова, содержащие неанглийские символы, были удалены. Затем слова преобразуются в нижний регистр и лемматизируются. Наконец, оценки TFIDF для каждого слова в каждом заголовке новости были получены с использованием класса sklearn.feature_extraction.text.TfidfVectorizer. Эти оценки используются в качестве признаков для обучения моделей машинного обучения, логистической регрессии, случайного леса и XGBoost.

Ниже приведены результаты:

ФинБЕРТ

Другая модель, которую мы изучили, — FinBERT. FinBERT — это предварительно обученная модель НЛП для анализа тональности финансового текста. Он построен путем дальнейшего обучения языковой модели BERT в области финансов с использованием большого финансового корпуса и, таким образом, точной настройки для классификации финансовых настроений. В частности, мы использовали предварительно обученную модель ProsusAI/finbert на HuggingFace для выполнения обучения переносу на нашем помеченном наборе данных, упомянутом ранее, после настройки нашего тренера для учета дисбаланса в нашем наборе данных.

Аргументы обучения, на которых мы в конечном итоге остановились, следующие:

num_train_epochs=5,
warmup_ratio=0.1,
weight_decay=0.01,
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
evaluation_strategy ="epoch",
save_strategy = "epoch",
save_total_limit = 1, # only best model is saved - older ones overwritten
load_best_model_at_end=True,
lr_scheduler_type='cosine'

Однако нам удалось добиться точности только 0,74 на проверочном наборе и 0,57 на тестовом наборе, что немного хуже, чем мы ожидали.

БЕРТ

Мы также изучили исходную базовую модель BERT для нашего анализа тональности новостей. BERT — это предварительно обученная модель НЛП, которая используется для прогнозирования тональности любого общего текста и не ограничивается только финансовыми данными. Мы использовали модель BERT с 12 слоями и H=768.

Используемые нами параметры тренировки:

epochs=10
Batch_size=16
Adam optimizer (lr = 0.001)

Используя эти параметры, точность тестирования моделей для разных временных рамок выглядит следующим образом:

  • 3 месяца: 74%
  • 6 месяцев: 70%

Обсуждения и сравнения

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

Другие показатели, которые мы могли бы использовать:

  • Матрица путаницы 3x3 для получения точности, отзыва и оценки F1 для каждого класса на основе значений TP, FP, TN, FN. Это помогает получить более детальное представление о производительности каждого класса и является более точной оценочной метрикой для несбалансированного набора данных.
  • Оценка AUC для оценки вероятности того, что модель работает лучше, чем случайные предположения. Обычно это работает только с бинарной классификацией, поэтому метрики многоуровневой классификации в нашем случае должны быть сначала преобразованы в бинарные, чтобы AUC можно было применить.
  • Среднеквадратичная ошибка (RMSE) также может быть применена к необработанным оценкам настроений, которые были получены до округления до соответствующих меток.

Сравнение производительности

Из приведенной выше гистограммы и таблицы видно, что в целом производительность моделей TFIDF является наихудшей, за ними следуют модели BM25 и BERT соответственно. Основываясь на литературных данных, мы считаем, что низкая производительность TFIDF может быть связана с неспособностью моделей TFIDF нести семантическое значение. Модель просто учитывает важность слов на основе их частотности в тексте и корпусе, поэтому она упускает контекстную информацию текста. Кроме того, как и Bag of Words, TFIDF игнорирует порядок слов, что делает невозможным обработку составных существительных, встречающихся в финансовых текстах. Это распространяется на такие отрицания, как «преуспевание» и «неблагополучие». Наконец, TFIDF страдает от проклятия размерности, поскольку длина векторов TFIDF равна огромному размеру словаря, что делает нас громоздкими для целей кластеризации (маркировка настроений как -1, 0 или 1).

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

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

Логистическая регрессия, случайный лес и XGBoost

В целом BM25 работает намного лучше, чем TFIDF для всех 3-х моделей. Это связано с тем, что BM25 лучше предсказывает релевантность слова в документе благодаря улучшенному расчету показателя TF. Для BM25 влияние частоты терминов на показатель TF ослабевает по мере асимптотического приближения к значению. Это помогает учесть проблему убывающей отдачи по мере того, как частота слова увеличивается до точки насыщения. Кроме того, BM25 учитывает длину документа при расчете показателя TF. Для более коротких документов показатель TF увеличивается намного быстрее и раньше достигает асимптоты. Это связано с тем, что в более коротких документах меньше терминов, и требуется меньше совпадений, чтобы быть уверенным в релевантности слова.

В трех моделях контролируемого обучения точность очень похожа.

BERT против FinBERT

FinBERT — это, по сути, языковая модель на основе BERT, обученная на дополнительном корпусе финансовых данных для более глубокого понимания финансового языка.

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

Несмотря на более низкую производительность для BM25 и TFIDF, есть ли случаи, когда мы решили использовать его вместо BERT?

Ограниченные вычислительные ресурсы
Поскольку BERT использует сеть глубокого обучения в качестве своей архитектуры, запуск модели BERT требует больших вычислительных ресурсов. Напротив, TF-IDF/BM25 не использует сеть глубокого обучения. На самом деле, они используют довольно простые вычисления, что делает их вычислительно дешевыми.

Отправная точка для нового анализа
Поскольку TF-IDF/BM25 не требует больших вычислительных затрат, можно использовать TF-IDF/BM25 в качестве начальных алгоритмов для начального сравнения подобия. Это даст пользователям приблизительную оценку результатов и позволит решить, следует ли использовать более сложные алгоритмы.

Будущие улучшения (Как мы можем повысить производительность?)

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

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

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

Мы рекомендуем будущим исследованиям изучить этот подход, особенно когда модели, которые хорошо известны для точного прогнозирования оценок тональности на основе текстовых данных (например, BERT), используются для первого шага. Затем можно исследовать второй шаг с использованием ряда моделей (например, TFIDF/BM25 с нейронными сетями, деревьями решений, наивными байесовскими классификаторами).

Проблемы, возникшие

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

Сбор данных

Одной из проблем, связанных с данными, с которыми мы столкнулись, было отсутствие всеобъемлющего новостного API, который был бы легко доступен из наших источников. Хотя у нас был доступ к базам данных Wharton Research Data Services (WRDS) для этого проекта, мы не смогли найти в службе подходящую базу данных, содержащую исчерпывающие исторические новостные данные. В результате нам пришлось использовать бесплатный онлайн-API (marketaux) вместо широко используемой стандартной службы данных, такой как WRDS.

С бесплатным планом на marketaux мы также столкнулись с квотами запросов из-за ограничения скорости API. Следовательно, мы не смогли запросить все необходимые данные с помощью одного ключа API. Чтобы решить эту проблему, нам пришлось сопоставить несколько ключей API (зарегистрированных с использованием учетных данных членов нашей команды) и скоординировать данные новостей от акций, запрошенных среди многочисленных ключей API. Тем не менее, всегда остается возможность приобрести более высокий план для таких онлайн-сервисов, который увеличит или полностью уберет квоты запросов API.

Обучение моделей

Было сложно настроить предварительно обученные языковые модели, чтобы получить удовлетворительную точность (выше базовой точности более простых моделей машинного обучения). Это потребовало экспериментов с различными параметрами обучения, такими как скорость обучения, размер партии и оптимизатор. Мы остановились на оптимизаторе Adam с небольшой скоростью обучения (от 10^–5 до 10^-6) и начальным количеством шагов прогрева. Также наблюдалось переоснащение, и отсев/ранняя остановка были одними из методов, используемых для улучшения производительности модели на невидимых данных. Из-за ограничений вычислительных ресурсов мы также не смогли опробовать определенные конфигурации, например, с большими размерами пакетов (32 или больше) или более сложными предварительно обученными моделями.

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

TFIDF: https://www.capitalone.com/tech/machine-learning/understanding-tf-idf/

BM25: Знакомство с TF-IDF и BM-25 — KMW Technology (kmwllc.com)

БЕРТ: БЕРТ: почему НЛП произвело революцию | Джерри Вей | На пути к науке о данных