You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

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


🚀 Использование

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()

Пример классификации:

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

Спасибо за поддержку ❤️

Downloads last month
32
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ruSpamModels/ruSpam_LLM

Base model

google/gemma-2-2b
Adapter
(338)
this model

Dataset used to train ruSpamModels/ruSpam_LLM