Aspiring Data Science – Telegram
Aspiring Data Science
386 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#war #poetry

Вот я вышла ночью из толщи чужой земли:
в волосах ковыль, на ногах песок, тонкий слог молитв,
на ладонях семь линий, в порезах бёдра, в руках печаль,
и прокушены губы до алой глуби, чтоб не кричать.

Вот я вышла ночью из почвы, шла как во сне:
по сожжённому полю, опавшим веткам, сквозь липкий снег.
Полумесяц колючий глядел из тучи слепящ и дик.
Вместо сердца мёртвые бражники бились в моей груди.

Лёд укрыл лужи стужей – блестящий и тонкий щит.
И я шла, примечая уставших сутулых седых мужчин,
скорбных женщин в платках, телогрейках, сетях морщин.
Каждый третий груз смерти в себе, на плечах тащил.

И они обнимались, рыдали, пускались в пляс,
по степной дали дланям, по снегу, по ковылям.
Они пели о том, как приходит конец войне.
И они меня звали победой, улыбаясь ужасной мне.

К. Вернер
Forwarded from Борис опять
#лабораторный_журнал

В прошлый раз я писал о том, что запустил свой проект на работе. Система используется. Очень приятное чувство когда смотришь на дашборд и там квадратики окрашиваются в зеленый или красный цвет (в зависимости от того, нашли агрономы проблему в этой локации или нет).

Мир дал мне обратную связь по моим инженерным скиллам: я ушел в отпуск на две недели, а мне никто не звонил и не писал и даже джун пару вещей допилил не сломав прод.

Так же я получил обратную связь по моим софт скиллам. Оказалось, что наша система не заменяет агрономам ручной труд. Мы фоткаем растения, а им, оказывается, так же необходимо замерять высоту. Поэтому они пользуются нашей системой и в добавок ходят и меряют растения руками как раньше. Конечно же на этапе планирования никто об этом не упомянул. Значит над скиллами выяснять что же нужно заказчику мне еще надо поработать.

Плюс они сделали отчет по использованию системы с рядом правок, из которых видно, что они не совсем понимают цель системы. Я знал, что все слишком гладко идет. Все ждал, когда же наступит мой любимый момент: “ой, это не то, что мы хотели раньше”. И вот он настал. Начинается настоящее веселье: вторая итерация, когда мы пытаемся докрутить систему до полезности.

Начал экспериментировать по части ML. Выкачал семпл в 10к изображений и попробовал самый тупой бейзлайн предсказания возраста растений: Random Forest на гистограммах цвета. Внезапно получились предсказания с типичной ошибкой в +-1 день, MAE 0.8. Посмотрел примеры где предсказанный возраст сильно отличается от настоящего и там часто встречаются разного рода аномалии. Правда чаще всего технические проблемы. Если такой подход способен хоть что-то предсказывать, то нейронки должны легко решить проблему. Поэтому я пишу пайплайны для сбора датасета на 500к изображений и получения frozen features с помощью CLIP. Накинем сверху логрегрессию и будет счастье.

Но это конечно просто эксперименты, а параллельно будет идти настоящее построение ML системы. В первую очередь сбор требований. Скорее всего сформируем задачу поиска одного типа аномалий, утвердим какой нам нужен precision и будем максимизировать recall системы. Далее будем думать как именно придти к этому: через предсказание роста растений или как-то еще.
#ml #eugeneyan #designpatterns

Внимание зацепили концепция Data Flywheel, Feature Store из Process Raw Data Only Once, Curriculum Learning из паттерна Hard Negative Mining, Self-Attentive Sequential Recommendations, Behavior Sequence Transformers, BERT4Rec из паттерна Reframing, Calibrated Recommendations из паттерна Business Rules, и следующий пассаж из паттерна HITL:
"Recent studies have found large language models (LLMs) to perform on par, or better than, people at labeling ground truth.

For example, a study found that gpt-3.5-turbo outperformed Mechanical Turk workers for four out of five annotation tasks (relevance, topic detection, stance detection, and frame detection) on 2,382 tweets. Furthermore, the cost was less than $0.003/annotation, making it 5% of the cost of Mechanical Turk per annotation.

Another study used gpt-4 to classify the political affiliation of Twitter users based on their tweets. Here, LLMs not only outperformed experts and crowdsourced workers in terms of accuracy, they also had higher inter-rater reliability. Even when the crowdsourced and expert labels were ensembled via majority vote, LLMs still performed better."

https://eugeneyan.com/writing/more-patterns/
#krapivin #fantasy

Что же пишет Ерёма?
Я развернул лист и увидел раздёрганные строчки:

"Биригитес их они не люди Приход ити ввагон я расскажу я узнал Эрема".

