Machine learning Interview
24.4K subscribers
1.04K photos
69 videos
12 files
701 links
Разбираем вопросы с собеседований по Machine Learning, Data Science, Deep Learning и Нейронным сетям, Python.

Вопросы - @notxxx1


@itchannels_telegram -🔥лучшие it каналы

РКН: clck.ru/3FmwRz
Download Telegram
🔍 Анализ данных для задач НЛП

Для успешного NLP-проекта одним из важнейших этапов является предварительная обработка данных. В этой статье мы рассмотрим все шаги, связанные с анализом данных для любой задачи НЛП.

Для анализа данных мы можем использовать статистические методы, вычислительные алгоритмы, чтобы обработать данные и повысить производительность модели. Шаги, описанные в этом посте, могут быть использованы для анализа данных для любой задачи НЛП.

Настройка среды
Первым шагом любого проекта является настройка среды, т.е. установка важных пакетов и импорт важных библиотек.
!pip install nltk
!pip install pandas


import pandas as pd
import nltk
from nltk.tokenize import sent_tokenize,word_tokenize
from nltk.stem import PorterStemmer
from nltk.corpus import stopwords
import re

Обзор данных
Следующим этапом проекта будет загрузка датасета. В данном случае мы будем использовать набор данных твитов о катастрофах из Kaggle.
Мы можем загрузить наш датасет с помощью библиотеки pandas.

df = pd.read_csv("/train.csv")

Для того чтобы получить общее представление о данных, мы можем просмотреть верхние строки набора данных с помощью функции head в pandas:

df.head(10)

Для анализа столбца ключевых слов мы используем библиотеку seaborn, которая позволяет визуализировать распределение ключевых слов и их корреляцию с целью.

plt.figure(figsize=(10,70))
sns.countplot(data=df,y="keyword",hue="target",saturation=0.50)
plt.legend(bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0)
plt.show()


📌 Продолжение

@machinelearning_interview
🚀 TorchServe – это фреймворк, который является частью экосистемы PyTorch для обслуживания моделей, который является гибким и простым в использовании.

Инструмент позволяет развертывать обученные модели PyTorch без необходимости писать собственный код.

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

Возможности:

Поддержка нескольких форматов моделей (torchscript, onnx, ipex, tensorrt);
TorchServe можно использовать для многих типов вывода в производственных условиях.
Объединение нескольких моделей в один граф/workflow;
Инференс API (REST и GRPC);
API для управления моделями;
Метрики из коробки.

pip install torch==1.7.0 torchvision==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
pip install torchserve==0.2.0 torch-model-archiver==0.2.0


Примеры, демонстрирующие возможности и интеграции TorchServe

@machinelearning_interview
🚗 Тест-драйв PyTorch 2.0 и заглядываем под капот «двушки»

⚜️ Новейший метод для ускорения кода в PyTorch 2.0 — torch.compile(), который позволяет JIT‑компилировать код PyTorch в оптимизированные ядра, требуя минимальных изменений кода.

JIT‑компиляция (Just‑In‑Time compilation) — это процесс, при котором код на высокоуровневом языке преобразуется в код на низкоуровневом языке, который может быть быстрее и эффективнее исполнен процессором или графическим ускорителем. torch.compile() использует TorchDynamo и заданный бэкенд для JIT‑компиляции кода PyTorch.

Рассмотрим, насколько эффективен torch.compile() на практике, заглянем под капот «двушки» PyTorch 2.0, чтобы узнать, как работает этот метод и какие преимущества он дает.

Разработчики PyTorch заявляют, что torch.compile() может дать прирост производительности до 50% по сравнению с обычным кодом PyTorch. Для проверки этого заявления мы проведем ряд экспериментов на разных моделях и данных, выясним, есть ли реальная выгода от использования torch.compile().

📌 Для того чтобы понять, как работает torch.compile() рассмотрим основные его компоненты, которые отвечают за различные аспекты JIT‑компиляции кода PyTorch:

▪️TorchDynamo — это динамический компилятор, который анализирует код PyTorch и определяет, какие части кода могут быть скомпилированы в оптимизированные ядра. Отслеживает изменения в коде и перекомпилирует его при необходимости.

▪️AOT AutoGrad — это система автоматического дифференцирования, которая позволяет вычислять градиенты для скомпилированных ядер. Генерирует код для обратного распространения ошибки во время компиляции, а не во время исполнения, что ускоряет процесс обучения нейронных сетей.

