Умные машины и их обучение. Применяем искусственный интеллект на реальных задачах бизнеса

Публикация № 1210698 16.03.20

Разработка - Идеи и тренды в разработке

Анализ данных и машинное обучение стремительно входят в нашу жизнь. Как решать ежедневные задачи специалиста 1С с помощью технологий машинного обучения на конференции Infostart Event 2019 Inception рассказал разработчик в группе рекомендаций Яндекс.Маркет Владимир Бондаревский.

Добрый день! Меня зовут Владимир Бондаревский, я работаю в Яндекс.Маркете, занимаюсь разработкой рекомендательных систем.

 

О себе и Яндекс.Маркете

 

 

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

С 2017 года работаю в Яндекс.Маркете, занимаюсь разработкой рекомендательных систем.

 

 

Думаю, не нужно рассказывать, что такое Яндекс.Маркет. Это, наверное, все знают.

Немного цифр:

  • это сотни миллионов предложений от магазинов;
  • более 2 миллионов пользователей в день;
  • 30 миллионов уникальных наименований товаров.

В таком объеме информации очень трудно найти что-то нужное для пользователя. Единственная надежда – на поиск и на рекомендации.

 

Рекомендации в Яндекс.Маркете

 

 

Так как я занимаюсь рекомендациями, расскажу пару слов об этом.

Даже самые простые рекомендации увеличивают продажи.

Мы делаем персональные рекомендации, то есть рекомендации, которые учитывают интересы пользователей, историю посещения ими сайтов и очень много всякой информации.

 

 

Также делаем рекомендации, которые можно порекомендовать какому-то определенному товару – например, при просмотре iPhone мы предлагаем купить к нему защитное стекло, чехол и что-то вроде этого.

В Яндекс.Маркете мы используем машинное обучение практически для всего:

  • для ранжирования поисковой выдачи;
  • для ранжирования товаров в категориях;
  • для рекомендаций;
  • для поиска похожих картинок;
  • для поиска картинок по смыслу;
  • для кластеризации одинаковых предложений от магазинов в одну карточку товара;
  • для прогнозирования спроса;
  • оптимизации рекламы и многого другого.

Если где-то в Яндекс.Маркете еще не используется машинное обучение – значит, просто руки еще не дошли.

И сегодня я как раз и хочу немного увести вас в тему машинного обучения, рассказать про то, как можно начать использовать его в своих задачах. Возможно, после моего доклада кто-то заинтересуется, и в мире 1С тоже что-то появится. Сейчас область интеграции машинного обучения и 1С достаточно свободная – бери и делай.

 

Искусственный интеллект vs Машинное обучение vs Нейросети vs Глубокое обучение

Наверное, многие из вас слышали фразы «Искусственный интеллект будет помогать прогнозировать затраты в ERP», «Нейросети обыграли человека в игру Го» и т.п. Так в чем же разница между этими понятиями?

 

 

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

В профессиональной среде используется термин «Машинное обучение», Machine Learning, просто ML.

 

 

Давайте разберемся:

  • Искусственный интеллект – это область, которая занимается машинным обучением, такая же, как биология, химия, физика. Почему-то никто не говорит: «используя химию, мы что-то сделаем».
  • Машинное обучение – это один из разделов искусственного интеллекта. Один, но при этом не единственный. Есть еще, например, экспертные системы и много-много других.
  • Нейросети – это один из алгоритмов машинного обучения. Популярный, но есть и не хуже.
  • Глубокое обучение – это архитектура сетей и подход к обучению. По факту, мало кто различает глубокие и неглубокие сети. Просто говорят – сеть такая-то, архитектура такая-то.

 

 

На этой картинке хорошо видно, как это все взаимосвязано.

Тут приведена ссылка https://vas3k.ru/blog/machine_learning/, очень рекомендую пройти по ней и прочитать статью про основы машинного обучения – доступным языком, очень легко читается.

 

Машинное обучение

 

 

Так, собственно, что такое машинное обучение?

Для начала рассмотрим, как решаются задачи в традиционном программировании.

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

 

 

Допустим, у нас есть задача научиться определять вид активности человека в конкретный момент времени. Например, он носит фитнес-трекер, мы хотим знать, что в конкретный момент человек делает.

  • Мы пишем условие – если скорость меньше 4, значит, это ходьба.
  • Потом человек побежал, и мы добавляем ветку условия, которая тоже ориентируется на скорость.
  • Потом наш человечек стал женщиной, сел на велосипед и поехал. Мы тоже хотим научиться понимать, что он едет на велосипеде – казалось бы, тут тоже все просто, добавили еще одну ветку.
  • А потом человек снова стал мужчиной и полез в воду. Вроде он плывет, скорость у него что-то между ходьбой и бегом. При этом нагрузка гораздо сильнее. Как такую задачу решать? Сразу непонятно.

Причем, здесь в условии идет ориентир на скорость, а в реальности-то нет такого значения. Есть какие-то параметры с датчиков типа гироскопа, акселерометра, датчика температуры кожи и т.д. – много разных цифр, получаемых с этих датчиков.

 

 

