Интересное что-то
625 subscribers
2.8K photos
255 videos
143 files
4.66K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Forwarded from Fless (Victor Rogulenko @flesspro)
Как разрабатывать стратегии? Часть 1 из 2

Позавчера получили запрос "научите меня делать стратегии".
Самый правильный совет был бы
- Устройтесь в компанию, которая делает стратегии,
- В ней познакомьтесь с человеком, который круто их делает,
- Поработайте с ним на 3-5 стратегиях.

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

Дисклеймер: нет универсального подхода, все ситуации индивидуальны, блаблабла. Я расскажу только, как структурировал работу над стратегией медиа компании, которую начинаем на этой неделе.

* [структура] *

Работа над стратегией распадается на 4 вопроса:

0/ Куда и зачем в целом двигаемся?
- Зачем мы вообще приходим на работу? (aka миссия)
- В каком состоянии мы хотим оказаться через Х лет? Каков образ будущего (aka яркое видение)
- Какую именно цель мы хотим достичь (aka громадная амбициозная цель, Big Hairy Audacious Goal)

Этот пункт многие не включают в стратегию, т.к. он больше связан с самоопределением, чем конкретными шагами. Плюс есть риск уйти в философию / достигаторство / шаманство. Я аккуратно включаю, т.к. пункт важен для мотивации команды и понимания приемлемых стратегий, критериев выбора между альтернативами.

Можно добавить формализацию ценностей. Но по-хорошему это отдельный огромный пласт работы, а не мимокрокодил.

1/ В каких условиях предстоит работать?
- Аудитория: Количество аудитории, как менялась во времени, разрез по возрастам и интересам в компании. Что она ценит в компании? Как меняются предпочтения? Чем мы лучше альтернатив?
- Клиенты: сколько платят, за какие услуги, как менялась выручка. Что хотят от нас?
- Конкуренты и альтернативы: кто они, сколько аудитории, сколько зарабатывают, чем отличаются? В чем сильнее и в чем слабее нас?
- Тренды: социальные, технологические, экономические. Какие они, как влияют на бизнес, как будут влиять? Как ими воспользоваться / защититься от них?
- Сценарии: какие варианты развития событий по каждому из пунктов выше мы видим? Как эти варианты подробно описать? Какие у каждого будут последствия? (Желательны не только количественно, но и качественно отличающиеся сценарии)

В этом пункте - костяк аналитической работы над стратегией. Вопросы, которые я перечислил, зависят от конкретной компании, и список может сильно меняться. Главное - не забить на этот этап, иначе окажешься единственным слепым футболистом на поле (ок, возможно, не единственным), и все шаги дальше посыпятся.

Здесь может пригодиться моделирование рынка на основе сценариев.

(-> Продолжение)

#casestudies

Fless
Forwarded from Fless (Victor Rogulenko @flesspro)
Как разрабатывать стратегии. Часть 2 из 2
(-> Начало)

2/ Как в этих условиях добиться успеха?

- Какие у нас есть сильные и слабые стороны?
- Какие у нас есть стратегические альтернативы?
- Какие альтернативы работают в каких сценариях? При каких условиях менять альтернативы?
- В какой базовый сценарий мы верим? Какую базовую альтернативу выберем?

