основная логика содержится в Application которое собой представляет приложение на Go. Оно связано с сервисами на python с использованием кастомного load balancer который позволяет легко масштабировать решение путем развертывания дополнительных контейнеров. Сервисы на python не содержат в себе никакого состояния все содержится в application. Из особенностей можно отметить использование clickhouse как векторное хранилище для документов и информации из faq (https://support.mts.ru).
документация для сервиса доступна по ссылке: https://api.larek.tech/swagger/index.html
демо версия доступна по ссылке: https://mts.larek.tech
-
скачивание моделей и расположение в папке domain-detection
-
установка параметров запуска в config.yaml и docker-compose.yaml
-
запуск приложения через docker compose / docker swarm
docker compose -f docker/docker-compose.yaml up -d --build
Модель предназначена для точного определения намерений пользователя.
- Тип модели: ruRoberta-large
- Обучающий набор данных: Наш специализированный набор данных для классификации намерений пользователя.
- Классифицируемые классы: Модель классифицирует следующие намерения:
0
: ood (не относится к задаче)1
: check_balance (проверка баланса)2
: sbp3
: card2card4
: self5
: abroad (зарубежные переводы)6
: freepayment7
: kvartplata, jkh (коммунальные платежи)8
: mobile_phone (мобильная связь)9
: transport10
: ishop (интернет-магазины)
- Точность на тестовой выборке: f1-score = 0.98
- Текст: 'Пожалуйста оплати мне квартплату за месяц' Вывод: 'kvartplata, jkh'
- Текст: 'хочу кинуть деньги по номеру телефону через сбп' Вывод: 'sbp'
- Текст: 'сколько денег у меня щас на балансе карты' Вывод: 'check_balance'
- Текст: 'переведи деньги в бангладеш на карту 5469380012345678' Вывод: 'abroad'
- Ссылка на скачивание: Skill Classifier Model
- Код для инференса:
import json import os import requests from transformers import AutoModelForSequenceClassification, TextClassificationPipeline, AutoTokenizer import warnings import torch warnings.filterwarnings("ignore") device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") print(device) class SkillClassifier: def __init__(self, base_path): self.path = base_path self.classifier = TextClassificationPipeline(model=self.load_model(), tokenizer=self.load_tokenizer()) def load_model(self): return AutoModelForSequenceClassification.from_pretrained(self.path) def load_tokenizer(self): return AutoTokenizer.from_pretrained("ai-forever/ruRoberta-large") def get_response(self, text: str) -> str: label = self.classifier(text)[0]['label'] return label classifier = SkillClassifier('path to directory') print(classifier.get_response('your text here'))
- dependencies: transformers, torch
Модель необходима для определения именованных сущностей, поступающих на вход.
- Тип модели: LaBSE-en-ru
- Обучающий набор данных: Наш специализированный набор данных для распознавания сущностей.
- Классифицируемые классы: Модель определяет следующие сущности:
- "Payment Period"
- "Payment Amount"
- "Card Number"
- "Expiration Date"
- "CVC"
- "Phone Number"
- "Recipient's Account Number"
- "Recipient's Bank BIC"
- "Recipient's Tax Identification Number"
- "Recipient's Company Name"
- "Recipient's KPP"
- "Payment Purpose"
- "Sender's Full Name"
- "Payment Month"
- "Payment Year"
- "Payer's Patronymic"
- "Series and Number of Passport"
- "Registration Address"
- Точность на тестовой выборке: f1-score(macro) = 0.93
- Текст: 'кинь 500 рублей на счет 5469380043501234' Вывод: [{'entity_group': 'Recipient's Account Number', 'word': '5469380043501234'}, {'entity_group': 'Payment Amount', 'word': '500 рублей'}]
- Ссылка на скачивание: NER Model
- Код для инференса:
from transformers import pipeline classifier = pipeline("ner", model='path to directory', aggregation_strategy="max") classfier(text)
- dependencies: transformers, torch