Мы предлагаем решение для точного объединения ответов пользователей по смыслу в сервисе "Мой Голос" с помощью передового подхода к обработке текста 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 |
| --- | --- | --- |
