Мы предлагаем решение для точного объединения ответов пользователей по смыслу в сервисе "Мой Голос" с помощью передового подхода к обработке текста Bert и визуализации результатов через веб-интерфейс на основе Streamlit. Решение выделяется тем, что устойчиво к ошибкам и опечаткам пользователей, а также учитывает даже латентные смысловые средства: эмоджи и пунктуацию.
Технические особенности: Использование мультиязычного BERT для создания векторных представлений текста Многоуровневая кластеризация: UMAP -> HDBSCAN -> CountVectorizer -> TF-IDF
- Эмоциональная окраска текста с помощью XLM Roberta, обученного на комментариях пользователей
- Интерфейс на основе Streamlit
git clone https://github.com/Baltsat/users-rosatom.git
Необходим Python версии 3.9 и выше.pip install -r requirements.txt
streamlit run main.py
-
Для исходных данных проводится предобработка ответов: удаление пунктуации, фильтрация ненормативной лексики, лемматизация.
-
На обработанных данных файнтюнены модели глубокого обучения, в частности, TweetNLP, XLM ROBERTA SENTIMENT MULTILINGUAL CLASSIFICATION, BertTopic.
-
Визуализация кластеризации происходит посредством Streamlit.
Наше уникальное решение объединяет передовой подход к обработке текста с помощью модели Bert, визуализацию результатов через интерфейс Streamlit и способность обрабатывать особенности русского и английского языка, что обеспечивает точность и простоту использования в сервисе "Мой Голос".
Python3
, git
, GitHub
- инструменты разработки
HF Transformers
, TweetNLP
, BertTopic
- библиотеки глубокого обучения
Scikit-Learn
, UMAP
, KMeans
- фреймворки машинного обучения
Plotly
, Streamlit
, AltChart
- инструменты визуализации
Model Description | F1 Macro | Time |
---|---|---|
NaiveModel каждое слово = новый кластер | 0.81 | 10 ms |
LevensteinSimilarityModel Если ответы схожие более, чем на 63% = образуют один кластер | 0.87 | 102 ms |
LevenshteinSimilatity + Processing Lemmatization, delete punct | 0.89 | 1 s |
SelfClusterModel#1 + SentimentTransformer (Bert-Multilingual + PCA + KMeans ) + (TweetNLP + xlm-roberta-multilingual) | 0.92 | |
SelfClusterModel#2 | 0.94 | 6 s |
SelfClusterModel#2 + SentimentTransformer | 0.97 |
research_models_visualization.ipynb
- исследования с моделями градиентного бустингаdata_preprocess.ipynb
- предобработка данных
Этот проект использует Django и Django Rest Framework для создания API. API предоставляет доступ к информации о вопросах и ответах (QA) и содержит следующие эндпойнты:
Эндпойнт /api/qaitems
Этот эндпойнт предоставляет доступ к данным о вопросах и ответах (QA). Он поддерживает следующие методы
-
GET
: Получение списка всех элементов QA. -
POST
: Создание нового элемента QA.
Структура базы данных включает в себя следующие поля
question
: Текст вопроса.answer
: Текст ответа.sentiment
: Сентимент элемента.j
: Значение J.cluster_id
: Идентификатор кластера.topic_name
: Название темы.
Чтобы установить и запустить проект, выполните следующие шаги:
- Клонируйте репозиторий с помощью
git clone
. - Создайте и активируйте виртуальное окружение.
- Установите зависимости, выполнив команду
pip install -r requirements.txt
. - Примените миграции базы данных с помощью
python manage.py migrate
. - Запустите сервер с помощью
python manage.py runserver
.
Примеры запросов к API:
- Получение всех элементов QA: http://localhost:8000/api/qaitems/
Имя | Роль | Контакт |
---|---|---|
Константин Балцат | Data Analyse | t.me/baltsat |
--- | --- | --- |
Александр Серов | Machine Learning | t.me/thegoldian |
--- | --- | --- |
Артем Тарасов | Full stack | t.me/tarasovxx |
--- | --- | --- |
Ванданов Сергей | Machine Learning | t.me/rapid76 |
--- | --- | --- |
Даниил Галимов | Data Analyse | t.me/Dan_Gan |
--- | --- | --- |