Russian Stylometry Detector — это узкоспециализированная нейросеть, обученная на базе ruBERT с использованием механизма Triplet Loss и Hard Negative Mining. Модель предназначена для форензики и криминалистического анализа текста (стилометрии).
Её главная задача — определять, принадлежат ли два разных текста одному и тому же автору (деанонимизация твинков), опираясь на глубокий синтаксис, ритм и структуру мышления, игнорируя при этом попытки маскировки (смена регистра, удаление пунктуации или смену темы разговора).
В отличие от стандартных языковых моделей (LLM) или моделей семантического поиска (Semantic Search), которые ищут похожесть смысла, эта модель ищет похожесть почерка:
- Устойчивость к маскировке: Игнорирует намеренные орфографические ошибки, капс, нижний регистр и удаление запятых.
- Игнорирование темы (Topic-Blind): Модель узнает автора, даже если в первом тексте он обсуждает программирование, а во втором — рецепт пирога.
- Глубокий синтаксис: Жестко опирается на порядок слов, ритм дыхания (длину предложений) и использование союзов/предлогов.
- Метод Центроидов (Vector Clouds): V5 оптимизирована для работы с усредненными векторными профилями авторов, что позволяет отсеивать шум (спам/копипасту) и достигать точности идентификации >85%.
Убедитесь, что у вас установлены необходимые библиотеки:
pip install torch sentence-transformersВы можете загрузить веса локально из папки или напрямую с Hugging Face (если модель загружена туда):
from sentence_transformers import SentenceTransformer, util
# Загружаем модель напрямую из Hugging Face
model = SentenceTransformer('NullCoreDeveloper/stylometric-rubert-v5')
text_1 = "Я думаю, что нам нужно использовать другой подход к архитектуре. Текущий вариант работает слишком медленно."
text_2 = "Слушай, давай переделаем архитектуру. Она ваще лагает жестко и памяти жрет немерено."
text_twink = "я думаю что нам нужно юзать другой подход к архитектуре текущий варик работает слишком медленно"
# Превращаем тексты в векторы (эмбеддинги)
emb1 = model.encode(text_1, convert_to_tensor=True)
emb2 = model.encode(text_2, convert_to_tensor=True)
emb_twink = model.encode(text_twink, convert_to_tensor=True)
# Сравниваем (Косинусное сходство)
print("Разные люди:", util.pytorch_cos_sim(emb1, emb2).item()) # ~ 0.350 (Разные)
print("Один человек (Твинк):", util.pytorch_cos_sim(emb1, emb_twink).item()) # ~ 0.950 (Один человек)Пороги срабатывания (Thresholds):
> 0.85— 🚨 Точно один и тот же человек (Идеальное совпадение стиля).0.70 - 0.85—⚠️ Подозрение (Очень похожий паттерн).< 0.70— ✅ Разные люди.
Насколько падает уверенность модели при попытке злоумышленника замаскировать свой текст? (Чем ближе к нулю, тем сложнее её обмануть).
| Тип маскировки | Уверенность (V4) | Уверенность (V5) | Вердикт (Эволюция) |
|---|---|---|---|
| Удаление пунктуации | -16.5% |
-47.8% |
В V5 пунктуация стала сильным маркером стиля автора. |
| Всё строчными буквами | -25.8% |
-90.5% |
Жесткая реакция V5. Капитализация теперь — ключевой почерк. |
| Опечатки (15% слов) | -3.7% |
-7.4% |
Обе версии абсолютно устойчивы к опечаткам. |
| Смена темы разговора | -5.2% |
-6.2% |
Идеально. Обе версии игнорируют смену темы, если почерк сохранен. |
| Перемешанные слова | -69.3% |
-107.1% |
КРАХ. V5 стала еще жестче карать за нарушение синтаксиса. |
Разработано как Open-Source инструмент для криминалистического анализа текстов (форензики) и деанонимизации.