Skip to content

arqoofficial/unigoto

Repository files navigation

unigoto

Инструмент используется для предложения пользователям наиболее подходящих вариантов университетов и факультетов на основании их интересов и предпочтений.

Здесь представлена часть кода по хакатону UrFU + UniGoTo от моей команды, соответствующая практическому заданию №4 по предмету MLOps с использованием AirFlow для периодической обработки данных.

Данный код реализует постоянную загрузку сырых данных из unigoto.ru/api в базу данных PostGreSQL посредством контейнера data-collector.

AirFlow используется для запуска периодической задачи, которая преобразует новые данные из API в эмбединги (при помощи SentenceTransformer) и складывает их в БД с расширением pgvector.

Выдача результатов анализа подходящего университета реализуется с помощью перевода введенных пользователем данных в эмбединг и поиском наименьшего косинусного расстояния по существующей базе. Взаимодействие с базой данных осуществляется с помощью FastAPI. Благодаря периодическому запуску преобразования новых данных в эмбединги с помощью AirFlow эффективность такого поиска постоянно увеличивается.

Для удобства взаимодействия с инструментом реализован пользовательский web-интерфейс на основе библиотеки Streamlit.

AirFlow

ScreenShot

Streamlit

ScreenShot

Project structure

.
├───configs
│   ├───dev
│   │   ├───h-data-pg
│   │   │   └───docker-entrypoint-initdb.d
│   │   └───nginx
│   │       └───conf.d
│   └───local
│       ├───h-data-pg
│       │   └───docker-entrypoint-initdb.d
│       └───nginx
│           └───conf.d
├───img
├───src
│   ├───airflow
│   │   └───dags
│   │       └───h_dags
│   ├───api
│   │   └───api
│   │       └───endpoints
│   ├───client
│   ├───data_collector
│   │   └───scripts
│   └───workers
└───volumes

Dev

cp configs/dev/.env .env
  • add COLLECTOR_ACCESS_TOKEN to .env

up db

docker compose up -d --build h-data-pg

create tables

docker compose run --rm --no-deps data-collector sh -c 'python -m scripts.init_db_tables'

run collector

docker compose up -d --build data-collector

run all services

docker compose up -d --build

utils

docker compose logs -n 100 data-collector
docker compose exec h-data-pg psql -U h_user -d h_core
UPDATE h_raw_data
SET about = regexp_replace(about, E'[\\n\\r]+', ' ', 'g' ),
    activities=regexp_replace(activities, E'[\\n\\r]+', ' ', 'g' ),
    books=regexp_replace(books, E'[\\n\\r]+', ' ', 'g' ),
    games=regexp_replace(games, E'[\\n\\r]+', ' ', 'g' ),
    interests=regexp_replace(interests, E'[\\n\\r]+', ' ', 'g' ),
    university_name=regexp_replace(university_name, E'[\\n\\r]+', ' ', 'g' ),
    faculty_name=regexp_replace(faculty_name, E'[\\n\\r]+', ' ', 'g' );

SELECT count(DISTINCT page_number)
FROM h_raw_data;

SELECT min(page_number)
FROM h_raw_data;

SELECT count(*)
FROM h_raw_data;

COPY h_raw_data TO '/csv/h_raw_data.csv' DELIMITER ',' CSV HEADER;

COPY (SELECT *
      FROM h_raw_data
      WHERE education_status IN
            ('Выпускник (бакалавр)', 'Выпускник (магистр)', 'Выпускник (специалист)', 'Выпускница (бакалавр)',
             'Выпускница (магистр)',
             'Выпускница (специалист)')) to '/csv/graduates.csv' with (format csv, DELIMITER ',', HEADER);

Develop

create DB

cat configs/dev/h-data-pg/docker-entrypoint-initdb.d/0_initial_postgresql.sql | psql -U postgres

export env variables

export $(grep -v '^#' configs/dev/.env | xargs)

create DB tables

python -m src.data_collector.scripts.init_db_tables

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published