В этом случае нам как раз приходит на помощь машинное обучение.

  • Мы берем все наши данные с датчиков и размечаем их конкретным видом деятельности.
  • Мы смотрим на человека, видим, что он делает, и проставляем метки для наших показаний. В итоге у нас получается какой-то набор данных.
  • Берем алгоритм машинного обучения и подаем ему на вход эти данные, чтобы он выработал какие-то паттерны – извлек правила из данных и ответов.
  • И на выходе мы получаем какую-то систему, которая сама обучилась, нашла правила, закономерности. И мы можем ее использовать на новых данных, чтобы получать ответы.

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

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

 

 

Главные вещи, на которых базируется машинное обучение – это:

  • данные:
    • как правило, чем больше данных, тем лучше.
    • главное, чтобы данные были хорошими – если мы на вход будем подавать мусор, мы и на выходе получим мусор.
  • признаки. Это некие независимые переменные, по которым мы будем предсказывать целевое значение. Это могут быть:
    • пиксели в картинке;
    • слова в тексте;
    • числа – например, обороты с контрагентами и пр.
  • и самое главное – это алгоритмы. Под разные задачи – разные алгоритмы. Не существует какого-то одного универсального алгоритма, который решил бы все задачи – взяли бы нейросеть, и она нам все смогла бы сделать. Под каждую конкретную задачу какие-то алгоритмы подходят лучше, какие-то – хуже. Какие-то работы в направлении того, чтобы сама нейросеть умела выбирать нужные алгоритмы для задачи, ведутся, но пока ничего хорошего нет.

 

Данные

 

 

Немного подробнее про данные.

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

 

 

Данные бывают в виде текста – сообщения, описания товаров, отзывы, комментарии и др.

 

 

Это тоже данные – картинки, видео, спектрограммы звука и пр.

 

Признаки

 

 

Немного про признаки.

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

Например, мы хотим научить систему определять по письмам, спам это или не спам. У нас есть огромный исходный массив писем, которые наш человек проанализировал и сформировал признаки спама – это, как правило:

  • много капслока;
  • какие-то слова «Увеличить до 25 см», «Вы выиграли миллион долларов»;
  • большое количество вхождений символа доллара в тексте письма и т.д.

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

 

 

Но есть и другой способ – мы можем взять те же письма, разделить их на слова или даже на отдельные символы и подать это на вход нейросети. И пусть она сама найдет какие-то паттерны, которые будут говорить, спам в письме или нет.

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

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

 

Алгоритмы

 

 

Теперь – самое главное, алгоритмы.

Как я уже говорил, не существует какого-то единого, универсального алгоритма, который подошел бы под все задачи. Нейросети – это круто, модно, но они – не единственные. И они не всегда работают хорошо.

  • Если у нас данные простые, какие-то линейные зависимости – берем линейную регрессию. Она обучается мгновенно, результат тоже выдает очень быстро. Много где используется в силу своей простоты. Казалось бы, это – прошлый век (по сути, регрессия идет из 18 века). Но по факту – очень хороший алгоритм.
  • Если у нас появляются какие-то нелинейные зависимости, мы берем деревья, ансамбли деревьев (случайные леса, градиентный бустинг поверх деревьев – главный конкурент нейросетей и т.п.).
  • А если данных у нас очень много (миллионы примеров), а еще данные какие-то непонятные (признаки неочевидны), мы берем нейросети. И, как правило, это работает.

 

 

Опять же, я уже приводил ссылку https://vas3k.ru/blog/machine_learning/, там хорошо показано, какие бывают виды машинного обучения. Советую прочитать эту статью.

 

 

А вот такой ужас у нас с нейросетями.

Наверное, многие знают, что такое перцептрон, видели его классическую схему – вход, скрытые слои, выход. Но мир не стоит на месте, на слайде показаны даже не все архитектуры, которые сейчас есть. Это какое-то подмножество. Можно зайти по ссылке https://www.asimovinstitute.org/neural-network-zoo/ и там изучить подробнее.

 

Процесс обучения нейросети

 

 

Расскажу немного про процесс, как мы обучаем.

  • Формулируем задачу, проверяем ее адекватность и возможность реализации. Как можно быстро приближенно проверить адекватность? Если посадить человека и дать ему эту задачу, и он сможет, не задумываясь, ее решить за одну секунду, то, скорее всего, машинное обучение с этим тоже справится. И, как правило, оно потом будет делать это лучше, чем человек. И не уставать.
  • В зависимости от задачи смотрим, есть ли у нас данные. Если нет – начинаем собирать. Либо где-то приобретаем.
  • Данные нужно подготовить, убрать пропуски и преобразовать в какой-то структурированный вид.
  • Дальше мы трансформируем наши данные. Практически все алгоритмы не умеют работать с данными и с текстом в прямом виде – необходимо преобразование в числовые значения. Трансформация заключается в том, что мы переводим:
    • тексты – в векторы чисел;
    • картинки – в пиксели;
    • числовые значения приводим к шкале от -1 до 1 (или от 0 до 1).
  • Делим эти данные на две части – тренировочные и тестовые.
  • На тренировочных данных обучаем модель и оцениваем результаты.
  • Если что-то не очень хорошо идет, подкручиваем гиперпараметры. Поясню, что такое гиперпараметры. Если вы вспомните слайд, где был показан нейрон, там были коэффициенты, которые мы умножаем на входящие значения. Во время обучения мы их подстраиваем. Это будут параметры – то, на что мы не можем влиять, оно само формируется в процессе обучения. Это некий «черный ящик». А гиперпараметры – это ручки к этому ящику, мы можем их подкрутить и как-то донастроить сеть в процессе обучения.
  • После того, как мы модель обучили, проверяем ее на тестовых данных. Зачем вообще нужны тестовые данные? Они нужны, чтобы как-то сэмулировать появление новых данных, которых до этого не было, и избежать ситуации, когда при появлении новых данных в продакшен мы получим что-то неработающее. Самое главное – никогда не показывать тестовые данные во время обучения. То есть, мы забыли о них, отложили, получили какую-то модель в ходе обучения, а потом проверяем по тестовым данным.
  • В результате получаем какую-то финальную оценку. Если она адекватная, то можно попробовать выкатить это в прод, посмотреть, как все это будет работать. Если нет, то возвращаемся в самое начало, возможно, даже придется переформулировать задачу, потому что она не реализуема в текущий момент. И так далее – все это в цикле может повторяться.

 

