--- license: mit language: - ru tags: - Prompt - Prompt_Classification - Classification - LinearModel - MLP - class - Prompt Classes - Classificator - Prompt Classification - AI - ML - Class - Classify - Text - Context --- # πŸ” SimplePromptClassifier β€” классификатор ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ² (русский) ![Model banner](./AI_scheme.png) **ΠšΡ€Π°Ρ‚ΠΊΠΎ:** модСль классифицируСт Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠΏΡ‚Ρ‹/вопросы Π½Π° Ρ‚Ρ€ΠΈ дСйствия: - **0 β€” Поиск Π² локальной Π±Π°Π·Π΅ Π·Π½Π°Π½ΠΈΠΉ (RAG)**: сначала ΠΈΡ‰Π΅ΠΌ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² локальном индСксС ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ контСкст для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ. - **1 β€” Поиск Π² сСти**: Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ запуска ΠΎΠ±Ρ…ΠΎΠ΄Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… поисковых систСм/скрСйпинга. - **2 β€” ΠŸΡ€ΡΠΌΠΎΠΉ запрос**: сразу посылаСм ΠΏΡ€ΠΎΠΌΠΏΡ‚ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ модСль (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, LLM) для синтСза ΠΎΡ‚Π²Π΅Ρ‚Π°. --- ## Π“Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для систСм, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ автоматичСски Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠΏΡ‚Π°: - Ρ‡Π°Ρ‚-Π±ΠΎΡ‚Ρ‹ со связкой Retrieval-Augmented Generation (RAG), - голосовыС ассистСнты, - интСрфСйсы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π³Π΄Π΅ Ρ‡Π°ΡΡ‚ΡŒ запросов Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ поиском, Ρ‡Π°ΡΡ‚ΡŒ β€” Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. --- ## Π€Π°ΠΉΠ»Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ - `pytorch_model.bin` β€” вСса ΠΌΠΎΠ΄Π΅Π»ΠΈ (state_dict). - `config.json` β€” конфигурация (input_dim, num_classes, p_dropout, classes). - `modeling_simple_classifier.py` β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. - `vectorizer.pkl` β€” sklearn-Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ‚ΠΎΡ€ (TF-IDF/Count). - `svd.pkl` β€” TruncatedSVD (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ). - `label_encoder.pkl` β€” sklearn.LabelEncoder (для дСкодирования ΠΌΠ΅Ρ‚ΠΊΠΈ). - `README.md` β€” эта ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ°. --- ## ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ инфСрСнса (Π±Π΅Π· AutoModel) ```python # ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· рСпозитория HF (Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ локальной ΠΊΠΎΠΏΠΈΠΈ) from huggingface_hub import hf_hub_download import json, pickle, torch import numpy as np from types import SimpleNamespace REPO = "Neweret/SimplePromptClassifier-85k" config_path = hf_hub_download(REPO, "config.json") weights_path = hf_hub_download(REPO, "pytorch_model.bin") vec_path = hf_hub_download(REPO, "vectorizer.pkl") svd_path = None try: svd_path = hf_hub_download(REPO, "svd.pkl") except Exception: svd_path = None le_path = hf_hub_download(REPO, "label_encoder.pkl") cfg = SimpleNamespace(**json.load(open(config_path, "r", encoding="utf-8"))) # --- ДинамичСская модСль --- class SimpleClassifier(torch.nn.Module): def __init__(self, input_dim, num_classes, p_dropout=0.3): super().__init__() self.linear1 = torch.nn.Linear(input_dim, 256) self.ln1 = torch.nn.LayerNorm(256) self.dropout = torch.nn.Dropout(p_dropout) self.linear2 = torch.nn.Linear(256, 128) self.ln2 = torch.nn.LayerNorm(128) self.linear_out = torch.nn.Linear(128, num_classes) def forward(self, x): x = torch.nn.functional.gelu(self.ln1(self.linear1(x))) x = self.dropout(x) x = torch.nn.functional.gelu(self.ln2(self.linear2(x))) x = self.dropout(x) return self.linear_out(x) model = SimpleClassifier(cfg.input_dim, cfg.num_classes, cfg.p_dropout) state = torch.load(weights_path, map_location="cpu") model.load_state_dict(state) model.eval() # прСпроцСссинг vectorizer = pickle.load(open(vec_path, "rb")) svd = pickle.load(open(svd_path, "rb")) if svd_path else None le = pickle.load(open(le_path, "rb")) def preprocess(text): X = vectorizer.transform([text]) if svd is not None: X = svd.transform(X) return X.astype(np.float32) def predict(text): x = preprocess(text) xb = torch.from_numpy(x).float() with torch.inference_mode(): logits = model(xb) pred = int(torch.argmax(logits, dim=1).cpu().numpy()[0]) return pred, le.inverse_transform([pred])[0] # ΠΏΡ€ΠΈΠΌΠ΅Ρ€ print(predict("Как ΠΌΠ½Π΅ Π½Π°ΠΉΡ‚ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ?"))