--- language: - ru library_name: peft tags: - lora - peft - gemma - spam-detection - text-classification base_model: google/gemma-2-2b-it datasets: - darkQibit/russian-spam-detection license: other pipeline_tag: text-generation --- # ruSpam_LLM LoRA-адаптер для классификации сообщений на **spam / ham** на базе **google/gemma-2-2b-it**. Модель обучена для детекции спама в русскоязычных чатах и группах. --- ## 📌 Описание Это **LoRA-адаптер**, а не полная модель. Он подключается поверх базовой Gemma и позволяет классифицировать сообщения, генерируя одно слово: `spam` или `ham`. Задача решается через **instruction tuning**. --- ## 🧠 Базовая модель - **Base model:** `google/gemma-2-2b-it` - Архитектура: Causal LM - Способ обучения: **LoRA (PEFT)** --- ## 📊 Данные для обучения Модель обучена на **~9 000 примеров** из датасета: 👉 [darkQibit/russian-spam-detection](https://huggingface.co/datasets/darkQibit/russian-spam-detection) --- ## 🚀 Использование ```python import torch from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel BASE_MODEL = "google/gemma-2-2b-it" LORA_REPO = "ruSpamModels/ruSpam_LLM" HF_TOKEN = "hf_xxxxxxxxxxxxxxxxxxxxx" tokenizer = AutoTokenizer.from_pretrained( BASE_MODEL, token=HF_TOKEN ) base_model = AutoModelForCausalLM.from_pretrained( BASE_MODEL, device_map="auto", torch_dtype=torch.float16, token=HF_TOKEN ) model = PeftModel.from_pretrained(base_model, LORA_REPO) model.eval() ```` Пример классификации: ```python def classify(msg: str): prompt = ( "user\n" "You are a spam classifier. Determine whether the message is spam or not.\n" "Answer with only one word: spam or ham.\n\n" f"Message:\n{msg}\n" "\n" "model\n" ) inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): output = model.generate( **inputs, max_new_tokens=2, do_sample=False, pad_token_id=tokenizer.eos_token_id, eos_token_id=tokenizer.eos_token_id, ) gen = output[0][inputs["input_ids"].shape[-1]:] return tokenizer.decode(gen, skip_special_tokens=True).strip().lower() ``` --- ## ⚠️ Ограничения * Это **генеративная классификация**, не `SequenceClassification` * Возможны ошибки на пограничных сообщениях * Для high-load рекомендуется logits-классификация --- ## 📄 Лицензия Лицензия соответствует лицензии базовой модели **Gemma** и лицензии датасета обучения. --- ## 💖 Поддержка проекта Если проект оказался полезен, вы можете поддержать его развитие: - **TON:** `UQAvc2APxFcmNg0-K8TJ8ykdkl2GjwveuVfFd8-NOwHGEeqv` - **Рубли (Telegram):** Перейдите по старт-ссылке бота 👉 [@ModProtectorBot](https://t.me/ModProtectorBot?start=donate) Спасибо за поддержку ❤️