Недостатки встроенных средств для анализа данных в 1С

 

 

Какие средства можно использовать для работы с машинным обучением?

Так как у нас конференция по 1С, то в 1С, вы знаете, есть такой механизм «Анализ данных и прогнозирование», который был в платформе 8.0 с самого начала. Ему 17 лет. За это время он практически ни разу не менялся. Эта такая обнадеживающая штука, которая, по идее, должна работать. Этот механизм даже используется в паре конфигураций – в ERP, например, используются его составляющие (кластеризация и общая статистика).

Из чего состоит механизм «Анализ данных и прогнозирование»:

  • Общая статистика – хорошая штука. Хотя сейчас, в принципе, общую статистику можно заменить механизмом СКД – там как раз добавили ковариации и прочие статистические методы.
  • Кластерный анализ – механизм ограниченного действия, мало где можно применить.
  • Дерево решений – результат, который сейчас выдается этим механизмом, очень плохого качества по сравнению с библиотеками на Python и никак не приближается к ним по качеству даже близко, я проверял.
  • А поиск ассоциаций и поиск последовательностей – это вообще нежизнеспособные штуки, я про них даже говорить не буду.

 

 

Кроме этого, у нас в 1С банально нельзя поделить тренировочные и тестовые данные. В Python я вызову одну функцию, и она мне создаст эти два набора данных. Причем, в параметрах функции можно настроить случайный выбор и поддержку распределения целевой переменной. А в 1С все это надо самому делать.

 

 

А еще мы можем сделать механизм машинного обучения в 1С сами, средствами встроенного языка. Информации, как это реализовать, много, все достаточно просто.

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

Почему? Потому что решение, которое будет на встроенном языке, работает на три порядка медленнее, чем простой цикл на C++. И на четыре порядка медленнее, чем GPU.

 

 

Или мы можем написать на C++ штуку, которая умеет параллелиться, потому что используются в основном какие-то матричные операции, и это все очень хорошо параллелится.

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

 

Готовые решения для работы с машинным обучением

 

 

А сейчас уже есть множество популярных решений, используемых тысячами людей, которые в этом что-то понимают. Надо просто брать готовое решение и решать конкретную бизнес-задачу. А что внутри – воспринимайте это на первом этапе, как просто черный ящик. Какой-то алгоритм, у которого есть какие-то параметры, и это как-то работает. И с этим можно даже успешно жить.

