Тестовое задание команды CoreML

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Второе тестовое задание на стажировку звучало так:

«Цель — научиться вычислять эмбеддинги текстов.

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

После этого нужно по датасету вопросов Quora Question Pairs обучить модель, возвращающую вероятность сходства пар вопросов только по паре их эмбеддингов. Модель должна выдавать на тестовой выборке в публичном лидерборде Kaggle log-loss не больше 0,5.

В качестве выполненного задания необходимо предоставить код обучения моделей и формирования итогового файла с результатами, код вычисления эмбеддингов, а также указать ссылку на свой профиль в Kaggle. Кроме log-loss будет учитываться сложность и эффективность представленного решения.

Сначала разберёмся с основными понятиями:

  1. Эмбеддинг слова — его векторное числовое представление. Расстояние между эмбеддингами слов отражает семантическое сходство. Расстояние чаще всего задаётся как скалярное произведение векторов. Аналогично определяется эмбеддинг текста — как вектор, отражающий его общую семантику.
  2. log-loss — метрика оценки качества бинарного классификатора, в данном случае — классификатора похожих и непохожих пар вопросов. Она штрафует модель за неправильные ответы — и тем сильнее, чем больше модель в них уверена. Чем меньше значение этой метрики, тем лучше.

Чтобы решить эту задачу, кандидаты могли найти известный способ посчитать эмбеддинг текста (например, по предобученным данным) и применить любую модель классификации достаточной обобщающей способности (например, XGBoost или нейронную сеть). Разумеется, можно было и придумать свой вариант решения.

Наиболее популярным среди кандидатов оказался такой подход:

  1. Вызвать в Python библиотеку gensim с предобученными векторами слов Word2Vec, усреднить их значение по каждому из вопросов тестовых примеров, получив тем самым пары эмбеддингов текстов.
  2. Подать оба вектора на вход градиентному бустингу (LGBM, CatBoost, XGBoost).

Но в обоих пунктах были и другие решения. Несколько человек попробовали обучить свои эмбеддинги с помощью нейронки по датасету Quora Question Pairs. Обычно это не самая лучшая идея, потому что датасет для классификации существенно меньше, чем текстовые корпуса, на которых обучается Word2Veс. В нём может не хватить контекста для многих редких слов, а у высокочастотных может быть сильно смещённый контекст.

Кто-то вместо среднего значения W2V применял взвешивание из TF-IDF, а кто-то использовал не gensim, а более продвинутые варианты эмбеддингов, которые учитывают n-граммы. И то и другоев среднем улучшает показатели качества.

На втором этапе решения задачи тоже были подходы, отличающиеся от наиболее популярного. В частности, вместо того чтобы подавать на вход сами эмбеддинги, достаточно эффективным было использовать в качестве признаков расстояния между ними — скалярное произведение, евклидово расстояние. Вообще, в таких задачах feature engineering может показывать результаты намного лучше наивного подхода, кроме того обеспечивая большую скорость и сходимость обучения.

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

Кроме двух основных этапов был ещё нулевой этап — препроцессинг текста. Требования к его качеству часто недооценивают, но он важен, когда векторизация происходит на уровне отдельных слов. Большинство кандидатов использовали стандартные функции для фильтрации высокочастотных слов, убирали пунктуацию и проводили нормализацию регистра. Кроме этого можно было проанализировать слова, которые не вошли в словарь используемых эмбеддингов, заменить именованные сущности на соответствующие им типы (города, места, имена и другие) и исправить опечатки. Но эти преобразования борются за небольшие проценты качества — основной вклад вносят алгоритмы эмбеддингов и классификации.

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


Источник: m.vk.com

Комментарии: