TGViewer
Channel Public Channel
🍳 Датазавтраки ☕️ НСК (Академ)

🍳 Датазавтраки ☕️ НСК (Академ)

@databreakfast

Каждый вторник с 8:30 до 10:00 в "Shurubor coffeeshop" у фонтана ТЦ https://go.2gis.com/wlkqi

По всем вопросам к @promsoft . Рекламу не размещаем
Subscribers
709
Photos
262
Videos
15
Links
1.9K

Showing posts older than #1385 · Back to latest

Older Posts 18 shown
Post #1382 252
те что тут происходит:
1) Сначала мы берем все спам-сообщения и часть не-спам сообщений, и ищем те не-спам-сообщения, которые очень похожи на спам. Из них и формируем обучающую выборку
2) Затем на ней учим kNN - и им уже пользуемся
Post #1381 262
А вот так он потом работает
import json

from telegram import Update
from telegram.ext import (ApplicationBuilder, ContextTypes, MessageHandler,
filters)

from app.env_conf import SETTINGS
from app.tools import logger, MinioInit, init_logging
from app.utils import embed

init_logging()

THRESHOLD = 0.5
logger.info('Загружаем модель из s3')
mi = MinioInit()
clf = mi.load_data('model/spam_ham_n.pkl')

with open("model/whitelist.json", "r") as fp:
whitelist = json.load(fp)

whitelist = set(whitelist)


def score(txt):
return clf.predict_proba(embed(txt.strip()).reshape(1, -1))[0, 1]


logger.info("Грузим модель")
s = score("От 300 $ в день")
logger.info('score: %s', s)


async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
if update.message:
message_text = update.message.text
user_id = update.message.from_user.id
chat_id = update.message.chat_id
username = update.message.from_user.username or "Неизвестный пользователь"
if message_text:
message_score = score(message_text)
logger.info("score: %s. message_text: %s", message_score, message_text)
if message_score >= THRESHOLD:
logger.info("-" * 50)
logger.info(f"Обнаружено сообщение с ID {update.message.message_id}, похожее на спам'")
if str(user_id) in whitelist:
logger.info(f"Пользователь {username} в вайтлисте")
else:
# 1. Удаляем сообщение
await update.message.delete()
logger.info(f"Удалено сообщение с ID {update.message.message_id}")
logger.info(update.message.to_json())
# 2. Баним пользователя
try:
await context.bot.ban_chat_member(chat_id=chat_id, user_id=user_id)
logger.info(f"Пользователь @{username} (ID: {user_id}) заблокирован.")
except Exception as e:
logger.error(f"Не удалось заблокировать пользователя @{username} (ID: {user_id}): {e}")


def main():
application = ApplicationBuilder().token(SETTINGS.BOT_TOKEN).build()
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
logger.info("Бот запущен и мониторит чат...")
application.run_polling()
logger.info("Закончили работу...")


if __name__ == "__main__":
main()
Post #1380 221
Говорили про антиспам-бота на эмбеддингах.

Вот так он обучается:
import os
from itertools import batched

import joblib
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from transformers import AutoTokenizer, AutoModel

from app.tools import MinioInit
from app.utils import prepare_data, embed

tokenizer = AutoTokenizer.from_pretrained("cointegrated/rubert-tiny2")
model = AutoModel.from_pretrained("cointegrated/rubert-tiny2")


def main():
spam_path = "./data/spam.json"
ham_path = "./data/ham.json"
whitelist_path = "./model/whitelist.json"
assert os.path.exists(whitelist_path)
assert os.path.exists(ham_path)
assert os.path.exists(spam_path)

spam = prepare_data(spam_path)
ham = prepare_data(ham_path)

print(spam.shape, ham.shape)

preds = []
n = spam.shape[0] * 11
train_y = np.hstack([np.zeros(n), np.ones(spam.shape[0])])
for batch in batched(ham, n):
if len(batch) == n:
train_X = np.vstack([np.vstack(batch), spam])
# clf = RandomForestClassifier(random_state=20250409, n_estimators=100)
clf = KNeighborsClassifier(n_neighbors=5)
clf.fit(train_X, train_y)
preds.append(clf.predict(ham))
score_ham = np.mean(preds, axis=0)

print(len(preds))
print((score_ham > 0).sum(), n)

train_X = np.vstack([ham[np.argsort(score_ham)[-n:]], spam])
clf.fit(train_X, train_y)

joblib.dump(clf, './model/spam_ham_n.pkl')

mi = MinioInit()