Теперь кратко по этому набору – это все на Python, все бесплатное. По сути, все самое крутое.

  • scikit-learn (https://scikit-learn.org/) – библиотека для машинного обучения, которая реализует классические алгоритмы (деревья, регрессии и прочие штуки). Очень много всяких вспомогательных средств для разбиения данных, кроссвалидации, оценок, метрик и пр.
  • CatBoost (https://yandex.ru/dev/catboost/) – это реализация от Яндекса градиентного бустинга поверх деревьев решений. Эта библиотека совместима с scikit-learn по API. Очень крутая, по сути, в своем классе, лучшая (может быть, для каких-то конкретных задач будут другие победители). Очень активно используется в Яндексе.
  • Pandas (https://pandas.pydata.org/) – это штука для работы с табличными данными. Там можно читать разные форматы, фильтровать, обрабатывать их как-то. Если откинуть в СКД визуальную составляющую, то pandas ее уделывает, как щенка какого-то.
  • numpy (https://numpy.org/) – это библиотека для работы с векторами. По сути, это линейная алгебра. Работает очень быстро, на три порядка быстрее, чем код на 1С
  • jupyter (https://jupyter.org/) – это некая IDE в браузере, в которой очень удобно писать построчно код, сразу видеть какой-то результат, сразу вставлять какие-то картинки, в результат выводить графики – все в одном документе. Очень круто.
  • TensorFlow (https://www.tensorflow.org/) – библиотека от Google для обучения нейросетей.
  • Flask (https://palletsprojects.com/p/flask/) – это некий веб-фреймворк, на котором можно буквально в две строчки взять готовую модель и сделать API, которое можно использовать в 1С.

 

Делаем свой классификатор и дружим его с 1С:Предприятие 8

 

 

Давайте рассмотрим небольшой практический пример. Сделаем свой текстовый классификатор и научим его дружить с 1С.

Задача такая – есть некий набор номенклатур, мы хотим его группировать по номенклатурным группам. Вот у нас категории – «Авто», «Товары для здоровья» и пр.

У меня в Маркете такие данные есть, я их для этого примера взял. А так, вы можете вместо текста номенклатуры взять письма на хотлайн, если они у вас есть. Или можете вместо групп взять, скажем, разделы – «Платформа», «Бухгалтерия предприятия», «Управление торговлей». Или «Срочно» и «Не срочно». То есть, этот пример подходит и для случая, если у нас будут письма или любые другие текстовые данные, которые мы хотим как-то классифицировать.

 

Трансформация данных

Как это все отдать в нейросеть, если она хочет цифры?

Мы пронумеровываем все категории от 1 до 15. Казалось бы, у нас уже есть числа, мы можем их подменить. Но при этом, у нас почему-то последняя категория «Товары для животных» будет иметь номер 15, а категория «Авто» будет иметь номер 1. То есть, мы уже вводим какое-то ранжирование. Почему-то животные у нас приоритетнее. Если мы умножим, то у нас получится какой-то перевес.

 

 

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

То есть, для пятнадцати категорий у нас будет 15 колонок с единичкой в каждой строчке – для соответствующего значения столбика. С этим уже можно работать.

 

 

С текстом сложнее. Текст сначала надо подготовить, а потом преобразовать в векторное преобразование, используя концепцию word2vec. Подробнее о концепции word2vec можно почитать в статье на Хабре https://habr.com/ru/post/446530/ 

 

 

Чтобы подготовить текст, его нужно очистить от цифр и спецсимволов, разбить на слова и построить по этим словам словарь.

 

 

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

 

 

Потом мы подаем на вход этому словарю следующий текст, в который вместо слов подставляем их числовые значения из сформированного словаря.

 

 

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

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

 

 

Такую штуку называют векторным представлением слов. Или чаще можно услышать «текстовые эмбеддинги».

С помощью методов снижения размерности (например, t-SNE, PCA) текстовые эмбеддинги легко визуализировать. Например, на сайте https://projector.tensorflow.org/ можно загрузить получившийся текстовый эмбеддинг, ввести слово и покрутить, посмотреть близкие семантически к нему слова. Там видно, например, «дрель», а рядом с ним «шуруповерт» и прочие близкие по смыслу слова.

 

Обучение модели

 

 

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

Первым делом импортируем библиотеки.

 

 

На строке 14, используя pandas, загружаем данные из файла.

Далее заводим какой-то массив, в котором у нас будут метки, соответствующие категориям товара.

 

 

Разбиваем данные на тренировочные и тестовые. Из интересного:

  • параметр stratify=y означает, что, если у нас эти категории как-то распределены в данных, мы хотим это же распределение сохранить и в тестовой, и в тренировочной выборке;
  • shuffle=True означает, что мы как-то случайно набираем данные из этого набора;
  • test_size=0.3 – это размер тестовой выборки.

С помощью метода to_categorical() мы переводим категории в числа (помните, на первом слайде, где я показывал, что мы для каждой категории делаем столбик и для каждого значения вставляем одну единичку – метод to_categorical() как раз для этого).

 

 

Дальше, задаем гиперпараметры:

  • размер словаря MAX_WORDS;
  • OOV_TOKEN – символ, который мы будем использовать, если слова нет в нашем словаре;
  • MAX_SEQUENCE_LENGTH – размер предложения. Здесь у меня простые гиперпараметры – не больше 10 слов в названии товара, если вам нужно будет заголовки писем классифицировать, там можно 300-400 поставить;
  • Размер вектора EMBEDDING_DIM, как правило, больше 300 не делают;
  • Количество эпох EPOCHS – это сколько раз мы будем прогонять весь набор данных при обучении нейросети;
  • И BATH_SIZE – сколько данных выбирать при обучении.

Все эти гиперпараметры, как правило, нужно настраивать.

 

 

Далее – создаем и обучаем токенизатор.

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

Строка 62 берет наши текстовые строки и по этому словарю переводит в векторы чисел.

Строка 70 – это на тот случай, если у нас максимальная строка – 10 слов, а у нас, скажем, 3, то все остальные 7 слов мы дополняем нулями. Причем можно выбрать – слева или справа дополнять.

 

 

Далее – берем наши тексты, преобразуем в наборы чисел. Получаем вот такие вектора чисел.

 

 

Здесь мы создаем нейросеть. Видите, как просто – пара строчек кода, и у вас есть мощная нейросеть.

Sequential() – это такой режим, когда мы берем слои и в режиме стека сверху складываем новый слой.

  • Здесь главное учесть, что первый слой должен соответствовать нашему входному вектору эмбеддинга (его измерение – это количество наших уникальных слов). Получаем слой с многомерным тензором, размер которого равен размеру эмбеддинга на количество слов в предложении.
  • Дальше создается слой рекуррентной нейросети LSTM – это более продвинутая нейросеть, у которой есть память, и она умеет очень хорошо работать с последовательностями. Например, тексты – это последовательности, когда предыдущие предложения дополняют смысл следующего слова.
  • На следующей строке Dense – это, по сути, наш перцептрон. Мы в нем задаем, что количество выходов будет равным количеству входных классов. Функция активации «softmax» приводит сумму всех значений к единице и, соответственно, тот класс, на выходе у которого будет большее значение – это, по сути, и будет тот класс, который мы хотим получить.

С помощью метода fit мы запускаем обучение нейросети.

Из интересного – я пробовал обучать на массиве из миллиона слов, на моем компьютере нейросеть обучается где-то 4 часа (32 Гб памяти, i7, NVidia видеокарта). Если вы будете писать такое средствами 1С, это будет обучаться от полугода до 4-х лет

 

 

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

 

 

Подробнее об обучении нейросетей можно почитать на Хабре:

 

Веб-сервис классификатора

 

 

Это – API нашего веб-сервиса на flask. Тут в строчке 39 у нас будет некий HTTP-метод predict(), в который мы по POST будем отправлять текст в виде JSON.

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

 

Интегрируем веб-сервис с 1С

 

 

В 1С это выглядит так.

Используется библиотека КоннекторHTTP (//infostart.ru/public/709325/), которую я написал – я за вас уже половину работы сделал.

Вы берете текст, передаете его в метод PostJson() и получаете ответ.

 

 

Вот так это приблизительно выглядит. Видно, что карта памяти – это у нас компьютерная техника с уверенностью практически 100% (от 0 до 1).

Например, если бы я убрал «памяти», убрал «Samsung», она бы все равно предсказывала, что это – компьютерная техника, просто уверенности было бы меньше.

 

 

Например, я пробовал «Сибирская корона светлое 1л», и она уже понимает, что это – пиво.

 

Результат

Этот пример выложен на GitHub https://github.com/vbondarevsky/infostart_event_2019 

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

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

 

 

****************

Данная статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART EVENT 2019.

Больше статей можно прочитать здесь.


 

*************

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. skyboy13 13 19.03.20 20:49 Сейчас в теме
А как поднять веб-сервис на flask. Где посмотреть пример и описание этого процесса?
2. 🅵🅾️🆇 515 24.03.20 11:50 Сейчас в теме
(1) Так в статье это написано, смотри слайд `Веб-сервис классификатора`.
Там функция `predict` с аннотацией `@route('/predict')` - это твой HTTP метод.

На самом деле можешь даже взять что то еще проще, например aiohttp вместо flask.

По сути http сервис поднимается на любом языке с пол пинка.
А тебе всего то надо 1 POST запрос принимать, сделать этакое api к готовой либе и обученной модели (в контексте статьи).
Да и в самой 1С собрать http запрос и сериализация/десериализация в json - пару строчек кода.
4. bonv 1407 24.03.20 13:41 Сейчас в теме
(1) дополню к (2)
- установить python (полно инструкций в Интернете)
- установить Flask
- простой пример для понимания
pavelpribytkin96; Дмитрий74Чел; skyboy13; +3 Ответить
7. skyboy13 13 24.03.20 15:23 Сейчас в теме
3. 🅵🅾️🆇 515 24.03.20 11:52 Сейчас в теме
(0) Большое спасибо за статью, все очень понятно и доступно по верхам разжевано.
Давно в планах выучить линал и разобраться с основами машинного обучения, даже книжечка "грокаем машинное обучение" валяется.
Останавливает наличие других задачек и не любовь к пистону)
Но видимо осенью засяду за TensorFlow (тк веб и мобильники)
5. bonv 1407 24.03.20 13:45 Сейчас в теме
(3)
Давно в планах выучить линал и разобраться с основами машинного обучения, даже книжечка "грокаем машинное обучение" валяется.

Вообщем-то можно сделать что-то полезное и без "линейная алгебра, производные, методы машинного обучения под капотом и т.п."
6. 🅵🅾️🆇 515 24.03.20 13:50 Сейчас в теме
(5) Ну это понятно. Как в статье верно подмечено, если рассматривать либу как некий "черный ящик".

Еще полезнейшая и актуальная весч это NLP:
https://cloud.google.com/natural-language
8. Алексей777 83 25.03.20 21:44 Сейчас в теме
Пожалуй, лучшая статья на инфостарте в данном направлении. Спасибо, Владимир!
9. gudun_ku 62 27.03.20 10:43 Сейчас в теме
Спасибо за статью. Только вот про ситуацию на местах - у нас бизнесу дашборд то не нужен, вернее его регулярно переписывают, то делали в 1с, потом я сделал на веб, потом опять уже другие на 1с, все одно и тоже, теперь про него вовсе забыли и даже не обновляется он, потому что опять переход с одной версии 1с на другую... какое уж тут машинное обучение...
10. starik-2005 2834 09.03.21 16:46 Сейчас в теме
"и не имеет повторяющихся абзацей"... Интересно...
11. newtraveller 24 22.03.22 11:16 Сейчас в теме
Попробовал воспроизвести пример в окружении TensorFlow 2.7 на Python 3.9
Ошибок нет, но качество прогноза плохое (не определяет НГ для "Карта памяти Samsung" и "Сибирская корона светлое")

Вот элемент блокнота на моем окружении:
https://github.com/VitaliyVS-2020/TensorFlow-2.7-example/blob/main/Jupyter%20file/question_TF_2_7.ipynb

Предположительно дело в отличиях TensorFlow 1 и TensorFlow 2
Я новичок в Python, можете подсказать, что не так в новом окружении?

Сделал issues https://github.com/vbondarevsky/infostart_event_2019/issues/1
Оставьте свое сообщение

См. также

Заполнение описания номенклатуры с помощью ChatGPT

Обработка справочников Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Расширение для заполнения описания номенклатуры с помощью модели ИИ ChatGPT. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ. Прошло аудит на 1cfresh.com

3600 руб.

13.03.2023    9833    35    43    

54

GPT-генератор описания товара для сайта и маркетплейсов

Обработка справочников Идеи и тренды в разработке Маркетплейсы Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Выгружаете товары из 1С на свой сайт, Ozon, Wildberries, Авито? Тогда, эта обработка для вас! Фаршируем товары на сайте уникальными описаниями к удовольствию клиентов и поисковых систем. Обработка автоматически успевает сгенерировать более ста наименований за час с помощью искусственного интеллекта (ChatGPT). Никаких регистраций, бери и работай!

3600 руб.

22.03.2023    4993    1    9    

6

Сквозная задача на Исполнителе - часть первая (IMAP)

Идеи и тренды в разработке Языки и среды Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    1060    0    kembrik    2    

5

Заготовка для использования технологии GPT в 1С

Идеи и тренды в разработке Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

10 стартмани

25.05.2023    4085    4    mkalimulin    28    

19

ChatGPT и 1С

Идеи и тренды в разработке Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже несколько месяцев в сети шумят разговоры о чат-боте ChatGPT, я решил не оставаться в стороне и тоже поинтересовался, что это за штуковина, чем она может быть полезна и пора ли искать новую работу программистам, копирайтерам, а заодно и дизайнерам, которых вот-вот подсидит Midjorney?

16.05.2023    8744    300_po_vstrechke    31    

64

Как недетерминированная GPT может выдавать четкие ответы

Идеи и тренды в разработке Бесплатно (free)

У человека, не погруженного в тему, внезапно нахлынувший вал сообщений о GPT может оставить противоречивые чувства. Эксперты разделились на два, на первый взгляд, равновеликих лагеря. Одни авторитеты говорят, что это "вау!". Другие уверенно заявляют, что GPT это "генератор бреда". Чтобы вы могли разобраться самостоятельно, я расскажу, как это работает.

13.02.2023    1616    mkalimulin    16    

20

ChatGPT и 1С. Январь 2023

Идеи и тренды в разработке Россия Бесплатно (free)

"If you're listening to this, you are the Resistance!" John Connor. В этой статье я хочу показать уровень чат-бота ChatGPT в области 1С на январь 2023 года. И общие вопросы, и код написать, и поправить ошибки и т.д. Важно зафиксировать время, когда мы это делаем, так как чат-бот развивается и самообучается довольно быстро. Интересно будет написать подобную статью через год и, возможно, зафиксировать, как всё изменилось.

30.01.2023    9529    NovPas    22    

33

Мобильное приложение 1С и Умный дом. В каждый дом. Пролог

Идеи и тренды в разработке Мобильная разработка Мобильная платформа Конфигурации 1cv8 Абонемент ($m)

Хотите попробовать свои силы в разработке собственного мобильного приложения на 1С для управления светом и электроприборами в своём доме? Добро пожаловать! Хочу поделиться собственными наработками в этой области. Это будет приложение, разработанное для мобильных устройств на базе Android. Основное предназначение: управление включением/выключением устройств, работающих от сети 220 V (свет, телевизор, чайник, вентилятор, микроволновка и т.д.). Управлять будем: из приложения, голосом, на заданный промежуток времени, интенсивностью света, расписанием работы.

1 стартмани

19.12.2022    1380    osivv    8    

20

Продуктовая разработка на 1С

Идеи и тренды в разработке Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

На 1С можно создавать онлайн-сервисы, не уступающие по функциональности другим современным продуктам. Чтобы начать это делать, нужно поменять подходы к разработке. О том, как быстро сделать свой продукт на 1С и выйти с ним на рынок, на конференции Infostart Event 2021 Post-Apocalypse рассказал CTO компании WiseAdvice Олег Филиппов.

28.10.2022    3494    comol    6    

34

Реализация нестандартных (для 1С) интерфейсных решений в Web-клиенте

WEB-интеграция Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Онлайн-сервисы, построенные на 1С, могут использовать все многообразие веб-технологий. О том, как спроектировать, реализовать и красиво оформить интерфейс продукта 1С, в докладе на конференции Infostart Event 2021 Post-Apocalypse рассказал CTO компании WiseAdvice Олег Филиппов.

21.10.2022    7185    comol    15    

71

У.дача каждому 1С-нику, или умный дом для ленивых (конфигурация)

Идеи и тренды в разработке Платформа 1С v8.3 Россия Абонемент ($m)

Конфигурация для создании умных домов на базе 1С. Приложение сконструировано как сервер для устройств Arduino, к которому подключены датчики и реле (и другие исполнительные механизмы), так и для публикации мобильного приложения для управления умным домом.

1 стартмани

26.09.2022    4273    4    atland    0    

21

Интеграция (Ich will version)

Идеи и тренды в разработке WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

Поговорим про интеграцию с точки зрения архитектора.

1 стартмани

16.09.2022    3661    botokash    66    

53

Простая интеграция Яндекс.Алисы и 1С в 2022 - еще проще!

WEB-интеграция Идеи и тренды в разработке Абонемент ($m)

Если когда-то у вас или вашего босса было желание получить данные из базы голосом, прямо в Яндекс.Алисе, эта статья для вас! Работает в приложении Яндекса на смартфоне и на Яндекс.Станции.

6 стартмани

12.07.2022    2467    kiv1c    3    

35

Улучшайзер - как одна внешняя обработка может улучшать другие внешние обработки

Универсальные обработки Инструментарий разработчика Идеи и тренды в разработке DevOps и автоматизация разработки Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В публикации описывается технология использования специальной внешней обработки ("Улучшайзера") для улучшения (модификации) других внешних обработок. При этом каждому пользователю обработки нужен свой уникальный набор улучшений, и он (пользователь) не хочет/не умеет/не собирается (нужное подчеркнуть) лезть в Конфигуратор и/или просить помощи у 1С программиста.

08.07.2022    5190    86    delta    2    

21

Модель состояния для MVC

Работа с интерфейсом Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    1527    kalyaka    2    

16

История развития телеграм-ботов в одной сибирской компании

Идеи и тренды в разработке Мессенджеры и боты Бесплатно (free)

Хочу рассказать историю развития и применения Telegram-ботов в одной компании. Говорить буду о том, что сделано, а не как сделано. Идея написать об этом возникла, так как, делясь опытом с коллегами, неожиданно обнаружил, что реализованные фичи вызывали немалое удивление, по принципу: "А так можно было?". Надеюсь, мой рассказ будет вам полезен и вдохновит на создание чего-нибудь занятного.

28.03.2022    2024    zeltyr    2    

13

Создание интерактивных обучающих курсов с помощью Vanessa Interactive

Инструментарий разработчика WEB-интеграция Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Приветствую Вас, коллеги. Сегодня Вам предлагается рассмотреть технологию создания интерактивных обучающих курсов, системы Onboarding, интерактивной справки для любых конфигураций разработанных на базе платформы 1С при работе в web клиенте. Прошу посмотреть ролик, кому неинтересно, как это работает, можно дальше не читать. Тестировалось на 1С:Предприятие 8.3 (8.3.20.1646).

1 стартмани

02.02.2022    7738    1    Viktor_Ermakov    2    

36

RFID считыватели Impinj и RRU9516

Идеи и тренды в разработке Платформа 1С v8.3 8.3.14 Конфигурации 1cv8 Россия Абонемент ($m)

Компонента для работы с RFID метками. Поддерживает считыватели Impinj 120, 220, 420. А также настольный RRU9816.

1 стартмани

24.11.2021    3341    1    pavelmael    1    

5

Программа по распознаванию номеров автомашин Vizavi Care

Идеи и тренды в разработке Платформа 1С v8.3 Управленческий учет Платные (руб)

Вся логика клиентской части программы "Vizavi Care" написана на внутреннем языке 1С 8.3. Программа поставляется полностью настроенной - "установи и начинай работать". Для более полной настройки под конкретные условия работы приводятся подробные инструкции в руководстве к программе. Низкоуровневые операции с изображением реализованы на com-exe - сервере, написанном на C++.

18000 руб.

25.08.2021    6138    2    2    

13

Необходимый минимум по AI для 1С-ника

Идеи и тренды в разработке Бесплатно (free)

Технологии искусственного интеллекта (AI или ИИ) уже перестали быть Rocket Science, при этом они не ограничиваются линейной регрессией для решения простых задач. О том, какие особенности и ограничения есть у существующих технологий ИИ, и как они могут помочь 1С-никам, на онлайн-митапе «Интеграционные решения в 1С» рассказал руководитель управления ИТ компании WiseAdvice Олег Филиппов.

19.07.2021    15873    comol    49    

93

Распознавание лиц в связке с 1С "на коленке"

Идеи и тренды в разработке Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

Возможно ли просто реализовать функционал программы лояльности без использования пластиковых карт, а используя при этом распознавание лиц покупателей? Попробуем проверить.

02.07.2021    1761    KirillGermann    7    

8

Машинное обучение и анализ данных

Математика и алгоритмы Идеи и тренды в разработке Платформа 1С v8.3 Абонемент ($m)

Данная конфигурация предназначена для автоматизации процесса машинного обучения и анализа данных средствами 1С.

1 стартмани

04.05.2021    8578    19    cdrw3    11    

15

Ускорение реструктуризации больших таблиц. Мой вариант

Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.04.2021    1814    buganov    0    

8

Учет умер, да здравствует учет!

Идеи и тренды в разработке Бесплатно (free)

Все громче звучат в последнее время разговоры о том, что профессия бухгалтера (как, впрочем, и еще целый ряд других) не выдерживает напора современных технологий. Даже если и есть тут некоторое преувеличение, то не такое уж и большое. Откройте прямо сейчас hh. Профессия «бухгалтер». В Москве 7 тысяч вакансий на полмиллиона соискателей. При том, что вакансий «программист» чуть ли не в три раза больше (20 тысяч). И пусть счет все еще идет на тысячи, не стоит обольщаться. Это — всего лишь инерция. Скоро все закончится, потому что… учет умер.

31.03.2021    1566    mkalimulin    32    

5

RPA платформа OneRPA

Идеи и тренды в разработке Платформа 1С v8.3 Платные (руб)

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами.

192000 руб.

03.03.2021    10854    1    27    

33

Highload-оптимизация 1С: теория и практика на примере консолидированной отчетности группы "Магнит" и розничной аптечной сети "Магнит"

Идеи и тренды в разработке Платформа 1С v8.3 Бесплатно (free)

Тема оптимизации 1С на больших данных бесконечная и всеобъемлющая, поскольку на производительность влияет целый ряд факторов – количество пользователей, данных, транзакций, неоптимальные запросы и т.д. Об инструментах для локализации проблем производительности и практических кейсах оптимизации рассказал Алексей Олейник, руководитель сектора автоматизации отчетности МСФО компании «Информационные технологии Магнит».

11.01.2021    30731    user662404_itlexusss    14    

14

1С и Умный дом. Управление голосом

Идеи и тренды в разработке 8.3.6 Бесплатно (free)

Возможно ли управление устройствами умного дома из 1С, да ещё и голосом? Можно ли без умных колонок Google Home, Alexa, Алиса и иных платформ, а также без приложений от Google, Amazon и других управлять этими устройствами? Мой ответ – ДА, можно, нужно просто иметь умное устройство, имеющее возможность работы в DIY, 1С и программу распознавания голоса и взаимодействия с 1С.

04.01.2021    38712    osivv    15    

11

Пример простой нейросети

Идеи и тренды в разработке Платформа 1С v8.3 Россия Абонемент ($m)

Пример реализации простой нейросети для решения частного случая квадратного уравнения. Метод обучения - обратное распространение ошибки. Релиз платформы 8.3.17.79.

1 стартмани

26.10.2020    7966    9    kite2    14    

12

Натуральный интеллект

Мотивация, лидерство и личная эффективность Идеи и тренды в разработке Бесплатно (free)

Много слов сказано об Искусственном Интеллекте, как будут взаимодействовать новое и совсем не забытое старое.

17.08.2020    1885    Ликреонский    1    

2

IoT (Internet of Things) в 1С или как подружить 1С с ESP32 при помощи MQTT-брокера

Идеи и тренды в разработке Платформа 1С v8.3 Абонемент ($m)

Что делать, если надо подключить удалённое устройство к серверу 1С, но ни устройство, ни сервер 1С нельзя "светить" наружу? А если таких устройств десятки или сотни по всей стране? Ответ: Использовать промежуточный сервис, который будет пересылать данные между сервером 1С и устройствами. Такие функции замечательно выполняет MQTT-брокер, но вот не задача, 1С не умеет с ним работать.

2 стартмани

25.06.2020    13074    18    frutty    34    

23

Расширение "Интеграция с блокчейнами" для работы с Биткоин и Лайткоин (ERP 2.4 и УТ 11.4)

Идеи и тренды в разработке Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Беларусь Россия Абонемент ($m)

Расширение "Интеграция с блокчейнами" позволяет получать и отправлять Биткоин и Лайткоин из 1С, привязывать входящие и исходящие платежи в криптовалюте к объектам базы (справочники или документы). Расширение работает с основными типовыми конфигурациями 1С для России и Беларуси (ERP 2.4, УТ 11.4, ERP для Беларуси 2.4, УТ для Беларуси 3.4). В качестве провайдера платежей используется сервис BLOCK.IO.

1 стартмани

23.06.2020    6606    1    NikitaXa    7    

5

Визионное программирование

Идеи и тренды в разработке Бесплатно (free)

Новый способ программирования и его практическая демонстрация.

22.04.2020    6519    mkalimulin    111    

24

RPA (роботизация) – "костыль" или автоматизация будущего? Идеи и практические примеры

Идеи и тренды в разработке Бесплатно (free)

Автоматизация действий пользователя упрощает интеграцию с внешними системами, сокращает рутинную работу, делает бизнес-процесс более контролируемым. О подходе Robotic Process Automation (RPA), случаях, когда его можно использовать, существующем рынке RPA-систем, на конференции Infostart Event 2019 Inception рассказал CTO компании WiseAdvice Олег Филиппов.

10.03.2020    17571    comol    2    

26

Криптовалюты в терминах 1С. Заключение

Идеи и тренды в разработке Бесплатно (free)

В заключительной, третьей части дается ответ на вопрос: зачем все это нужно.

08.03.2020    2910    mkalimulin    296    

2

Контроль информации в базе на основе блокчейн

Идеи и тренды в разработке Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

25.01.2020    7065    6    mkalimulin    24    

6

1C и защищенное хранение данных на блокчейне: модуль интеграции от Acryl Platform

Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Модуль интеграция 1С и блокчейн платформы "Acryl Platform" без использования внешних компонент. Под катом реализация механизмов Base58, Blake2b, Keccak, Curv25519 (the elliptic curve Diffie–Hellman) в подсистеме "Crypt", примеры генерации ключей, адресов, подписи транзакций, запись данных в блокчейн, чтение и восстановление данных из блокчейн. Код открыть. Лицензия MIT.

1 стартмани

21.01.2020    13682    6    ArtemSerov    18    

14

Что такое RPA? Как и зачем его делать на 1С?

Идеи и тренды в разработке Платформа 1С v8.3 Бесплатно (free)

В данной публикации я кратко (наверное, ещё раз) расскажу про подход к автоматизации, который принято называть RPA, и продемонстрирую этот подход применительно к 1С. На Infostart event был мой доклад на эту тему, поэтому не буду повторяться - чуть больше углублюсь в технические детали.

05.12.2019    16491    comol    95    

47

Курсы валют из блокчейна Waves

Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальная обработка для получения курсов валют из блокчейна.

1 стартмани

12.09.2019    7761    0    pazhukov    0    

0