Привет!
Меня зовут Калмыкова Надежда, я - Data Scientist в ПГК Диджитал. В блоге ПГК мои коллеги уже не раз делились тем, как мы разрабатываем цифровые продукты, аналогов которым нет в сфере железнодорожной логистики. Я работаю в отделе прототипирования и помогаю исследовать возможности реализации различных идей, прежде чем они станут полноценными продуктами или проектами и потребуют больших ресурсов. Сегодня хочу рассказать о не самой очевидной для промышленности задаче - поиске голосового решения для проведения инвентаризации.
Будет две статьи по этой теме, в первой я опишу детали задачи и особенности технологического процесса. Во второй поделюсь этапами решения и полученными результатами.
Мы реализовали нашу первую версию и используем эту задачу для одного из треков грядущего хакатона ПГК Диджитал – HackWagon22. Поэтому лучшие практики его участников станут приятным дополнением к нашим идеям для решения задачи во второй части статьи.
Актуальность задачи
Любая компания, даже небольшая, регулярно сталкивается с задачей инвентаризации - как минимум, мебели и техники в офисе. А промышленные компании проводят еще инвентаризацию дорогостоящего оборудования и деталей. И если инвентаризация офисной техники проходит в теплом помещении (хотя и не всегда с комфортом - номера могут быть наклеены в неочевидных местах), то инвентаризация в «полях» может стать настоящим испытанием - дождь, снег, сбивающий с ног ветер, опасность нападения медведя. И ПГК здесь не исключение - как крупнейший оператор грузового парка, в управлении которого - около 100 тысяч вагонов, компания хранит вагонные детали на большом количестве складов в разных уголках страны, чтобы быть готовой своевременно обслуживать парк. Для точного понимания, что, сколько и где у нас есть, мы регулярно проводим инвентаризацию.
Итак, что такое инвентаризация в цифрах? Это почти 500 складов с более, чем 400 тыс. деталей (четверть из них пронумерована, остальные - без номера). Общая стоимость этих деталей - порядка 6,5 млрд руб. Каждый склад представляет собой открытое пространство, где хранятся детали не только ПГК, но и других собственников. Ежегодно осенью в течение нескольких месяцев проводится опись этих деталей. На каждом складе несколько сотрудников осматривают детали, определяют технические характеристики, ведут запись результатов осмотра. Далее результаты сверяются с учетными данными и здесь важно, чтобы все сошлось. Инвентаризация позволяет выявить утрату, и на основании этого вести претензионную работу, планировать ремонты вагонов и закупку запасных частей.
Учитывая количество складов и деталей, процесс, очевидно, трудоемкий. Еще одна проблема при инвентаризации – поиск деталей. Они могут быть упорядоченно разложены на площадках длительного хранения, а могут быть задействованы в производстве, находиться в ремонтном цехе, грузиться для перемещения в другие цеха или депо. Ходить с папкой и вручную вписывать номер и завод детали в отчет, как это происходит обычно - задачка не из простых, которая требует много ресурсов. Сотрудники вынуждены проводить опись в группах по несколько человек - чтобы добраться до заводского номера боковой рамы, например, нужно проделать сложные манипуляции - раскрутить 4 гайки и открыть коробку, а затем все вернуть к первоначальному виду. Держа в руках папку с бумагами, это не сделать, поэтому, если сотрудников двое, один добирается до необходимых данных, а второй записывает. Учитывая все это при выборе решения, мы понимали, что собирать данные с помощью фотографий для данного процесса не удобно - для фото нужны свободные руки.
Так возникла идея записывать голосом на диктофон описание детали, и формировать отчет на основе расшифровки этой записи. С диктофоном процесс идет легче и быстрее, но записи получаются долгими (ведь если включать запись возле каждой детали и ставить на паузу, закончив ее описание, руки тоже будут заняты, а мы хотим максимально их освободить – так что запись включается в начале ряда и не выключается до конца).
Таким образом, постановка задачи:
Имеется аудиозапись сотрудника, проводящего инвентаризацию с описанием характеристик деталей. Запись ведется на диктофон обычного смартфона, в обычных условиях работы склада. Продолжительность записи может достигать часа (чтобы сотрудник, не прерываясь, мог пройти ряд с деталями целиком и ничего не пропустить), для каждой пронумерованной детали фиксируются: номер, завод изготовитель, год выпуска и комментарий – например: «брак».
Задача заключается в том, чтобы из полученного аудиофайла извлечь необходимую информацию, относящуюся непосредственно к характеристикам детали и заполнить установленную форму отчета с минимальными потерями. Результатом решения должна быть Excel табличка, где каждому предмету ставится в соответствие номер, завод-изготовитель, год изготовления и комментарий.
Критерием оценки качества будет доля правильных ответов. Причем важно отметить, что за правильное распознавание будет приниматься целиком вся строка, описывающая одну деталь. Частичное распознавание будет оцениваться как неверное.
Деталь |
Номер детали |
Завод |
Год |
Комментарий |
Боковая рама |
13246 |
5 |
1998 |
|
Колесная пара |
324951 |
33 |
2007 |
Брак |
Надрессорная балка |
4952 |
14 |
2000 |
|
Предварительная работа с данными
Первые «подходы к снаряду» были на искусственных аудиозаписях - мы попросили коллег сымитировать процесс, находясь в офисе. Звучит довольно оптимистично, ведь помимо промышленных шумов, которые часто присутствуют на складах, сильно влияет человеческий фактор - тут сотрудник отвлекся, здесь остановился поболтать с коллегой, а потом негодует, что номер плохо различим. А в наших аудио очень четко и в тихом помещении пользователь читал отчет. Неудивительно, что с такими исходными данными, задача свелась к тому, чтобы добавить обработку специфической лексики (например, надрессорная балка) и разнести информацию по нужным полям.
Но получив первые "реальные" аудио, мы столкнулись с проблемами - большая часть аудио состояла из шума, за которым порой не слышно голоса. Свистит ветер, слышно жужжание станков, лязг и грохот каких-то деталей, движение поездов. Близко к записывающему сотруднику может оказаться его коллега, который решит что-то обсудить, перекрикивая все вокруг - и этот голос неизбежно оказывается на записи. Кроме того, нередко запись содержала эмоциональные комментарии и критику в адрес завода, который сделал такую кривую деталь. Тогда нам пришлось развивать свою готовность идти на компромисс. Сошлись на том, что главное в задаче - получить правильные значения числовых полей отчетов, а с остальным - будем разбираться.
Естественные шумы на разных частотах, посторонняя речь и разная последовательность описания деталей внесли путаницу, поэтому мы написали четкую инструкцию для пользователей, которые делают запись, где прописали кодовые слова "Номер", “Год”, “Завод” и "Комментарий", для перехода к следующему объекту - “Следующий”, а так же поставили условие на то, чтобы значение поля шло после его наименования ("год девяносто восьмой", а не "девяносто восьмой год", в противном случае описание правил разнесения значений по столбцам могло сломаться всплывшей в разговоре не о детали цифрой).
Спойлер: порой ее соблюдали не идеально, но бОльшую часть проблем с формированием отчета это решило.
Затем мы составили список вариантов, как можно разными словами назвать одну и ту же сущность (например, “рама боковая” aka “БР”, aka “рама”, aka “РБ”). Комментарии к деталям тоже ограничили конечным количеством вариантов из одного-двух слов. Кроме того, стоит иметь в виду, что железнодорожные термины являются чем-то экзотичным и почти всегда распознаются совсем непохоже. Однако, нам повезло, что у нас есть список уникальных деталей, которые могут встретиться на складах.
Таким образом, мы постарались максимально упорядочить и формализовать процесс, чтобы исходный материал давал нам возможность получить хороший отчет.
Заключение
В этой статье описана идея голосовой инвентаризации деталей вагонов ПГК, актуальность такого помощника и сложности, с которыми мы столкнулись в начале работы над ним. Мы надеемся, что участникам HackWagon22 будет интересно попробовать свои силы в решении такой нетипичной для отрасли задачи и приложить руку к цифровизации логистики.
Присоединяйтесь к нашему хакатону и, возможно, в следующей части статьи с лучшими идеями и результатами мы поделимся именно вашим решением!