Здесь стратегические альтернативы - как раз то, что принято называть стратегией в узком смысле: короткая формулировка принципов взаимодействия с миром. Известные примеры: "Wheels up" (Southwest Airlines"), "Flat-pack Furniture" (IKEA). Альтернативы стоит верхнеуровнево оценить для каждого из сценариев, а после выбрать оптимальную.

3/ Что конкретно нужно сделать, чтобы добиться успеха?

- Какие именно инициативы потребуются для реализации стратегии?
- Каков их финансовый потенциал?
- Как приоритизировать инициативы?
- Какие ресурсы потребуются для их реализации? Где их получить?
- Какие организационные изменения потребуются? Как их осуществить?
- Какие непосредственные следующие шаги необходимо совершить в ближайшую неделю?

На этом этапе верхнеуровневая стратегия приземляется на конкретные действия. Не приземлишься -- останешься на уровне болтовни и красивых слайдов в ящике.

* [конец структуры] *

Постарался все самое значимое упаковать в пост. Мастером по разработке стратегий он, конечно, никого не сделает, но общее представление дать может.

Следующие шаги. Почитайте, например:
- "Good Strategy Bad Strategy: The Difference and Why It Matters" by Richard Rumelt
- "Playing to Win: How Strategy Really Works" by by A.G. Lafley, Roger L. Martin

#casestudies

Fless
Forwarded from Fless (Victor Rogulenko @flesspro)
Как помочь новому свершиться?

Нарисовали стратегию, а дальше? Дальше либо в ящик, либо куча сложной работы.

Заструктурировать ее поможет фреймворк Маккинзи. Конечно, есть еще 100500 деталей, но запихну в пост, что влезет.

[структура]

1. Объяснить
- Подробно рассказать об изменениях: что меняется, почему, почему это важно
- Убедиться, что команда поняла
- Вовлечь людей в принятие решений

2. Наладить процессы и механизмы
- Определить, кто, что и с кем должен теперь делать
- Создать релевантные KPI. Убедиться, что они не ломают лишнее (без экономии на качестве)
- Проработать нефинансовую мотивацию

3. Научить команду
- Убедить людей, что им под силу работать по-новому
- Вложиться в обучение, чтобы дать людям уверенность

4. Показать своим примером
- Нужен полный buy-in топ-менеджмента. Иначе все бестолку.
- Фокусировать свое время на проектах, связанных с изменениями
- Постоянно демонстрировать этот фокус и результаты

[конец структуры]

P.S. И не забывайте про Дилберта с картинки.

#casestudies

Fless
.
Раз архитектура — «as Code», почему бы её не покрыть тестами?! Руслан Сафин

Офигенный доклад, давно искал что-то подобное. Почему-то очень мало людей рассказывает, показывает примеры.
Идея одновременно проста и в то же время гениальна: берем конфиги деплоя, например k8s, берем архитектурную схему сервиса(ов) в plantuml, парсим их и сопоставляем связи. По итогу получаются тесты на архитектуру, которые следят за тем, чтобы архитектурные схемы были актуальны. Очень понравилось, что есть пример кода. Посмотреть можно вот тут


https://youtu.be/POIbWZh68Cg?si=RfF5wyWirfN5GVib
Помните, я рассказывал про эмбеддинги предложений SONAR?
Те самые, для которых есть текстовый энкодер (предложение=>вектор) и декодер (вектор=>предложение) для 200 языков, и ещё несколько десятков энкодеров речи, переводящих устные предложения в то же семантическое пространство, что и письменные.
На основе которых работает моделька BLASER 2.0, неплохо коррелирующая с человеческими оценками (XSTS) качества перевода текста и речи.
На основе которых мои коллеги недавно запилили самый мультиязычный классификатор токсичности, MuTox.
Ну и, конечно, на основе которых мои коллеги собрали датасет SeamlessAlign: собранные по интернетам и заматченные по смыслу пары предложений речь-текст (100К часов) и речь-речь (9К часов) на разных языках. Этот датасет использовался для обучения моделей Seamless, примерно лучших из того, что сегодня существует для перевода речи.

Так вот. SONAR сейчас понимает текст на 200 языках (те же самые, что NLLB), но энкодеры речи пока есть только для 57 языков.
Зачем эти энкодеры вообще нужны? В голову приходит несколько примеров применений:
1) Классификация и перевод устных предложений напрямую, минуя этап автоматической транскрипции. Для классификации можно использовать модели поверх эмбеддингов предложений (типа того же MuTox), а для перевода - имеющийся текстовый декодер.
2) Автоматический матчинг устных предложений с их переводами или транскрипцией - то, как мы собирали SeamlessAlign и несколько подобных датасетов.

Ну и поскольку польза от этого вроде как есть, то сообщество просит дать им рецепт обучения энкодера речи для ещё одного языка. А раз просит - я попробовал сделать. С минимальными данными (используя только CommonVoice) и вычислительными ресурсами (два дня обучения на Colab Pro). На примере грузинского языка, потому что для него ещё нет энкодера речи, но есть, на каких данных оценить его качество и с чем сравнить.
Рецепт - в этом блокноте. Качество мне не очень нравится, так что я его ещё буду дорабатывать. Но фидбек хочется получить уже сейчас, так что если вам есть, что сказать по поводу этого блокнота - не стесняйтесь писать в комменты)
Forwarded from grokaem себя (Milana)
ФЕВРАЛЬ 2024

