Connect with us

Разработка

Железная логика: как алгоритмы принимают решения

Как машины познают мир и отвечают на человеческие вопросы, рассказывает Альфия Бабий, аналитик текстовых данных в Redmadrobot.

Redmadrobot

Опубликовано

/

     
     

Умные машины

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

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

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

Алгоритмические способности

Машинное обучение — это любой алгоритм, который позволяет переложить человеческую экспертизу в принятии решений.

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

Существует 4 основные задачи машинного обучения: классификация, кластеризация, регрессия и понижение размерности. Но есть и более специфические: оценка плотности и детектирование аномалий, обучение с подкреплением.

Наша предметная область — обработка обращений пользователей службой поддержки. В чате мы решаем задачу классификации: предсказываем класс обращения пользователя. Для этого чаще всего используем алгоритм Support Vector Machine.

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

Например, мы анализируем обращения в службу поддержки авиакомпании. Мы делаем разметку и обозначаем, что сообщение «как мне перевезти кота?» относится к классу «Перевозка животных», а «как мне перевезти сноуборд» — «Перевоз сложного багажа», и ставим метки классов. Так появляется разметка.

Все обращения мы описываем в виде числовых векторов — последовательностей чисел, которые представляют текст обращения. Все векторы распределены по группам, например, сообщения о перевозке животных: собак, кошек, попугаев, питонов. Для каждой группы обращений мы находим векторы границ — они становятся опорными для группы. Когда приходит новое обращение: «как мне получить мили?», оно также переводится в векторный вид и кладется в наше пространство признаков, где алгоритм сравнивает расстояние от каждого опорного вектора до нового. Так система понимает, что новое сообщение ближе всего к группе «Бонусы и скидки», и пользователю нужно выдать автоматический ответ, который был заложен разработчиками для этого класса.

Классов может быть достаточно много, но чем больше групп ответов и вопросов, тем выше вероятность того, что модель ошибется, поскольку одни и те же вещи можно объяснить разными словами. Поэтому, когда система выдает автоматический ответ, мы спрашиваем пользователя: «Был ли вам полезен этот ответ?», и если нет — сразу переводим его на оператора.

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

Так же алгоритм может давать подсказки оператору на основе истории обращений и ответов. У нас есть пары вопрос-ответ, и при появлении нового обращения система сопоставит его с имеющимися векторами и предложит оператору возможные ответы с некоторой долей вероятности. Модель говорит: «на похожий вопрос ваши коллеги отвечали вот так» — и показывает текст. Соответственно оператор не вводит одно и то же каждый раз, а просто нажимает на кнопку, и текст отправляется.

Пользователи чаще всего не говорят напрямую: «как мне перевезти собаку?» Они пишут: «Знаете, моя Мусечка всегда блюет в аэропорту, что мне сделать, чтобы не сдавать ее в багажное отделение?» Но все же люди пишут похоже, и если есть достаточно большая размеченная выборка данных, алгоритм понимает, что в сообщении «что сделать, чтобы Жорик мог лететь в салоне?», Жорик — это собака.

Минимум данных

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

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

Например, если у нас есть группа людей, которые получают 5 тыс рублей, а есть те, кто получает миллиард рублей, чтобы система могла их сравнить, дата-сайентист берет логарифм от их дохода.

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

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

У системы нет знания о реальном мире, она просто говорит: вот, я не знаю, что с этим делать. И ты ей помогаешь и рассказываешь, что новый класс — это, например, полеты в Антарктику. В этом задача дата-сайентиста — говорить модели, как устроен реальный мир.

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

Система понимает, и узнает в новых данных полеты и собак. Это прикольно, потому что модель, как маленький ребенок, которому ты говоришь: это вот так устроено, а это — так, и она учится. Такие виртуальные дети.

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Новости

Интересные материалы: 17.07

В нашей новой подборке визуальный калькулятор, проблемные A/B-тесты и сравнение гибридов.

AppTractor

Опубликовано

/

Автор:

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Комментарии
Продолжить чтение

Медиа

Podlodka #68: Rust

Является ли Rust убийцей С++? Смогут ли мобильные разработчики писать на нём кроссплатформенные библиотеки? Что лучше – Rust или Go? Созрел ли Rust для того, чтобы использоваться в продакшене?

