Skip to content

Гагарин.Хак - онлайн-хакатон, на котором моя команда представляла решение для кейса: "Sentiment-анализ новостей фондового рынка MOEX"

Notifications You must be signed in to change notification settings

daniil-dushenev/gagarin-hack

Repository files navigation

🏆 Гагарин.Хак - Sentiment Analysis и NER для новостей о фондовом рынке MOEX

❓ Задача

Нам предстояло разработать модель, которая будет предсказывать сентиментальность новостей о каких-то компаниях рынка акций. При этом стоило учитывать о какой компании из новости мы смотрим сентимантальность. Именно на этом кейсодержатели просили акцентировать внимание. Также нужно было разработать NER алгоритм, который будет вытаскивать названия компаний из новости. Проблемой стало именно соотнесение синонимов названий компании (сбер, сбербанк, ПАО СБЕРБАНК).

🎉 Результат

🏆 Место: 4/40 место

Score:
Accuracy: 0.67
Метрики классификации по классам:

image

📄 Данные

Подготовили неплохой размеченный датасет новостей, всего 5 классов (1-5). Также был подготовлен датасет для NER алгоритма. К сожалению, были ошибки в данных.

📝 Решение: NER

Конечно же мы пробовали использовать BERT-like модели, которые спокойно вытаскивали названия компаний из текста. Однако 1) это не решеает проблему с синонимами, описанную выше. 2) это долго, кейсодержатели поставили жесткие рамки в скорости работы алгоритма. В итоге мы пришли к простой идее: полный перебор всех слов текста и поиск по хеш-таблице полного названия. Таким образом: мы можем пополнять словарь синонимов, при этом компаний ограниченное количество на MOEX. При этом, добились алгоритмической сложности O(n).

📝 Sentiment Analysis: Baseline

Модель: cointegrated/rubert-tiny-sentiment-balanced
Finetune на текстах из исходного датасета на нормализированном тексте.
Accuracy: 0.57
Пример входного текста: Акции Яндекса подорожали на Московской бирже

📝 Sentiment Analysis: SEP Token

Модель: seara/rubert-tiny2-russian-sentiment
Finetune на текстах из исходного датасета на нормализированном тексте. В этот раз встраивали название компании, на которую нужно обратить внимание, в начало текста вместе с токеном сепарации, обучали на таких текстах. В итоге модель начала понимать о какой компании идет речь в тексте и значительно улучшило показатели.
Accuracy: 0.65
Пример входного текста: Яндекс[SEP]Акции Яндекса подорожали на Московской бирже

📝 Sentiment Analysis: Special Token

Модель: seara/rubert-tiny2-russian-sentiment
Finetune на текстах из исходного датасета на нормализированном тексте. Теперь, вместо всех упоминаний о нужной нам компании, мы вставляли специальный новый токен [COMPANY]. Модель с помощью него не только понимала о какой компании нужно проводить сентимент анализ, но и осознавала, в какой части текста находится текст о нужной нам компании. В итоге эта идея оказалась лучше предыдущей. В теории, можно попробовать делать токен [COMPANY] с каким-нибудь эмбеддингом, хранящим информацию о нужной нам компании, но не успели это осуществить.
Accuracy: 0.67
Пример входного текста: Акции [COMPANY] подорожали на Московской бирже

🏎️ Ускорение модели

Как я уже писал, нас сильно ограничили во времени работы модели, поэтому нужно было что-то делать со скоростью. Получилось квантизировать модель, что дало 1) меньший объем занимаемой памяти, 2) бОльшую скорость инференса.

💡 Идеи для развития: Дистилляция

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

About

Гагарин.Хак - онлайн-хакатон, на котором моя команда представляла решение для кейса: "Sentiment-анализ новостей фондового рынка MOEX"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published