NLP
:
0. Пост про embeddings для поиска, можно брать в заметки для собеса.
1. Новый метод self-playing.
2. У Ильи Гусева появился канал, вот например клевый пост про утечку данных.
3. Вышла gemini на овердохера контекста (1млн), у нее много критики. Но сам вопрос длинных контекстов как никогда актуален. Рассуждения на эту тему.
4. Transformer United - пачка видео research orientated про NLP, клевое по RAG. Собрано давно, нашла сейчас.
5. Вышла DoRA - DoRA: Weight-Decomposed Low-Rank Adaptation, paper -> разделяем magnitude и direction, LORA на direction, источник.

Audio:
0. Вышла LLM ASR approach, источник, статья - почти все frozen, тренеруется только linear projection, звучит классно и похоже в теории на encodec, интересно, почему не юзают его.
1. Вышла Supervoice-GPT для перевода с текста на фонемы + duration.
2. Overview audio codec моделей, постоянный источник.
3. Вышла audio synthesis работа с NVIDIA: paper, источник. В HIFIGAN добавили Snake function для periodic inductive bias. Очень классные семплы.
4. CTC is still alive, paper СTC + prompt (ASR & ST), внутри self-conditioned CTC, быстрее 3,6 speed up. paper
5. Stability.AI выкатили StableAudio: CLAP + UNET + VAE (последний кстати тоже с snake function) paper, samples

others:
0. У моего знакомого, который учится в mbzuai был пост про вопросы к собесу
1. Вышла новая модель russian vibe для генерации грустных русских девятиэтажек - пейзажей
2. Я собрала еще один пазл, важная новость - я считаю
Recap of the interview (Not all of the questions are from this interview only)

1) CTO introduces the company 
- good place to ask your questions and show that you are really interested in working with them

2) Tell about yourself
(your specific projects, tech stack used, challenges faced, years of experience, expertise in instruments, anything you can tell to make yourself look better)

3) Experience with organizing annotation workflow and managing responsibilities


Sanity check questions:

1) Can you use accuracy as a loss function?
2) Can you use IoU as a loss function?
3) What is the difference between binary, multiclass, and multilabel classification?
4) What is the hash map and how is it used in Python?
5) What is the time complexity of insert into a hash map?
6) What is the difference between linked list and array?
7) What is the difference between local and global minima?
8) What is the aim of backpropagation algorithm?
9) How to copy data from a remote location?
10) How to make a program (i.e. training loop) run after session is terminated?


Simple coding questions:
Q1
def f(arr: List):
arr.append(1)
return arr
arr1 = []
arr2 = arr1
arr3 = f(arr1)
arr4 = f(arr2)
print(arr4)

What will be the output?


Q2
def duplicate(arr: List):
return ...

Create a function to test if the list contains duplicates


Q3
def pair_to_sum(nums: List, target:int):
return ...

Create a function, that will return indices of 2 elements in an array, that sum up to a target, given solution is unique and always exists


Design questions
1) Suppose a business customer comes to you with a request to build a system that will be able to distinguish between 5 types of lung diseases, but they have only unlabeled data, what will you do?

- How would you label the data?
- Suppose the system is working, but there are some edge cases that are classified incorrectly, how to solve this problem?
- Suppose there are sometime incorrect inputs, i.e. leg x-ray in a lung disease detector, how to handle such cases?
- Suppose a new hospital is about to be connected to the system, how to handle such problem?


Competency list
General Competencies
- Python (PEP, GIL, Typing, Multithreading, Packet management, Debugging)
- Quality code (Liters/Formatting, Logging, Tests, Object-Oriented Programming)
- Algorithms (Time and Space Complexity, Recursion, Trees, HashMaps, Arrays, Graph methods (DFS, BFS))
- DevOps basics (gid, Docker, s3, Cloud Service Providers, ci/cd, bash, ssh)

CV/DL/ML Specific Competencies
- Types of learning (Supervised, Unsupervised, Semi-Supervised)
- Math (Matrices, Probability, Statistics, Distributions)
- Basic ML algorithms (Regression, KNN, Boosting, Decision Trees)
- Scikit-Learn
- Parameter tuning
- Python data processing (numpy, pandas, matplotlib)
- Neural networks (Convolution, Augmentations, Overfitting, Transfer learning, Embeddings, PyTorch, TensorFlow, paperswithcode.com)

