#marketingbullshit
Всё-таки как иногда "маркетинговая херня" прокрадывается в документы даже серьёзных компаний.
Мне лично неизвестны СУБД, выполняющиеся на GPU, а Вам? Так и представляю себе неосведомлённого клиента, который купил сервера на GPU чтобы получить "high performance database".
Уточню, СУБД в промышленной эксплуатации и на реальных проектах. Про экспериментальные ветки типа PgStrom я читал.
Всё-таки как иногда "маркетинговая херня" прокрадывается в документы даже серьёзных компаний.
Мне лично неизвестны СУБД, выполняющиеся на GPU, а Вам? Так и представляю себе неосведомлённого клиента, который купил сервера на GPU чтобы получить "high performance database".
Уточню, СУБД в промышленной эксплуатации и на реальных проектах. Про экспериментальные ветки типа PgStrom я читал.
#ml #datasets #openregistry #python
Бывает, для академических целей срочно нужны датасеты )
В таких случаях можно поискать в Registry of Open Data on AWS. 400+ датасетов (табличные, тексты, изображения) хостятся на s3. Есть описания, зачастую примеры использования на Питоне. Акустика, космос, медицина, отзывы, карты, разметки, всё, что душе угодно )
https://registry.opendata.aws/
Бывает, для академических целей срочно нужны датасеты )
В таких случаях можно поискать в Registry of Open Data on AWS. 400+ датасетов (табличные, тексты, изображения) хостятся на s3. Есть описания, зачастую примеры использования на Питоне. Акустика, космос, медицина, отзывы, карты, разметки, всё, что душе угодно )
https://registry.opendata.aws/
#python #codegems
Понадобилась структура кольцевого буфера, самому делать на списках и указателях не хотелось, я смутно вспомнил что-то про очереди, ну и быстро нашёл такой красивый пример:
Ну и теперь реальный пример, для чего это было нужно. Есть список параметров, для которых я вызываю стороннее API. Если ответ API на определённое сочетание параметров не меняется, я хочу слать запросы по этой комбинации реже (чтобы не нагружать сервер, или чтобы сфокусироваться на других комбинациях). Для этого я придумал сохранять ответы API в кольцевой буфер (FIFO список фиксированной длины, в котором добавление нового элемента справа при достижении порогового размера списка вытесняет первый элемент слева):
Понадобилась структура кольцевого буфера, самому делать на списках и указателях не хотелось, я смутно вспомнил что-то про очереди, ну и быстро нашёл такой красивый пример:
>>> import collectionsВообще, из модуля я collections я часто использую defaultdict, ну и эпизодически Counter.
>>> d = collections.deque(maxlen=10)
>>> d
deque([], maxlen=10)
>>> for i in xrange(20):
... d.append(i)
...
>>> d
deque([10, 11, 12, 13, 14, 15, 16, 17, 18, 19], maxlen=10)
Ну и теперь реальный пример, для чего это было нужно. Есть список параметров, для которых я вызываю стороннее API. Если ответ API на определённое сочетание параметров не меняется, я хочу слать запросы по этой комбинации реже (чтобы не нагружать сервер, или чтобы сфокусироваться на других комбинациях). Для этого я придумал сохранять ответы API в кольцевой буфер (FIFO список фиксированной длины, в котором добавление нового элемента справа при достижении порогового размера списка вытесняет первый элемент слева):
# inits
SKIP_PROBABILITY = 0.5
HIST_TRACE_LENGTH = 2
def make_deque():
return deque(maxlen=HIST_TRACE_LENGTH)
last_known_capacities = defaultdict(make_deque)
# API monitoring
for combination in tqdm(combinations):
# check stable combinations less often
recent_capacities = last_known_capacities.get(combination)
if recent_capacities and (len(recent_capacities) >= HIST_TRACE_LENGTH):
if np.std(np.array(recent_capacities)) == 0.0:
if random.random()<SKIP_PROBABILITY:
nskipped += 1
continue
# call the API
new_score = API(combination)
# track result
last_known_capacities[combination].append(new_score)Stack Overflow
efficient circular buffer?
I want to create an efficient circular buffer in python (with the goal of taking averages of the integer values in the buffer).
Is this an efficient way to use a list to collect values?
def
Is this an efficient way to use a list to collect values?
def
#git #modularity #advicewanted
Товарищи, а как правильно расшарить репозиторий гит с другими репозиториями? Или хотя бы один модуль. На pip выкладывать нет смысла т.к. код слишком заточен под конкретную группу проектов. API репошка читает из базы, ETL репошка делает процессинг, один и тот же код коннекта к базе хочется как-то без copy-paste использовать и там и там. Как бы это сделать, кто сталкивался?
P.S. Решил пробовать субмодули. Мой накопленный опыт:
1) нужно создать общий репо с как минимум 1 коммитом, например, base
2) в одном из главных репо делаем git submodule add https://github.com/myacc/base
в результате появляется папка base со всеми файлами из общего репо.
обращаемся к коду как
поэтому в каждом основном репо надо будет сделать git submodule update --remote
4) похоже, хуки github actions по умолчанию не работают с сабмодулями, и нужно настраивать submodules: true. Проверяю. Проверил, действительно, в .github\workflows\docker-image.yml надо прописывать
jobs:
build:
name: Build container image
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
submodules: 'true'
тогда хуки не ломаются.
Поправка: лучше вроде бы использовать git submodule add -b <branch> <repository> , что должно позволить родительскому репо привязываться не к коммиту, а к голове ветки. Но я не понял, когда этот механизм должен включиться.
В целом, сабмодули (или подмодули?) позволили избежать повторяющегося кода. Я уже наступил на грабли, когда код одной и той же функции в разных репо рассинхронизировался, теперь такой ерунды не будет. Пара команд git submodule update --remote - небольшая цена за это удобство, мне кажется.
Товарищи, а как правильно расшарить репозиторий гит с другими репозиториями? Или хотя бы один модуль. На pip выкладывать нет смысла т.к. код слишком заточен под конкретную группу проектов. API репошка читает из базы, ETL репошка делает процессинг, один и тот же код коннекта к базе хочется как-то без copy-paste использовать и там и там. Как бы это сделать, кто сталкивался?
P.S. Решил пробовать субмодули. Мой накопленный опыт:
1) нужно создать общий репо с как минимум 1 коммитом, например, base
2) в одном из главных репо делаем git submodule add https://github.com/myacc/base
в результате появляется папка base со всеми файлами из общего репо.
обращаемся к коду как
from base.xxx import y
3) если общий репо Вы обновили, git всё равно будет использовать в главных репо старые коммиты.поэтому в каждом основном репо надо будет сделать git submodule update --remote
4) похоже, хуки github actions по умолчанию не работают с сабмодулями, и нужно настраивать submodules: true. Проверяю. Проверил, действительно, в .github\workflows\docker-image.yml надо прописывать
jobs:
build:
name: Build container image
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
submodules: 'true'
тогда хуки не ломаются.
Поправка: лучше вроде бы использовать git submodule add -b <branch> <repository> , что должно позволить родительскому репо привязываться не к коммиту, а к голове ветки. Но я не понял, когда этот механизм должен включиться.
В целом, сабмодули (или подмодули?) позволили избежать повторяющегося кода. Я уже наступил на грабли, когда код одной и той же функции в разных репо рассинхронизировался, теперь такой ерунды не будет. Пара команд git submodule update --remote - небольшая цена за это удобство, мне кажется.
GitHub
Loading repositories with submodules is repeated. Failed to clone submodule from googlesource · Issue #300 · docker/build-push…
My workflow: jobs: build_push_to_registry: name: Push Docker image to GitHub Packages runs-on: ubuntu-latest steps: - name: Check out the repo uses: actions/checkout@v2 with: submodules: recursive ...
#war #poetry
Вот я вышла ночью из толщи чужой земли:
в волосах ковыль, на ногах песок, тонкий слог молитв,
на ладонях семь линий, в порезах бёдра, в руках печаль,
и прокушены губы до алой глуби, чтоб не кричать.
Вот я вышла ночью из почвы, шла как во сне:
по сожжённому полю, опавшим веткам, сквозь липкий снег.
Полумесяц колючий глядел из тучи слепящ и дик.
Вместо сердца мёртвые бражники бились в моей груди.
Лёд укрыл лужи стужей – блестящий и тонкий щит.
И я шла, примечая уставших сутулых седых мужчин,
скорбных женщин в платках, телогрейках, сетях морщин.
Каждый третий груз смерти в себе, на плечах тащил.
И они обнимались, рыдали, пускались в пляс,
по степной дали дланям, по снегу, по ковылям.
Они пели о том, как приходит конец войне.
И они меня звали победой, улыбаясь ужасной мне.
К. Вернер
Вот я вышла ночью из толщи чужой земли:
в волосах ковыль, на ногах песок, тонкий слог молитв,
на ладонях семь линий, в порезах бёдра, в руках печаль,
и прокушены губы до алой глуби, чтоб не кричать.
Вот я вышла ночью из почвы, шла как во сне:
по сожжённому полю, опавшим веткам, сквозь липкий снег.
Полумесяц колючий глядел из тучи слепящ и дик.
Вместо сердца мёртвые бражники бились в моей груди.
Лёд укрыл лужи стужей – блестящий и тонкий щит.
И я шла, примечая уставших сутулых седых мужчин,
скорбных женщин в платках, телогрейках, сетях морщин.
Каждый третий груз смерти в себе, на плечах тащил.
И они обнимались, рыдали, пускались в пляс,
по степной дали дланям, по снегу, по ковылям.
Они пели о том, как приходит конец войне.
И они меня звали победой, улыбаясь ужасной мне.
К. Вернер
Forwarded from Борис опять
#лабораторный_журнал
В прошлый раз я писал о том, что запустил свой проект на работе. Система используется. Очень приятное чувство когда смотришь на дашборд и там квадратики окрашиваются в зеленый или красный цвет (в зависимости от того, нашли агрономы проблему в этой локации или нет).
Мир дал мне обратную связь по моим инженерным скиллам: я ушел в отпуск на две недели, а мне никто не звонил и не писал и даже джун пару вещей допилил не сломав прод.
Так же я получил обратную связь по моим софт скиллам. Оказалось, что наша система не заменяет агрономам ручной труд. Мы фоткаем растения, а им, оказывается, так же необходимо замерять высоту. Поэтому они пользуются нашей системой и в добавок ходят и меряют растения руками как раньше. Конечно же на этапе планирования никто об этом не упомянул. Значит над скиллами выяснять что же нужно заказчику мне еще надо поработать.
Плюс они сделали отчет по использованию системы с рядом правок, из которых видно, что они не совсем понимают цель системы. Я знал, что все слишком гладко идет. Все ждал, когда же наступит мой любимый момент: “ой, это не то, что мы хотели раньше”. И вот он настал. Начинается настоящее веселье: вторая итерация, когда мы пытаемся докрутить систему до полезности.
Начал экспериментировать по части ML. Выкачал семпл в 10к изображений и попробовал самый тупой бейзлайн предсказания возраста растений: Random Forest на гистограммах цвета. Внезапно получились предсказания с типичной ошибкой в +-1 день, MAE 0.8. Посмотрел примеры где предсказанный возраст сильно отличается от настоящего и там часто встречаются разного рода аномалии. Правда чаще всего технические проблемы. Если такой подход способен хоть что-то предсказывать, то нейронки должны легко решить проблему. Поэтому я пишу пайплайны для сбора датасета на 500к изображений и получения frozen features с помощью CLIP. Накинем сверху логрегрессию и будет счастье.
Но это конечно просто эксперименты, а параллельно будет идти настоящее построение ML системы. В первую очередь сбор требований. Скорее всего сформируем задачу поиска одного типа аномалий, утвердим какой нам нужен precision и будем максимизировать recall системы. Далее будем думать как именно придти к этому: через предсказание роста растений или как-то еще.
В прошлый раз я писал о том, что запустил свой проект на работе. Система используется. Очень приятное чувство когда смотришь на дашборд и там квадратики окрашиваются в зеленый или красный цвет (в зависимости от того, нашли агрономы проблему в этой локации или нет).
Мир дал мне обратную связь по моим инженерным скиллам: я ушел в отпуск на две недели, а мне никто не звонил и не писал и даже джун пару вещей допилил не сломав прод.
Так же я получил обратную связь по моим софт скиллам. Оказалось, что наша система не заменяет агрономам ручной труд. Мы фоткаем растения, а им, оказывается, так же необходимо замерять высоту. Поэтому они пользуются нашей системой и в добавок ходят и меряют растения руками как раньше. Конечно же на этапе планирования никто об этом не упомянул. Значит над скиллами выяснять что же нужно заказчику мне еще надо поработать.
Плюс они сделали отчет по использованию системы с рядом правок, из которых видно, что они не совсем понимают цель системы. Я знал, что все слишком гладко идет. Все ждал, когда же наступит мой любимый момент: “ой, это не то, что мы хотели раньше”. И вот он настал. Начинается настоящее веселье: вторая итерация, когда мы пытаемся докрутить систему до полезности.
Начал экспериментировать по части 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/
Внимание зацепили концепция 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/
eugeneyan.com
More Design Patterns For Machine Learning Systems
9 patterns including HITL, hard mining, reframing, cascade, data flywheel, business rules layer, and more.
#krapivin #fantasy
Что же пишет Ерёма?
Я развернул лист и увидел раздёрганные строчки:
"Биригитес их они не люди Приход ити ввагон я расскажу я узнал Эрема".
Я перечитал записку. Почти ничего не понял, но стало опять зябко и неуютно. Ерёма никогда не шутил и никогда не тревожился зря. Что-то случилось. И я побежал!
Я не успел.
***
На пустыре за путями, у вросшего в землю бетонного блока мы вырыли яму. Сложили в неё искорёженные обломки. Засыпали, а сверху настелили дёрн.
— Давай пиши, — сумрачно сказал мне Юрка. — Ты кистями работать привык…
Он дал мне кисточку и банку с чёрной несмываемой краской.
— Только не надо, что он был робот… — попросил Янка.
Я вывел на бетоне:
Он шёл через пути к вагону. По ближней от вагона колее мчался электровозик технической службы. Ерёма остановился метрах в двух от рельсов, чтобы пропустить его. Всё это было у Глеба на глазах. Ерёма стоял спокойно, на электровозик даже не смотрел. Когда машина проносилась мимо Ерёмы, из неё высунулось что-то длинное и тонкое — то ли рельс, то ли грузовая стрела. Концом она ударила Ерёму в спину, и он взлетел высоко в воздух… А падал уже отдельными кусками…
https://e-knigi.com/detskaya-literarura/detskaja-fantastika/page-2-212244-vladislav-krapivin-golubyatnya-na-zheltoi-polyane.html
Что же пишет Ерёма?
Я развернул лист и увидел раздёрганные строчки:
"Биригитес их они не люди Приход ити ввагон я расскажу я узнал Эрема".
Я перечитал записку. Почти ничего не понял, но стало опять зябко и неуютно. Ерёма никогда не шутил и никогда не тревожился зря. Что-то случилось. И я побежал!
Я не успел.
***
На пустыре за путями, у вросшего в землю бетонного блока мы вырыли яму. Сложили в неё искорёженные обломки. Засыпали, а сверху настелили дёрн.
— Давай пиши, — сумрачно сказал мне Юрка. — Ты кистями работать привык…
Он дал мне кисточку и банку с чёрной несмываемой краской.
— Только не надо, что он был робот… — попросил Янка.
Я вывел на бетоне:
ЕРЁМАЕрёма погиб за час до того, как я сюда прибежал.
Погиб 6 августа 210 г. к. э.
Он шёл через пути к вагону. По ближней от вагона колее мчался электровозик технической службы. Ерёма остановился метрах в двух от рельсов, чтобы пропустить его. Всё это было у Глеба на глазах. Ерёма стоял спокойно, на электровозик даже не смотрел. Когда машина проносилась мимо Ерёмы, из неё высунулось что-то длинное и тонкое — то ли рельс, то ли грузовая стрела. Концом она ударила Ерёму в спину, и он взлетел высоко в воздух… А падал уже отдельными кусками…
https://e-knigi.com/detskaya-literarura/detskaja-fantastika/page-2-212244-vladislav-krapivin-golubyatnya-na-zheltoi-polyane.html
Онлайн книги всех жанров читать бесплатно | e-Knigi.com
Владислав Крапивин - Голубятня на желтой поляне
Владислав Петрович КрапивинГолубятня на желтой полянеБАРАБАНЩИКИ, ВПЕРЕД!Обычно не принято в предисловиях раскрывать секреты книги. Но здесь сразу хочется сказать о том, как в эпилоге этого романа собрались на перекличку барабанщики. Издалека собрались —…
#cron #bash
Столкнулся с проблемой запуска скрипта по расписанию, целая эпопея. В винде оно как-то проще настраивается, есть Task Scheduler, можно в GUI накидать команды и аргументы, указать учётки, выставить расписание и параметры (к примеру, галочку Do not start a new instance if the task is already running), и готово. В Linux всё оказалось не так просто. Вот работающий рецепт (к которому я пришёл методом проб и ошибок), который каждую минуту проверяет питоновский скрипт, если он не запущен - запускает:
ставим либу отправки емэйлов (т.к. крон шлёт уведомления на емэйл хозяина задачи, если что не так) и run-one чтобы не запускать новый процесс, если старый ещё выполняется
*/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
Столкнулся с проблемой запуска скрипта по расписанию, целая эпопея. В винде оно как-то проще настраивается, есть 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
Hostinger Tutorials
Cron job: What it is and how to configure it in 2025
A cron job is an automated task run by cron, a scheduling tool for Unix-like systems. Learn how cron jobs work and how to set them up.
👀1
#python #langdetect #nlp
Кто пользуется либой langdetect для определения языка - она не очень точная (по кр мере, на коротких фразах). Можно проверять с помощью google translate api.
Кто пользуется либой langdetect для определения языка - она не очень точная (по кр мере, на коротких фразах). Можно проверять с помощью google translate api.
#python #npl #spellchecking
А кто работал со спеллчекерами в Питоне? contextualSpellCheck, якобы построенный на базе Bert-a, кажется довольно тупо сделанным.
Хотел их поругать, но нет, после изучения кода оказалось, что они как раз и сравнивают кандидатов от Берта с самой опечаткой. Просто вероятности они выводят ДО переранжирования, + в конкретном примере ванильный Берт не выдал ни одного хорошего кандидата.
А кто работал со спеллчекерами в Питоне? contextualSpellCheck, якобы построенный на базе Bert-a, кажется довольно тупо сделанным.
Хотел их поругать, но нет, после изучения кода оказалось, что они как раз и сравнивают кандидатов от Берта с самой опечаткой. Просто вероятности они выводят ДО переранжирования, + в конкретном примере ванильный Берт не выдал ни одного хорошего кандидата.
#aws #s3 #requesterpays
О, классно, оказывается, можно великодушно захостить данные в s3, но не скатываться при этом в полный альтруизм и позволить скачивающим платить за трафик. К примеру, так хранятся все статьи arXiv.org
А вот так можно с ними работать на кластере (подсчёт статей с упоминанием Matplotlib).
https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html
О, классно, оказывается, можно великодушно захостить данные в s3, но не скатываться при этом в полный альтруизм и позволить скачивающим платить за трафик. К примеру, так хранятся все статьи arXiv.org
А вот так можно с ними работать на кластере (подсчёт статей с упоминанием Matplotlib).
https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html
www.coiled.io
How Popular is Matplotlib?
This analysis tracks the growth of Matplotlib on the preprint server arXiv beginning in 2002 with 1% up to 2022 with 17% of all papers using Matplotlib. We analyze a dump of arXiv data on AWS S3 using Dask and Coiled.
#nvidia #huang
Ну вот, можно же на $600k обеспечить не только безопасность, но и страховки, перелёты. Сандалю Пичалю с его $6M надо у мистера Куртки поучиться. Хотя...
https://3dnews.ru/1086557/zarplata-generalnogo-direktora-nvidia-upala-na-10-v-2023-finansovom-godu-izza-nevipolnennih-planov-prodag
Ну вот, можно же на $600k обеспечить не только безопасность, но и страховки, перелёты. Сандалю Пичалю с его $6M надо у мистера Куртки поучиться. Хотя...
https://3dnews.ru/1086557/zarplata-generalnogo-direktora-nvidia-upala-na-10-v-2023-finansovom-godu-izza-nevipolnennih-planov-prodag
3DNews - Daily Digital Digest
Зарплата гендиректора NVIDIA упала на 10 %, но Хуанг всё равно получит в 94 раза больше рядового сотрудника
Президент и главный исполнительный директор NVIDIA Дженсен Хуанг (Jen-Hsun Huang), мог бы заработать почти 25 миллионов долларов в последнем финансовом году, но из-за того, что компания не достигла поставленных финансовых целей ему была выплачена меньшая…
#nlp #spellchecking
Продолжаю работать с contextualSpellCheck. Хотя они оказались не так плохи, как я вначале подумал, они всё же налажали. Их либа рассматривает только 10 вариантов подстановки от нейронной модельки, и изменить это число невозможно без перекомпиляции (шучу, это же питон, можно просто отредактировать исходники). Не глупость ли это? Ну спасибо, ребята, что за всех решили, что 10 кандидатов будет достаточно. Кстати, это прямо частый паттерн, когда создатели библиотеки часть внутренних параметров хардкодят и забывают открывать. Понятно, что для их повседневных задач это не оказалось нужным, а остальным-то что делать?
С top_n=1000 на предыдущем примере получается уже более осмысленный ответ, Cuba вместо точки, и даже правильный ответ Dubai мелькает.
Но тут уже удивляет пакет editdistance. Каким образом у них Cuba более похожа на dubia, чем Dubai?
Продолжаю работать с 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) вычислять не надо, она константна для всех кандидатов и на аргмакс не влияет. Получается, нам надо выбрать кандидата с максимальным произведением вероятности Берта на похожесть с опечаткой. Строго говоря, Бертовы вероятности можно еще нормировать на сумируемость к единице, т.к. у нас ограниченная выборка кандидатов из всего словаря, но это опять же будет константа, и на выбор не повлияет.
А, понял, в чём дело. Я почему-то думал, что расстояние Левенштейна учитывает перестановки, а на самом деле туда входят только замены, вставки, удаления. Тогда действительно 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 весь код, но воткнём перед каждым вызовом своего метода (?) вызов текущего времени. Чуваки, вы про параметризованные декораторы в Питоне слышали, ау?
Улучшаю корректор письменных ошибок. Не могу не отметить "крайне оптимальный" подход к профилированию. Если у класса установлен флаг 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.
И я научил электронного болвана понимать, что имелась в виду виза в Дубай. 😁
Итак, после нескольких часов допиливания конструктор 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.
И я научил электронного болвана понимать, что имелась в виду виза в Дубай. 😁