▪️PrimTorch — это набор примитивных операций, которые используются для построения скомпилированных ядер. Включает в себя базовые математические и логические операции, а также операции над тензорами, такие как сложение, умножение, свертка и т. д.

▪️TorchInductor — это бэкенд для JIT‑компиляции кода PyTorch в оптимизированные ядра для разных устройств. Поддерживает разные бэкенды и адаптирует код PyTorch к специфике каждого устройства.

Далее подробнее рассмотрим, как работают компоненты TorchDynamo и TorchInductor и как они взаимодействуют друг с другом, чтобы обеспечить JIT‑компиляцию кода PyTorch.

📌Читать

@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Опишите алгоритм для нахождения миллиона наименьших чисел в наборе из миллиарда чисел. Память компьютера позволяет хранить весь миллиард чисел. Если придумали какое-либо решение, то оцените его эффективность по времени. Есть ли более эффективное решение?

Решение 1. Сортировка
Можно отсортировать элементы в порядке возрастания, а затем взять первый миллион чисел. Это потребует O(n log(n)) времени.

Решение 2. Минимум кучи
Чтобы решить эту задачу, можно использовать минимум кучи. Мы сначала создаем кучу для первого миллиона чисел с наибольшим элементом сверху.

Затем мы проходимся по списку. Вставляя элемент в список, удаляем наибольший элемент.

В итоге мы получим кучу, содержащую миллион наименьших чисел. Эффективность алгоритма O(n log(m)), где m — количество значений, которые нужно найти.

Решение 3. Ранжирование (если изменять исходный массив)
Данный алгоритм очень популярен и позволяет найти i-й наименьший (или наибольший) элемент в массиве.

Если элементы уникальны, поиск i-гo наименьшего элемента потребует О(n) времени. Основной алгоритм будет таким:

Выберите случайный элемент в массиве и используйте его в качестве «центра». Разбейте элементы вокруг центра, отслеживая число элементов слева.

Если слева находится ровно i элементов, вам нужно вернуть наибольший элемент.

Если слева находится больше элементов, чем i, то повторите алгоритм, но только для левой части массива.

Если элементов слева меньше, чем i, то повторите алгоритм справа, но ищите алгоритм с рангом i - leftSize.

Приведенный далее код реализует этот алгоритм.

public int partition(int[] array, int left, int right, int pivot) {
while (true) {
while (left <= right && array[left] <= pivot) {
left++;
}

while (left <= right && array[right] > pivot) {
right--;
}

if (left > right) {
return left - 1;
}

swap(array, left, right);
}
}

public int rank(int[] array, int left, int right, int rank) {
int pivot = array[randomIntInRange(left, right)];

/* Раздел и возврат конца левого раздела */
int leftEnd = partition(array, left, right, pivot);

int leftSize = leftEnd - left + 1;
if (leftSize == rank + 1) {
return max(array, left, leftEnd);
} else if (rank < leftSize) {
return rank(array, left, leftEnd, rank);
} else {
return rank(array, leftEnd + 1, right, rank - leftSize);
}
}

Как только найден наименьший i-й элемент, можно пройтись по массиву и найти все значения, которые меньше или равны этому элементу.

Если элементы повторяются (вряд ли они будут «уникальными»), можно слегка модифицировать алгоритм, чтобы он соответствовал этому условию. Но в этом случае невозможно будет предсказать время его выполнения.

Существует алгоритм, гарантирующий, что мы найдем наименьший i-й элемент за линейное время, независимо от «уникальности» элементов. Однако эта задача несколько сложнее. Если вас заинтересовала эта тема, этот алгоритм приведен в книге Т. Кормен, Ч. Лейзер-сон, Р. Ривестп, К. Штайн «CLRS’ Introduction to Algorithms» (есть в переводе).

Пишите свое решение в комментариях👇

@machinelearning_interview
📃 Генерация отчетов графовой аналитики в формате PDF с помощью Python

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

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

Для работы с PDF в Python есть множество библиотек, самые популярные из них: PyPDF2, ReportLab, FPDF.

Сравнение основных библиотек: в изображении.

По совокупным критериям для дальнейшего разбора мной была выбрана библиотека ReportLab.

Одной из самых популярных библиотек для работы с графами в Python является NetworkX. Она предоставляет широкий набор инструментов для создания и анализа графов. Ее и буду использовать для создания графа и анализа данных.

В посте приведен код, необходимый для воспроизведения. Полный код доступен по ссылке.

Данные сгенерирую с помощью Python.
Пусть будет 500 операций, где будет информация об отправителе, получателе, сумме операции и флаг подозрительности операции.