- Computer Vision Tasks (Classification, Detection, Semantic segmentation, Instance segmentation, Keypoint detection, Metric learning)
- OpenCV
- Working with 3D data (2D, CT, MRI, DICOM, MONAI)
- Data annotation (Preparing data for annotation, Crowdsourcing (Toloka etc.), Tools for annotation (labelstudio, supervisely, Toloka etc.), Active learning)
- MLOps (Training models not in jupyter notebooks, conda (virtual environments), pytorch lightning, dvc, TensorBoard, MLFlow, ClearML, W&B)
- Experience in deploying models to production (Flask/FastAPI/Django, Kafka/RabbitMQ, Docker, Docker swarm, Kubernetes)
- Experience in model optimization


Random questions from the competencies list to check where I actually applied those knowledge, i.e. Where did you use deployment, Flask, Docker, etc.
Forwarded from Data Funk
Привет, всякий раз, когда приходится иметь дело с рисками (прогноз погоды, медицинская диагностика, финансы, беспилотные авто и тд) возникает задача прогнозирования не просто точечного значения, а целого диапазона, в идеале всего условного распределения F(Y|X). Среди доступных для этого инструментов: Байесовские методы, квантильная регрессия, конформные предсказания и ансамблевые методы. К последним относится модификация случайного леса - Distributional Random Forest. Отличие от классического леса только в конце - для выбранного X оценивается близость со всеми точками из train набора по тому, как часто X попадает с ними в одни и те же листья в деревьях. Полученные меры близости используются в качестве весов для соответствующих значений Y из обучающей выборки, что в итоге дает непараметрическую оценку условного распределения F(Y|X).
Forwarded from Where is data, Lebowski (double_data_auto_bot)
​​💪 Прокачай себя до уровня PRO или полезные лайфхаки
.
Воды не будет, только те, конструкции, которые сам нашел и часто использую в Python+Pandas:
1️⃣ Pandas метод assign
Когда нужно создать столбцы на лету:

import pandas as pd


df.assign(column_one = lambda row: row["existing_column"] // 1024,
column_two = 24,
....)


2️⃣ Pandas метод pipe
Как apply, только для всего датафрейма и принимает аргументы функции:

import numpy as np
import pandas as pd


def calculate(df: pd.DataFrame, thr: float = 2.56, columns: list = []):
for col in columns:
df[f"{col}_transformed"] = np.sqrt(df[col]) > 2.56
return df

df.pipe(calculate, thr=5, columns=["value_1", "value_2"])


3️⃣ Структуры данных из collections
Если не список и не датафрейм, то точно defaultdict. Обычно использую для сбора результатов в цикле:

from collections import defaultdict

res = defaultdict(list) # общая структура словарь, где для каждого ключа значением по-умолчанию будет пустой список

for idx, value enumerate([123, 999, 678]):
res["idx"].append(idx)
res["value"].append(value**2)

res["value"] # это список =)


Кейсы:
- подготовка данных для визуализации (например, отдать по API)
- сбор статистики при выполнении сложных SQL запросов
- ...

4️⃣ Модуль itertools
- batched открыл для себя, когда сам сначала написал такую штуку (немножко изобрел 🚲)
- combinations - итератор комбинаций из элементов списка
- zip_longest - "длинный" брат zip (если не знал, то zip проходится по самому короткому из списков)

5️⃣ Модуль functools - магия функционального программирования
- partial - кажется, это самая часто используемая функцию из модуля (ну может после lru_cache())

import typing
import pandas as pd
import numpy as np


def func(df: pd.DataFrame, columns: list, method: t.Callable = np.mean, window_width: int = 2):
assert window_width == 2, "Ширина окна должна быть 2+!"

for col in columns:
df[f"{col}_rolling"] = df[col].rolling(window_width, min_periods=2).apply(lambda window: method(window))

return df

func_mean = partial(func, columns=["value_1", "value_2"], method=np.median)

# теперь можно так, остальные параметры уже частично применились выше
func_mean(df=df)


Кейсы:
- ресерч методов или алгоритмов для решения одной и той же задачи
- отправка уведомлений только нужным адресам (чтобы каждый раз не прописывать их в аргументах)

6️⃣ reduce - применяет функцию из 2 аргументов итерабельно к списку, на выходе 1 значение

l = [0, 1, -5, 7, 8]

# x - первый элемент списка, или результат применения функции к текущему элементу, y - текущий элемент
res = reduce(lambda x, y: x+y, l)

print(res) # 11

.
И последнее (но это не точно): не забывайте заглядывать в доки, чтобы не городить монструозные преобразования, которые решаются специальным параметром. Помните, в казалось бы, простой функции pandas.read_csv - ~50 параметров, скорее всего ваш кейс уже там есть🙃
.
#python #lifehack