Text Generation
PEFT
Safetensors
Russian
lora
gemma
spam-detection
text-classification
conversational
Instructions to use ruSpamModels/ruSpam_LLM with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use ruSpamModels/ruSpam_LLM with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b-it") model = PeftModel.from_pretrained(base_model, "ruSpamModels/ruSpam_LLM") - Notebooks
- Google Colab
- Kaggle
| 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 = ( | |
| "<start_of_turn>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" | |
| "<end_of_turn>\n" | |
| "<start_of_turn>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) | |
| Спасибо за поддержку ❤️ | |