df_dict = {}
count_operation = 500
for i in range(count_operation):
df_dict[i] = {'reciver' : random.randint(1, count_operation/2),
'sender': random.randint(1, count_operation/2),
'sum_oper': random.randint(1000, 1000000),
'suspisios_transaction': random.randint(0, 1)}


Добавлю 100 переводов, где получателем будет клиент 1, а отправителем- любой другой клиент из основного датасета:

for i in range(100):
df_dict[i] = {'reciver' : 1,
'sender': random.randint(1, count_operation/2),
'sum_oper': random.randint(1000, 1000000),
'suspisios_transaction': random.randint(0, 1)}
df = pd.DataFrame().from_dict(df_dict).T


Получится вот такой датасет:

Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
📊 11 основных диаграм для #DataScientists

Наглядный гайд, в котором подробно рассмотрены 11 важнейших графиков, которые специалисты, работающие с данными, используют в 95% случаев.

📌 Статья

@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍🎓 Стэнфордский университет предлагает бесплатные онлайн-курсы.

📌 Без вступительного взноса.
📌 Нет платы за обучение.
📌 Не нужно покупать учебники.

1. Специализация "Машинное обучение".
https://online.stanford.edu/courses/soe-ymls-machine-learning-specialization
2. Информатика 101.
https://online.stanford.edu/courses/soe-ycscs101-computer-science-101
3. Алгоритмы: Проектирование и анализ.
https://online.stanford.edu/courses/soe-ycsalgorithms1-algorithms-design-and-analysis-part-1
4. Базы данных: Продвинутые темы по SQL .
https://online.stanford.edu/courses/soe-ydatabases0001-databases-advanced-topics-sql
5. Основы программирования на языке R.
https://online.stanford.edu/courses/xfds112-r-programming-fundamentals
6. Статистическое обучение.
https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning
7. Программа Advanced Cybersecurity.
https://online.stanford.edu/courses/xacs100-advanced-cybersecurity-program-preview
8. Введение в Интернет вещей.
https://online.stanford.edu/courses/xee100-introduction-internet-things
9. Теория игр.
https://online.stanford.edu/courses/soe-ycs0002-game-theory
10. Проектирование карьеры.
https://online.stanford.edu/courses/tds-y0003-designing-your-career

@machinelearning_interview
Простое объяснение механизма внимания трансформеров и его использование. часть 1

1. Представьте, что у вас на полу куча игрушек, и вы хотите выбрать те, которые вам больше всего нравятся. Но игрушек так много, и вы не знаете, с чего начать!

2. А теперь представьте, что у вас есть специальный помощник, который может посмотреть на все игрушки сразу и сказать, какие из них самые важные. Это похоже на то, что делает механизм внимания трансформера!

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

4. Итак, как и ваш помощник с игрушками, он помогает компьютерам сосредоточиться на самых важных частях информации, чтобы лучше ее понять!

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

6. Если говорить проще, то механизм внимания трансформеров - это инструмент, позволяющий компьютерам анализировать и понимать большие объемы текстовых данных, разбивая их на более мелкие части и рассматривая, как эти части связаны друг с другом.

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


@machinelearning_interview
Простое объяснение механизма внимания трансформеров и его использование. часть 2

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

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

10. Это важно, поскольку смысл слова или фразы может зависеть от контекста, в котором оно употребляется. Еще одним преимуществом механизма внимания трансформеров является то, что он способен обучаться и адаптироваться к различным типам данных и задач.

@machinelearning_interview
🔥 Большое обновление: Meta's Long Llama обошла GPT-3.5 в длинных контекстах и сравнялась с GPT-4 в обобщении.

Основные моменты:
▸ Контекст: Поддерживает до 32 тыс.
▸ Производительность: Сравнивается с GPT-4 в суммировании, выигрывает у GPT-3.5 в длинных задачах.
▸ Эффективность: на 40% меньше вычислительных затрат при той же производительности.

Технические характеристики:
▸ Позиционное кодирование: Внесены изменения для улучшения работы с длинными текстами.
▸ Дополнительное обучение: Использовано больше наборов данных, включая длинные тексты.

Настройка инструкции:
▸ Задачи QA: Генерируются из длинных документов.
▸ Валидация: Llama 2 70B проверила пары QA.
▸ Тонкая настройка: Использовались синтетические данные и данные коротких инструкций.

arxiv.org/abs/2309.16039

@machinelearning_interview
Для оценки способности обобщения нейронной сети на новых данных мы разбиваем датасет на три части.

1️⃣ обучающий набор данных для подгонки модели
2️⃣ валидационный набор данных для настройки модели
3️⃣ тестовый набор для оценки производительности окончательной модели.

Простой сниппет кода с пояснение на PyTorch Lightning, чтобы сделать это без проблем

📌 Подробнее

@machinelearning_interview
📌 Расскажите про методы балансировки классов. Часть 1.

Взвешивание классов (Class Weighting)
Одним из первых методов, которые стоит рассмотреть, является взвешивание классов, или Class Weighting. Этот метод позволяет учесть дисбаланс между классами в процессе обучения модели. Он основан на идее того, что модель будет штрафовать более сильно за ошибки в классе-меньшинстве, поощряя более точное предсказание.

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

Пример 1: Взвешивание классов в библиотеке Scikit-learn (Python)

from sklearn.ensemble import RandomForestClassifier
from sklearn.utils.class_weight import compute_class_weight

# Получение весов классов
class_weights = compute_class_weight('balanced', classes=np.unique(y), y=y)

# Создание модели с взвешиванием классов
model = RandomForestClassifier(class_weight=dict(enumerate(class_weights)))

В приведенном коде мы используем библиотеку Scikit-learn для вычисления весов классов с помощью compute_class_weight. Параметр 'balanced' автоматически вычисляет веса классов на основе их доли в данных. Затем мы передаем эти веса в нашу модель случайного леса, что позволяет учесть дисбаланс классов.

Пример 2: Взвешивание классов в TensorFlow (Python)

import tensorflow as tf

# Создание модели
model = tf.keras.Sequential([
# добавьте слои вашей модели
])

# Определение весов классов
class_weights = {
0: 1.0, # Вес для класса 0
1: 10.0, # Вес для класса 1 (пример взвешивания, где класс-меньшинство получает более высокий вес)
}

# Компиляция модели с учетом весов классов
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'],
class_weight=class_weights)

В данном примере мы создаем нейронную сеть с использованием TensorFlow и задаем веса классов вручную с помощью словаря class_weights. Здесь класс-меньшинство (класс 1) получает более высокий вес (10.0), что отражает нашу попытку сбалансировать дисбаланс данных.

Увеличение (Oversampling) и уменьшение (Undersampling) выборки
Одним из основных способов борьбы с несбалансированными данными является увеличение (oversampling) и уменьшение (undersampling) выборки. Эти методы направлены на достижение баланса между классами путем изменения количества примеров в каждом классе.

Увеличение выборки (Oversampling)
Увеличение выборки заключается в добавлении дополнительных примеров класса-меньшинства, чтобы сделать его более представительным. Это можно сделать различными способами, например, путем дублирования существующих примеров, генерации синтетических данных или комбинирования этих методов.

Пример 1: Увеличение выборки с использованием библиотеки imbalanced-learn (Python)

from imblearn.over_sampling import RandomOverSampler

# Создание экземпляра RandomOverSampler
ros = RandomOverSampler()

# Применение увеличения выборки к данным
X_resampled, y_resampled = ros.fit_resample(X, y)

В этом примере мы используем библиотеку imbalanced-learn для увеличения выборки с помощью RandomOverSampler. Этот метод случайным образом выбирает примеры из класса-меньшинства и дублирует их, пока не достигнется баланс.

Уменьшение выборки (Undersampling)
Уменьшение выборки заключается в уменьшении количества примеров в классе-большинстве, чтобы сделать его менее доминирующим. Это может быть полезным, если дублирование примеров класса-меньшинства нежелательно.

Пример : Уменьшение выборки с использованием библиотеки imbalanced-learn (Python)

from imblearn.under_sampling import RandomUnderSampler

# Создание экземпляра RandomUnderSampler
rus = RandomUnderSampler()

# Применение уменьшения выборки к данным
X_resampled, y_resampled = rus.fit_resample(X, y)


Здесь мы используем библиотеку imbalanced-learn для уменьшения выборки с помощью RandomUnderSampler. Этот метод случайным образом удаляет примеры из класса-большинства до достижения баланса.

@machinelearning_interview
🔥 Дайджест полезных материалов из мира Машинного обучения за неделю

