Как мы создали нейросеть, которая составила рейтинг компаний, занимающихся ИИ в России
Всем привет! Меня зовут Саша, я тимлид в DS-команде дирекции по искусственному интеллекту и цифровым продуктам билайн бизнес, и хочу рассказать вам, как мы создали рейтинг компаний, которые занимаются искусственным интеллектом. Публикация рейтинга не преследует какие-либо коммерческие цели и не направлена на продвижение каких-либо компаний или услуг.
Идея проекта
Откуда вообще может появиться идея? Иногда она просто витает в воздухе и ждёт, пока её кто-нибудь подхватит. Честно говоря, мне бы никогда в голову не пришло отранжировать компании по их влиянию в сфере ИИ. Но ребята из нашего PR-отдела оказались более прозорливыми и пришли к нам с запросом о создании такого рейтинга. Забегая вперед, можно подчеркнуть, что весь проект сам по себе стал прецедентом с точки зрения взаимодействия представителей PR и специалистов по машинному обучению и анализу данных.
На каком языке они говорят?
Основной сложностью в любой задаче, как мне кажется, является перевод запроса бизнеса в техническую плоскость. В данном случае мы столкнулись именно с этим. Согласитесь, что фраза “создайте искусственный интеллект, который оценивает искусственный интеллект” звучит довольно абстрактно и тем самым вызывает много вопросов. Если немного поработать над формулировкой, то можно получить что-то вроде “создайте модель машинного обучения, которая могла бы отранжировать компании, которые занимаются выполнением задач, связанных с машинным обучением и ИИ”. Уже лучше, но всё равно звучит довольно громоздко. Отсечём всё лишнее и добавим еще щепотку технической экспертизы: “создайте ранжирующую модель для компаний, которые занимаются выполнением задач, связанных с машинным обучением и ИИ”. Такую модель, со всеми особенностями обработки данных, формирования признаков и постобработки результатов и будем называть рейтинговой системой.
После начального этапа формализации бизнес-запроса, как правило, наступает период с довольно высокой степенью неопределенности. Предстоит сформулировать для самих себя множество вопросов и получить на них ответы, что является ещё более сложной задачей. В данном случае базовых вопросов возникло три:
Какие объекты мы ранжируем?
Какие данные мы используем для ранжирования?
Что мы используем в качестве целевой переменной для ранжирования?
По этим вопросам уже видно, что в задаче изначально отсутствуют основные элементы для построения модели машинного обучения, и самое главное — отсутствует обучающая выборка. Таким образом, на начальном этапе нам было необходимо определить способ получения данных элементов.
Определение списка компаний
На самом деле, это самый простой пункт из представленных. За основу мы взяли список российских компаний, заявляющих о работе с искусственном интеллектом на рынке, согласно данным из открытых источников. В конечном итоге полученный список пришлось незначительно отредактировать. В основном это было связано с тем, что мы отсекали компании, которые основную деятельность ведут за рубежом (пусть и имеют представительство в РФ), а также группировали компании в одну, если они были тесно связаны (из ярких примеров – Сколково и СколТех). В дальнейшем нам придёт повторить аналогичную операцию в контексте работы с текстами новостей.
Выбор источника данных
Хорошо, у нас получилось определить список компаний, которые мы хотели бы видеть в рейтинге. Что с ними делать дальше? Правильно, собирать данные. Но какие? В данной задаче мы изначально предположили следующую структуру: есть номинации, внутри которых мы будем ранжировать компании, и есть категории в этих номинациях. По сути, это и будут признаки в нашей итоговой модели. При этом итоговый список категорий внутри номинаций может сильно отличаться от исходного, так как изначально у нас нет понимания, какая именно информация может быть в источниках.
Кстати, об источниках. Для тех номинаций, которые мы определили с коллегами изначально, основным источником данных можно предложить открытые источники, а именно публикации различных СМИ. Например, новости типа “Компания X купила компанию Y, которая занимается искусственным интеллектом” или “Компания X инвестировала 200 млн в разработку искусственного интеллекта” вполне можно назвать релевантными для компании X. То есть в конечном итоге нам нужны новости, которые
попадают под тематику искусственного интеллекта и машинного обучения
относятся к компаниям из нашего списка
позволяют выделить информацию для заполнения категорий в номинациях
Схематично это можно представить следующим образом:
Эти условия можно воспринимать как последовательные фильтры для общего скоупа новостей, представленных в интернете. Основная проблема в данном случае заключается в том, что в СМИ может в целом не быть таких новостей или может использоваться огромное количество различных формулировок для обозначения события (например, покупки компании). В связи с этим важную роль сыграют предобработка используемых текстов, их постанализ и валидация. Об этом поговорим подробнее в дальнейшем. Что же касается формирования таблицы с новостями по тематике ИИ, мы попробовали самостоятельно распарсить некоторые новостные источники (Яндекс.дзен, habr.com, vc.ru, tadviser.ru), но это закончилось провалом. Относительно потраченного времени на написание отдельного парсера для каждого источника выхлоп в плане количества и качества данных был практически нулевым. Таким образом, явно образовалась необходимость использования готовой системы для сбора таких данных.
По итогу нашим основным партнёром и поставщиком данных стала компания Brand Analytics. Это российская IT-компания и разработчик одноимённой системы мониторинга и анализа социальных медиа и СМИ. Мы обсуждали с коллегами несколько способов взаимодействия и остановились на том, что они будут передавать нам новости, связанные с тематикой ИИ и машинного обучения. В целом, именно эти данные во многом и стали залогом успеха решения исходной задачи.
Целевая переменная
Итак, на данном этапе у нас есть список компаний и таблица с новостями, которые относятся к тематике ИИ и машинного обучения. Осталось определить ключевой элемент – целевую переменную для ранжирования. На самом деле, это задача крайне нетривиальная. В информационном поле нет данных о том, что какая-то компания “лучше” другой в общем смысле. Есть только объективная информация, такая как прибыль компаний, по которой их можно ранжировать. Но что, если использовать линейную комбинацию признаков на основе такой объективной информации? То есть, учитывая позицию компаний по каждому из отдельных показателей, получить рейтинг компании в общем по “номинации”. Основным вопросом в данном случае является определение важности каждой конкретной категории. Для этого можно использовать оценки экспертов и специалистов в той или иной области или как вариант считать все категории равноценно значимыми. Мы использовали первый подход, основываясь на опыте специалистов билайн, так как хотели в том числе опереться и на экспертизу профессионального сообщества. После получения данной информации обучение итоговой модели не составило больших проблем.
Однако обо всём по порядку.
Тексты, тексты, тексты
Работа с текстовой информацией – довольно хорошо исследованная область анализа данных (NLP). Есть множество пайплайнов и моделей, которые позволяют решать различные задачи с таким типом данных. Поскольку построение системы требовало быстрого и легковесного решения, мы захотели реализовать следующие этапы:
удаление стоп-слов и лишних символов из текстов
приведение слов в текстах к начальной форме
определение текстов, похожих друг на друга
удаление текстов, близких к другим
Всё это нужно было для того, чтобы получить тексты в виде, более пригодном для обработки. Основные python-библиотеки, который мы использовали: re (для работы с регулярными выражениями), pymorhy2 (для приведения слов к начальной форме) и gensim (для построения матрицы близости преобразованных с помощью алгоритма tf-idf текстов).
Поскольку мы знаем, что полученные от коллег новости точно относятся к исследуемой тематике, нам остаётся только определить, есть ли в новости упоминание какой-либо компании, а также её принадлежность к категории в номинации. Для предобработанных текстов это не является сложной задачей, так как для компаний можно проверять их вхождение в строку (с учётом различных вариантов названия, о чём мы говорили ранее), а принадлежность категории — через ключевые слова и близкие к ним для категории.
Получение признаков
После определения данной принадлежности можно начинать формировать признаки для ранжирующей модели. Для этого мы использовали регулярные выражения, позволяющие автоматически выделить информативные части текстов, такие как суммы, количества и факты различных событий. В конечном итоге были получены таблицы следующего вида:
Более полную версию таблиц по каждой номинации можно посмотреть на сайте рейтинга. Наиболее интересным признаком можно назвать количество сфер, в которых представлена та или иная компания, так как для его формирования мы построили отдельную модель кластеризации текстов по тематикам (в данном случае тематика соотносилась со сферой деятельности). При этом, как видно из архитектуры формирования признаков, в дальнейшем мы будем сильно завязаны на тех данных, которые сами генерируем из исходных новостей.
Следовательно, отдельным важным процессом является валидация полученных данных. Основной вопрос, который при этом возникает – как мы получили данное значение признака? Очевидно, что здесь не обойтись без ручного аналитического разбора. Для этого мы реализовали отдельные функции, с помощью которых в рамках категории в номинации и конкретной компании можно было бы наглядно показать, какие именно тексты новостей были использованы для получения конкретного значения признака.
Формирование итогового рейтинга
Как уже было отмечено ранее, при наличии основных элементов построение модели машинного обучения не составило больших проблем. Признаки были предварительно масштабированы в виду особенности их распределения, особенно в категориях, связанных с суммами. Изначальные веса, которые мы получили на этапе сбора информации от экспертов, отдельно масштабировать не пришлось, так как они были сформированы в небольшом промежутке значений (от 0 до 2). Таким образом, для каждой номинации формируется своя линейная модель, которая по входу (значениям категорий в номинации) выдаёт для компании некоторое число, которое и используется как итог для рейтинга. Для удобства все выходы моделей для компаний также были масштабированы (в смысле рейтинга как итога удобно воспринимать числа в некотором более понятном аудитории диапазоне, например, от 0 до 100). Собственно, на этом всё. Для каждой из категорий сформирован свой рейтинг, который в дальнейшем можно использовать как вход для обобщенного рейтинга компаний.
Все описанные ранее этапы можно представить следующей схемой:
Куда мы движемся?
При решении таких непростых задач как построение рейтинговой системы приходится сознательно упрощать некоторые реализуемые элементы или даже жертвовать ими. В противном случае разработка может затянуться до бесконечности. Поэтому многие алгоритмы и идеи попали в бэклог доработок на следующий год. В частности, мы планируем поработать над использованием более продвинутых алгоритмов текстового поиска, созданием алгоритма поиска компаний из новостей, а также расширением списка номинаций и категорий в них. Последняя доработка стала более актуальна после получения нами обратной связи по опубликованному рейтингу.
Обратная связь по итогам публикации
После публикации рейтинга мы получили обширную обратную связь как от технических специалистов, так и от компаний, попавших в рейтинг. В целом, было очень много вопросов по методологии, которая приведена на сайте проекта (и обозревается в данной статье), а также вопросов о позициях компании в рейтинге или даже непопадании в него.
Отдельно стоит отметить, что рейтинг получил хороший охват (аудитория около 100 млн в СМИ и реальные просмотры около 1 млн в Телеграме) и в основном положительную реакцию в медиа. При этом большая часть критики касалась непосредственно собранных показателей, что во многом можно оправдать выбором источника данных. То есть если какой-то показатель, по мнению компании, определён некорректно, это может быть связано с тем, какая информация по данной компании попала в открытые источники. Иные возражения мы отработали и обязательно учтём при составлении рейтинга в следующем году.
Эпилог
Довольно нечасто приходится работать над проектом, который действительно мог бы оказать влияние на развитие искусственного интеллекта в смысле масс-медиа. Высокая степень неопределённости, непонятная структура проекта, отсутствие источников данных – всё это могло стать ключевыми факторами, препятствующими реализации задумок наших энтузиастов из PR. Но всегда радует, когда на стыке разных экспертиз получается построить необычную и работающую систему. Схожих проектов мы пока что не встречали, но есть надежда, что их может появиться больше, в частности с более глубокой и конкретной спецификой. Также хочется поблагодарить команду, которая трудилась над тем, чтобы всё задуманное стало реальность.