print("save_file")
with open('./model/spam_ham_n.pkl', 'rb') as f:
mi.save_file(f, 'model/spam_ham_n.pkl')

if os.path.exists('./model/spam_ham_n.pkl'):
os.remove('./model/spam_ham_n.pkl')

print("Загружаем модель")
clf2 = mi.load_data('model/spam_ham_n.pkl')

test = clf2.predict_proba(embed("""От 300 $ в день""").reshape(1, -1))[0, 1]

print('test ', test)


if __name__ == "__main__":
main()
Post #1372 183
Post #1371 197
https://arxiv.org/abs/2505.13092 Про cate для принятия решений

From Prediction to Action: CATE That Improves Decisions
CATE is often used for personalized treatment decisions, but should we really optimize for estimation error? This new method shifts the focus toward decision performance—and it works.
Post #1368 247

Forwarded from Artem

Я писал не так давно большой пост о том, что AI постепенно становится не только объектом исследований, но и субъектом научного поиска. Тот пост был посвящён Google Co-Scientist и AI Scientist-v2 от Sakana AI. И вот появились ещё новости в том же направлении, отчасти буквально точные аналогии.

Robin: A multi-agent system for automating scientific discovery

Это новая мультиагентная система (см. структуру и схему работы на рис. 1), во многом аналогичная Google Co-Scientist, но вот другие исследователи (из FutureHouse и Оксфорда) тоже попробовали, и у них тоже получилось! У них все агенты — это птицы: в системе Robin есть Crow и Falcon, которые анализируют литературу и генерируют идеи, а Finch обрабатывает экспериментальные данные. Как известно (хотя не факт), хищным птицам у людей больше всего нравятся глаза. Вот и здесь система Robin нашла перспективный препарат для лечения сухой макулодистрофии (вообще не разбираюсь, не знаю что это, но говорят, что одна из основных причин слепоты у взрослых). Очень, кстати, разумная общая постановка задачи: авторы сконцентрировались на drug repurposing, то есть, с одной стороны, здесь уже заведомо есть литература, которую LLM может изучить, а с другой стороны, если что-то найдётся, путь к реализации будет относительно простым.

Zochi

А это прямой аналог AI Scientist'ов от Sakana: тоже мультиагентная система, которая пишет статьи end-to-end (схема на рис. 2), по абстрактному запросу вроде "придумай что-нибудь новенькое про AI safety". Когда модель от Sakana попала на workshop при ICLR, я тут же (успешно) предсказал, что все сразу скажут, что "воркшоп не считается". Ну что ж, вот теперь статью приняли на ACL 2025, на главный трек, acceptance rate около 20%, всё совсем уж всерьёз. Принятая статья, кстати, про jailbreaking, называется "Tempest: Autonomous Multi-Turn Jailbreaking of Large Language Models with Tree Search", и выглядит она очень круто, я бы тоже принял не задумываясь. Там нет ничего технически сложного, все эксперименты и подходы по сути пишут сами себя, но, если я правильно понял, Zochi смог сделать главное: найти пробел в текущем фронтире этой области, тот самый низко висящий плод, который потом уже сорвать было делом техники.

Predicting Empirical AI Research Outcomes with Language Models

Этому я прямых аналогов не знаю, но это направление возможного ответа на гипотезу о том, что LLM не смогут сами планировать исследования, им всегда нужен будет человек во главе, они просто будут ускорять работу учёного в качестве "лаборантов". Оказывается, LLM-based модель (пока ещё не прямо o3, надо ещё что-то сделать) может предсказывать результаты ML-экспериментов лучше, чем люди-эксперты (на рис. 3 пример запроса и результаты). Особенно если людям пустить немножко пыли в глаза: stress-test accuracy на рис. 3 — это результаты в случаях, когда менее успешный на практике подход имеет более интересное математическое обоснование и тем самым для людей выглядит более красивой идеей. То есть в каком-то смысле это о том, что уже сейчас у AI-моделей очень даже неплохой research taste — и хотя пока мы говорим о результатах вроде 64% верных предсказаний с двумя исходами, это уже лучше, чем у людей с теми же вводными.

В общем, дивный новый мир продолжает расцветать, буду держать вас в курсе!
  • 👍 1
Post #1367 210

Forwarded from vitgum

vitgum https://disk.yandex.ru/d/diX5IOiJEFLXmg
Дима, привет! Фоточки с датазавтрака 13 мая. Там в папке есть звездочки мною расставленные (в XMP файлах), их можно увидеть в большинстве фото-каталожных программках типа LightRoom, PhotoMator, и т.п.
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →