Skip to content

0uterspaceguy/sentiment_analysis

Repository files navigation

Анализ тональности

Этот репозиторий был создан для решения тестового задания по анализу тональности текстов от компании TWIN. Было решено использовать нейронную сеть Bert, предобученную на задаче анализа тональности текста разных языков. В итоге обученная модель показала результат более 0.84 по F1 мере, на выборке из 30к текстов из различных русских наборов данных.

Зависимости

pandas
numpy 
argparse
pymorphy2
nltk
transformers
sklearn 
torch 
tqdm 
flask  
requests

Использование

Необходимо поместить веса модели в папку model.
Скачать параметры модели можно по этой ссылке: https://drive.google.com/file/d/18c-M-C1ql8nUv275n-iQkhNHGNWAWQXf/view?usp=sharing

Далее нужно запустить скрипт server.py, если работаете из docker контейнера то пробросьте порт 5000.

python3 server.py 

с этого момента web приложению можно отправлять json запросы вида:

{'text': "Текст, тональность которого нужно определить"}

ответом сервера будет объект json вида:

{'label': "тональность текста"}

Самостоятельная тренировка модели

Подготовка датасета

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

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

python3 prepare_dataset.py --data_directory "путь до папки с наборами данных"\
--val_split 0.1 #размер валидационной выборки 
--mokoron #использование набора данных mokoron
--rureviews #использование набора данных rureviews
--medical #использование набора данных medical
--rusentiment #использование набора данных rusentiment
--kaggle #использование набора данных kaggle

После этого в папке с наборами данных появится два jsonl файла (train.jsonl, val.jsonl) со следующей структурой:

[
{"text": "Какой то текст", "label": "тональность этого текста"},
...
]

Тренировка модели

Далее нужно запустить скрипт train_model.py:

python3 train_model.py --data_directory "путь до папки с наборами данных"\
--hug_path "путь расположения модели bert на сервере huggingface"
--batch_size 10 #размер батча
--lr 0.00002 #начальный learning rate
--epochs 20 #число эпох обучения
--warmup 100 #число warmup шагов
--loss_print 200 #число шагов обучения перед выводом loss-а
--val_steps 10000 #число шагов обучения перед валидацией
--to_lower #использовать ли только нижний регистр
--do_filter #производить ли фильтрацию символов по словарю
--remove_rep #удалять ли повторения символов в текстах
--remove_stops #удалять ли стоп-слова из текстов
--remove_punkt #удалять ли символы пунктуации 
--lemmatize #приводить ли слова к начальной форме 
--stemming #использовать ли стемминг

после обучения в папке проекта появятся веса модели model.pth

Проверка точности модели

Для проверки точности модели нужно запустить скрипт test_model.py:

python3 test_model.py --data_directory "путь до папки с наборами данных"\
--hug_path "путь расположения модели bert на сервере huggingface"
--local_path "путь расположения локальной модели bert"
--batch_size 10 #размер батча
--to_lower #использовать ли только нижний регистр
--do_filter #производить ли фильтрацию символов по словарю
--remove_rep #удалять ли повторения символов в текстах
--remove_stops #удалять ли стоп-слова из текстов
--remove_punkt #удалять ли символы пунктуации 
--lemmatize #приводить ли слова к начальной форме 
--stemming #использовать ли стемминг

About

This repo was created for TWIN test task solution.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published