Skip to content

NikitaKononov/CompClust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Company Clust

Разработать решение для кластеризации названий компаний по идентичности обозначаемой компании. Данные: img.png

Подготовка окружения:

conda create -n compclust python=3.7
conda activate compclust
pip3 install -r requirements.txt

Оценка производительности и необходимного оборудования

Минимально рекомендуемое оборудование для single-thread инференса:
1 vCPU, 4 Gb RAM
Скорость инференса на single-thread Ryzen 5600h:
~90 строк в секунду

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

Масштабирование

Решение можно масштабировать: обернуть демо-скрипт в воркер celery+redis+fastapi, затем создать оркестр воркеров с помощью, например, kubernetes

Выбранные метрики

Наша основная метрика это f1-score.
Она отражает две метрики: recall и precision. В отличие от accuracy позволяет отразить наиболее приближенно к реальности результаты при дисбалансе классов, который у нас есть. Accuracy стабильно высока из-за перевеса класса '1' в соотношении более, чем 99 к 1.

Выбранная модель

В результате эксперимнтов выбрана модель RandomForestClassifier как модель с лучшей метрикой f1-score
Лог экспериментов представлен ниже

Подход 1: классификатор SKLearn

  • Векторизация текстовых данных с помощью tf-idf
  • Train test split 80 / 20

Обучение классификатора дерево принятия решений DecisionTree
img.png
Обучение классификатора случайный лес RandomForest
img.png
Обучение классификатора логистическая регрессия LogisticRegression
img.png

Подход 2: кластеризатор SKLearn

  • Векторизация текстовых данных с помощью tf-idf
  • Train test split: train - is_duplicate == 0, test - is_duplicate == 1
  • Оптимизация гиперпараметров - поиск по сетке (GridSearch)

Обучение кластеризатора MiniBatchKMeans
accuracy 0.563

Обучение кластеризатора MiniBatchKMeans и оптимизация гиперпараметров
accuracy 0.745
Подобранные параметры:
{'init': 'k-means++', 'max_iter': 200, 'n_clusters': 5}

Подход 3: эмбеддинги текста

Language-agnostic BERT Sentence Embedding (LaBSE)

  • С помощью LaBSE извлекаем вектора признаков (эмбеддинги) предложений с помощью модели LaBSE
  • Извлекаем меры схожести пар векторов (пар названий компаний) - евклидово и косинусное расстояния
    img_1.png img.png

Эксперименты с косинусным расстоянием:

  • Train test split 80/20
  • Оптимизация гиперпараметров - Hyperopt

Обучение классификатора случайный лес RandomForest
img_9.png
Обучение классификатора логистическая регрессия LogisticRegression
img_10.png
Обучение и оптимизация гиперпараметров классификатора случайный лес
img_11.png
Upsamling данных, обучение RandomForest
img_4.png
img_5.png

Upsamling данных, обучение LogisticRegression
img_6.png
Upsampling данных, обучение и оптимизация гиперпараметров RandomForest
img_7.png

Эксперименты с евклидовым расстоянием:

Обучение классификатора случайный лес RandomForest
img_2.png
Обучение классификатора логистическая регрессия LogisticRegression
img_3.png
Обучение и оптимизация гиперпараметров классификатора случайный лес
img_8.png

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published