Я перечитал записку. Почти ничего не понял, но стало опять зябко и неуютно. Ерёма никогда не шутил и никогда не тревожился зря. Что-то случилось. И я побежал!

Я не успел.

***

На пустыре за путями, у вросшего в землю бетонного блока мы вырыли яму. Сложили в неё искорёженные обломки. Засыпали, а сверху настелили дёрн.

— Давай пиши, — сумрачно сказал мне Юрка. — Ты кистями работать привык…

Он дал мне кисточку и банку с чёрной несмываемой краской.

— Только не надо, что он был робот… — попросил Янка.

Я вывел на бетоне:

ЕРЁМА

Погиб 6 августа 210 г. к. э.

Ерёма погиб за час до того, как я сюда прибежал.

Он шёл через пути к вагону. По ближней от вагона колее мчался электровозик технической службы. Ерёма остановился метрах в двух от рельсов, чтобы пропустить его. Всё это было у Глеба на глазах. Ерёма стоял спокойно, на электровозик даже не смотрел. Когда машина проносилась мимо Ерёмы, из неё высунулось что-то длинное и тонкое — то ли рельс, то ли грузовая стрела. Концом она ударила Ерёму в спину, и он взлетел высоко в воздух… А падал уже отдельными кусками…

https://e-knigi.com/detskaya-literarura/detskaja-fantastika/page-2-212244-vladislav-krapivin-golubyatnya-na-zheltoi-polyane.html
#cron #bash

Столкнулся с проблемой запуска скрипта по расписанию, целая эпопея. В винде оно как-то проще настраивается, есть Task Scheduler, можно в GUI накидать команды и аргументы, указать учётки, выставить расписание и параметры (к примеру, галочку Do not start a new instance if the task is already running), и готово. В Linux всё оказалось не так просто. Вот работающий рецепт (к которому я пришёл методом проб и ошибок), который каждую минуту проверяет питоновский скрипт, если он не запущен - запускает:

ставим либу отправки емэйлов (т.к. крон шлёт уведомления на емэйл хозяина задачи, если что не так) и run-one чтобы не запускать новый процесс, если старый ещё выполняется

apt-get install postfix
apt-get install run-one

вносим собственно задачу. использовать советуют именно файл сценариев, т.к. он сам настраивает переменные окружения:

crontab -e
добавляем строчку
*/1 * * * * cd /your/dir/ && run-one bash yourtask.sh

причем последней в файле должна быть пустая строка (?). сохраняем.


в папке /your/dir/ должен быть файл yourtask.sh с содержанием

#!/bin/sh
export PYTHONPATH=/your/libspath
python3
yournoscript.py --yourparam="paramval" &> yourtasklogfile.log

&> yourtasklogfile.log перенаправляет вывод в соотв. файл, все ошибки пойдут туда же вместо емэйла.

https://www.hostinger.com/tutorials/cron-job
👀1
#python #langdetect #nlp

Кто пользуется либой langdetect для определения языка - она не очень точная (по кр мере, на коротких фразах). Можно проверять с помощью google translate api.
#python #npl #spellchecking

А кто работал со спеллчекерами в Питоне? contextualSpellCheck, якобы построенный на базе Bert-a, кажется довольно тупо сделанным.

Хотел их поругать, но нет, после изучения кода оказалось, что они как раз и сравнивают кандидатов от Берта с самой опечаткой. Просто вероятности они выводят ДО переранжирования, + в конкретном примере ванильный Берт не выдал ни одного хорошего кандидата.
#aws #s3 #requesterpays

О, классно, оказывается, можно великодушно захостить данные в s3, но не скатываться при этом в полный альтруизм и позволить скачивающим платить за трафик. К примеру, так хранятся все статьи arXiv.org

А вот так можно с ними работать на кластере (подсчёт статей с упоминанием Matplotlib).

https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html
#nlp #spellchecking

Продолжаю работать с contextualSpellCheck. Хотя они оказались не так плохи, как я вначале подумал, они всё же налажали. Их либа рассматривает только 10 вариантов подстановки от нейронной модельки, и изменить это число невозможно без перекомпиляции (шучу, это же питон, можно просто отредактировать исходники). Не глупость ли это? Ну спасибо, ребята, что за всех решили, что 10 кандидатов будет достаточно. Кстати, это прямо частый паттерн, когда создатели библиотеки часть внутренних параметров хардкодят и забывают открывать. Понятно, что для их повседневных задач это не оказалось нужным, а остальным-то что делать?

С top_n=1000 на предыдущем примере получается уже более осмысленный ответ, Cuba вместо точки, и даже правильный ответ Dubai мелькает.

Но тут уже удивляет пакет editdistance. Каким образом у них Cuba более похожа на dubia, чем Dubai?
#python #npl #spellchecking #bayes