Почитать:
Как мы определили веса алгоритмов ранжирования крупнейших маркетплейсов на открытых данных
ИИ выходит на новый уровень: LLM обретают пространственно-временную картину мира
MLOps-инструменты, обзоры рынка и тренды потоковой обработки данных
От Style Transfer до диффузии: эволюция визуальных эффектов на смартфонах
Объясняем простым языком, что такое трансформеры
Машинное обучение помогает классическому моделированию квантовых систем
Борьба с несбалансированными данными
Как экспертиза в области мониторинга событий ИБ помогает создавать качественные продукты. Часть 3
Предсказание остановок оборудования с использованием LSTM и Байесовского подхода
Как получить полезную информацию из своих категориальных признаков?
why learn web (javascript) ML(machine learning) 2024
Getting Started with Machine Learning: A Beginner's Guide
La IA
The Hydra of Machine Learning: Understanding Multi-headed Attention
Interpreting Loan Predictions with TrustyAI: Part 1
BakaLLM, part 7: XL struggles are done, for now
The Complete Guide to Time Series Models
How to Land a Job as an AI Engineer 🤖
How to train an Iris dataset classifier with Tinygrad
Take your career to the next level: GitHub Universe create your own agenda

Посмотреть:
🌐 Making Private Data Open and Enhancing Decision-Making through Digital Atlases ( 28:27)

Хорошего дня!
This media is not supported in your browser
VIEW IN TELEGRAM
Теория, лежащая в основе шардинга баз данных, кажется простой.

Но как она реализуется в реальных базах данных?

Рассмотрим это на примере MongoDB (одной из самых популярных баз данных NoSQL)

Основы

Для шардинга в MongoDB необходим кластер.
Кластер - это группа взаимосвязанных серверов или узлов.

Для горизонтального масштабирования можно просто увеличить количество серверов.

Кластер состоит из трех частей:
- Шард
- Маршрутизатор Mongos
- Маршрутизатор конфигурации

Рассмотрим каждую часть:

Шард

Шард - это подмножество данных.
Данные разделяются между группой шардов.
Каждый шард развертывается как набор реплик.

Это замечательная вещь...
...потому что вы получаете репликацию и автоматическое восстановление данных после отказа системы.

Но никаких прямых запросов к шарду не поступает.

Маршрутизатор Mongos

Mongos Router играет ключевую роль в кластере Все запросы направляются на Mongos Router.

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

Маршрутизатор выступает в роли посредника для получения данных с реальных шардов.

Серверы конфигурации

Серверы конфигурации работают как отдельный набор реплик.
Они хранят метаданные для кластера шардов MongoDB.
Метаданные - это как индекс для вашего кластера.

В них хранится такая информация, как:
- Как организованы данные?
- Какие компоненты присутствуют в кластере.

Вот как выглядит весь процесс:

- Код приложения запрашивает данные
- Маршрутизатор Mongos получает запрос
- Маршрутизатор проверяет сервер Config Server, чтобы найти, на каком шарде находятся данные
- Запрос направляется на соответствующий шард
- Данные возвращаются в приложение
⚡️ 20 сайтов, на которых можно найти удаленную работу с оплатой в долларах США

1. Remote. co: https://remote.co
2. We Work Remotely: https://weworkremotely.com
3. FlexJobs: https://flexjobs.com
4. Remote OK: https://remoteok.io
5. Working Nomads: https://workingnomads.co/jobs
6. Jobspresso: https://jobspresso.co
7. Stack Overflow Jobs: https://stackoverflow.com/jobs
8. AngelList: https://angel.co
9. LinkedIn: https://linkedin.com
10. SkipTheDrive: https://skipthedrive.com
11. Remotive: https://remotive.io
12. Виртуальные профессии: https://virtualvocations.com
13. JustRemote: https://justremote.co
14. Удаленная техническая работа: https://remotetechwork.com
15. Dynamite Jobs: https://dynamitejobs.co
16. Pangian: https://pangian.com
17. Outsourcely: https://outsourcely.com
18. Remote Woman: https://remotewoman.com
19. Jobmote: https://jobmote.com
20. EuropeRemotely: https://europeremotely.com

@machinelearning_interview
👉 Reinforcement Learning

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

🖥 Github

@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Представлена Embed-v3 - новейшая модель эмбединга текста.

Embed-v3 превосходит системы семантического поиска и RAG и обладает улучшенной оценкой качества контента и высокой эффективностью.

https://clarifai.com/cohere/embed/models/cohere-embed-english-v3_0

@machinelearning_interview
Хотите научиться строить полноценный ML конвейер в реальном времени 🛠️

Гайд по его созданию Шаг за шагом На Python 𓊍:

https://www.realworldml.xyz/blog/real-time-pipelines-in-python

@machinelearning_interview