AppTractor

Опубликовано

/

Автор:

Podlodka

Podlodka за фундаментальный подход, и чтобы найти ответы на эти холиварные вопросы мы вместе с энтузиастом Rust Степаном Кольцовым основательно обсудили различные аспекты этого языка программирования. Историческая справка, ключевые фичи языка и его недостатки, особенности синтаксиса, экосистема Rust, возможности его применения во фронтеде и мобильной разработке — благодаря опыту гостя выпуск получился максимально емким и информативным.

Комментарии
Продолжить чтение

Разработка

Дневники разработчиков: Snek Fite — «змейка» с непрямым управлением

Привет, меня зовут Михаил, я разработчик и вообще не занимаюсь приложениями-играми. Snek Fite — это первый опыт (ну, вернее, первый удачный: проект находится в играбельном состоянии и количество игроков понемногу растет).

AppTractor

Опубликовано

/

Автор:

Итак, браузерная игра Snek Fite. С одной стороны, это действительно игра — по клетчатому полю движутся разноцветные змеи, пытаясь укусить друг друга за хвост. Кто стал самым длинным к концу последнего хода — того и тапочки.

Геймплей выглядит так:

С другой стороны, это симуляция программирования. Такая, где не нужно непосредственно писать код, но обучать свою змею придется — в игре нет прямого управления змейкой с клавиатуры, мышки или любого другого контроллера. Вместо этого — экран настроек, который вызывает умиление у любого человека, который пробовал делать свою игру в конструкторе со сценарным программированием (типа Scirra Construct 2, RPG Maker, да хоть Aurora Toolset).

Так выглядит экран настройки змеи. Девять полей, объекты, которые можно расставить по полю, логические операторы (must, must not и optional). Программирование для тех, кто не умеет писать код.

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

А вот такой сложный паттерн (занимает три поля) дает команду твоей змее преследовать чужой хвост, если тот находится на расстоянии максимум в две пустых клетки от головы твоей рептилии.

В общем, это далеко не развлекуха с мобилочки на вечер. По крайней мере, для большинства. Snek Fite — игра по-своему хардкорная, и затягивает избранных. Зато если затянула — то можно стать таким, как наш игрок с никнеймами Zerro/Undefined (у него две змеи). Он сделал иллюстрированное руководство, где разобрал поведение змей, выигрышные тактики, частые вопросы и сделал много другой полезной работы. Руководство на английском.

Сейчас его змеи на первом и втором месте общего топа:

В игре сейчас есть три игровых режима — это Дуэль, Снейкоцид и Батл-рояль. В первом две змеи соревнуются друг с другом, во втором четыре, в третьем сразу девять.

Игра всегда заканчивается по истечении 1000 ходов. То есть примерно за минуту.

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

Игра — идейный наследник классической Snake Battle, которую российская компания Gamos выпустила в 1992. Геймплей был схожим, только онлайн-баталий не было — всё-таки это была эра MS-DOS и флоппи-дисководов.

Геймплей старой игры:

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

Монетизации в игре практически нет, играть можно бесплатно. Исключение — PRO-статус для совсем уж упоротых программистов, которые хотят заниматься нейросетями и машинным обучением (да, нейросеть может управлять змеей и корректировать модель ее поведения по ходу обучения).

В общем, если заинтересовал опыт — то пишите в комментариях, о чем хотелось бы почитать (матчмейкинг, разработка на VUE, организация базы данных для игры, выигрышные тактики, опыт продвижения или что-то еще). Сама игра живет по адресу snek.app.

Комментарии
Продолжить чтение

Медиа

Руководство по ориентированному на пользователя проектированию

Ориентированное на пользователя проектирование (User-Centered Design) – далеко не новая концепция.  Это стратегия проектирования и процесс, в котором потребностям, желаниям и ограничениям конечных пользователей продукта уделяется обширное внимание на каждой стадии процесса проектирования.

AppTractor

Опубликовано

/

Автор:

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

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

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

Скачать ее можно на сайте: https://www.appsee.com/ebooks/the-playbook-of-user-centered-app-making.

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.