А, понял, в чём дело. Я почему-то думал, что расстояние Левенштейна учитывает перестановки, а на самом деле туда входят только замены, вставки, удаления. Тогда действительно Dubai->Cuba это замена и удаление, Dubai->Dubia это удаление и вставка. + contextualSpellCheck при сравнении кандидатов не учитывает регистр, так что d и D у него различные символы. Что мне нужно, так это более общее расстояние Дамерау-Левенштейна, которое уже учитывает свопы.

От Берта кандидаты приходят с такими вероятностями: ('Cuba', 0.00026), ('Dubai', 0.00017). contextualSpellCheck из представленных кандидатов выбирает ответ наиболее похожий на саму опечатку. Хотя в докстринге они говорят "At present using a library to calculate edit distance between actual word and candidate words. Candidate word for which edit distance is lowest is selected. If least edit distance is same then word with higher probability is selected by default", это неправда, на вероятности в методе candidate_ranking вообще не смотрят. Мы могли бы пойти тем же путём и получить правильный ответ, но это ненаучно, и было бы, видимо, просто везением ) Не зря же Берты тренировались на огромных массивах текстов? Давайте посмотрим, кто победит, если мы будем рассматривать Бертовы вероятности как априорные, а текстовые схожести (в смысле Дамерау-Левенштейна) кандидата и опечатки как вероятность B/A что правильный ответ - это кандидат A, при том что человек напечатал B. Мне всё-таки интересно, в Дубай сложнее визу получить, или на Кубу?

В нашем случает полную вероятность P(B) вычислять не надо, она константна для всех кандидатов и на аргмакс не влияет. Получается, нам надо выбрать кандидата с максимальным произведением вероятности Берта на похожесть с опечаткой. Строго говоря, Бертовы вероятности можно еще нормировать на сумируемость к единице, т.к. у нас ограниченная выборка кандидатов из всего словаря, но это опять же будет константа, и на выбор не повлияет.
👍2
#python #codegems #awefulcode

Улучшаю корректор письменных ошибок. Не могу не отметить "крайне оптимальный" подход к профилированию. Если у класса установлен флаг performance, по задумке авторов, каждый шаг конвейера замеряется на время выполнения. Как же этого добиться, спросите Вы. Элементарно, отвечают авторы чудо-либы, мы просто задублируем в ветке с performance весь код, но воткнём перед каждым вызовом своего метода (?) вызов текущего времени. Чуваки, вы про параметризованные декораторы в Питоне слышали, ау?
#python #npl #spellchecking #bayes
Итак, после нескольких часов допиливания конструктор contextualSpellCheck обзавёлся несколькими новыми параметрами:

top_n (int, optional): suggestions from underlying ANN model to be considered. Defaults to 10.
lowercased_distance (bool, optional): lowercase candidates before computing edit distance. Defaults to True.
damerau_distance (bool, optional): additionally account for symbol swaps when calculating a distance. Defaults to True.
bayes_selection (bool, optional): use bayes reasoning when selecting the best candidate. Bert probabilities are the prior, textual similarities of candidates to the input are treated as the probabilities B/A that the corect candiadte is A, while the input was B. Defaults to True.
ranked_bert_probs (bool, optional): use ranked probs as oppposed to the absolute probs values coming from Bert. Defaults to True.

И я научил электронного болвана понимать, что имелась в виду виза в Дубай. 😁
#python #npl #spellchecking #bayes

Вот разбивочка, как Байесовский метод приходит к выводу, что подразумевался Дубай.
1👍1
#python #npl #spellchecking #bayes

Это мы брали ранговые оценки вероятностей, для смягчения приора. Если же сильно поверить Берту и взять абсолютные оценки, Дубай улетает за первую десятку. Я не знаю, если честно, насколько хорошо Берты откалиброваны по вероятностям, может, @tech_priestess подскажет?

По итогу внёс в либу contextualSpellCheck предложение новой функциональности. А ну как удастся прокрасться в контрибьюторы почти что Spacy. )
❤‍🔥1👍1
#H100

Не очень понимаю историю с H100. Анонсированы он чуть ли не год назад, но в сторонних облаках начинают появляться только сейчас.

"Клиенты Google Cloud смогут тренировать и запускать приложения ИИ через виртуальные машины A3 и использовать службы разработки и управления ИИ Google, доступные через Vertex AI, Google Kubernetes Engine и Google Compute Engine. Виртуальные машины A3 основаны на чипах Intel Xeon четвёртого поколения (Sapphire Rapids), которые работают в связке с ускорителями H100. Пока не ясно, будут ли виртуальные CPU поддерживать ускорители логических выводов, встроенные в чипы Sapphire Rapids."

https://3dnews.ru/1086582/google-anonsirovala-noviy-iiorientirovanniy-superkompyuter-a3-s-26-000-graficheskih-protsessorov