Сократить трудозатраты на 90% и увеличить скорость работы — как компании используют ИИ

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

Материал подготовлен при поддержке Альянса в сфере искусственного интеллекта и Mail.ru Group

В открытой библиотеке AI Russia Works хранятся ИИ-кейсы российских компаний с доказанной бизнес-эффективностью. Технологии объединили промышленность, FMCG, e-commerce, сельское хозяйство, ритейл, ИТ, науку — всего 24 отрасли.

В каждой из них обращались к ИИ-технологиям, чтобы решить сложную задачу, например добыть нефть или найти человека. Теперь компании соревнуются, чей опыт был эффективнее — в будущем лучшие практики получат награду AI Russia Awards.

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

Кейс первый. Роботы разбираются, прав ли клиент

Сервис для заказа эвакуаторов CarTaxi строго следит за диалогом водителя и клиента. Некоторые нарушения вроде обмена контактными данными или повышения стоимости заказа отслеживают и пресекают.

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

О технологии

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

Дальше внутренний сервис автоматически анализирует диалог на базе предварительно обученной рекуррентной нейронной сети.

Рекуррентная нейронная сеть — объяснение для бабушки
Читать

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

(function(d, css) { var texts = d.querySelectorAll(css.wrapper); if (texts.length) { for (var i = 0; i < texts.length; i += 1) { initText(texts[i]); } } function initText(text) { if (!text) return false; var isOpen = text.classList.contains(css.open); var button = text.querySelector(css.button); var icon = text.querySelector(css.icon); button.addEventListener('click', openText); icon.addEventListener('click', toggleText); function openText() { if (!isOpen) { text.classList.add(css.open); isOpen = true; } }; function closeText() { if (isOpen) { text.classList.remove(css.open); isOpen = false; } }; function toggleText() { if (isOpen) { closeText(); } else { openText(); } }; }; }(document, {wrapper: '.ai-russia-text-cut', button: '.ai-russia-text-cut__button', body: '.ai-russia-text-cut__body', icon: '.ai-russia-text-cut__icon', open: 'ai-russia-text-cut--open'}));

Сервис выявляет в тексте возможные нарушения и проставляет маркеры, когда вероятность отклонения от регламента высокая.

Диспетчеру остаётся проверить размеченный текст, подтвердить или отклонить предположения нейронной сети. Эти данные в дальнейшем используются, чтобы дообучить систему и улучшить анализ.

Что в итоге

С Yandex SpeechKit от Yandex.Cloud трудозатраты операторов сократились на 90%, снизилось влияние человеческого фактора. Выявление нарушений, наоборот, стало точнее: штрафы за них теперь начисляются автоматически.

Вы читаете эту статью 1 секунду
За это время в CarTaxi
Операторы обработали 10 cекунд диалогов с Yandex SpeechKit от Yandex.Cloud
(function(d, w) { var timerID; var startTime = 0; var currentTime = 0; var prevCurrentTimer = 0; var counterHTML; var dialogsHTML; var isCanceled; startTimer(); function startTimer() { counterHTML = d.querySelector('.js-mailru-group-ai-counter-dialogs-time'); dialogsHTML = d.querySelector('.js-mailru-group-ai-counter-dialogs'); if (counterHTML && dialogsHTML) { timerID = requestAnimationFrame(timerLoop); onBeforePageChange(clearTimer); } }; function clearTimer() { isCanceled = true; cancelAnimationFrame(timerID); }; function timerLoop(time) { if (!isCanceled) { timerID = requestAnimationFrame(timerLoop); } else { cancelAnimationFrame(timerID); } startTime = startTime ? startTime : time; currentTime = time - startTime; if (currentTime - prevCurrentTimer > 1000) { printTime(currentTime); printDialogTime(currentTime); prevCurrentTimer = currentTime; } }; function calcTime(t) { return { days: Math.floor(t / (1000 * 60 * 60 * 24)), hours: Math.floor((t%(1000 * 60 * 60 * 24))/(1000 * 60 * 60)), mins: Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)), secs: Math.floor((t % (1000 * 60)) / 1000), }; }; function getFormattedTime(time) { return { days: declineWord(time.days, ['день', 'дня', 'дней']), hours: declineWord(time.hours, ['час', 'часа', 'часов']), mins: declineWord(time.mins, ['минуту', 'минуты', 'минут']), secs: declineWord(time.secs, ['секунду', 'секунды', 'секунд']), }; }; function printTime(time) { var calcedTime = calcTime(time); var formattedTime = getFormattedTime(calcedTime); var timeString = ''; timeString = ''; var keys = Object.keys(calcedTime); for (var i = 0; i < keys.length; i += 1) { if (calcedTime[keys[i]] > 0) { timeString += formattedTime[keys[i]]; } } counterHTML.innerHTML = timeString; }; function declineWord(number, words) { var result = `${number} `; if (number % 10 === 1 && number % 100 !== 11) { result += words[0]; } else if ([2, 3, 4].indexOf(number % 10) > -1 && [12, 13, 14].indexOf(number % 100) < 0) { result += words[1]; } else { result += words[2]; } return result + ' '; }; function onBeforePageChange(callback) { if (window.Air && window.Air.get) { var ajaxify = window.Air.get('module.ajaxify'); if (ajaxify) { ajaxify.on('Before page changed', callback); } } }; // dialog counter function calcDialogTime(t) { var scaledTime = t * 10; return calcTime(scaledTime); }; function printDialogTime(time) { var calcedTime = calcDialogTime(time); var formattedTime = getFormattedTime(calcedTime); var timeString = ''; timeString = ''; var keys = Object.keys(calcedTime); for (var i = 0; i < keys.length; i += 1) { if (calcedTime[keys[i]] > 0) { timeString += formattedTime[keys[i]]; if (keys[i] === 'mins' && calcedTime.secs > 0) { timeString += ' и '; } } } dialogsHTML.innerHTML = timeString; }; }(document, window));

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

Технологию внедрили в Научно-практическом клиническом центре диагностики и телемедицинских технологий (НПКЦ ДиТ) Департамента здравоохранения города Москвы.

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

Для ускорения внедрили распознавание речи Voice2Med от группы компаний ЦРТ.

О технологии

Решение Voice2Med основано на нескольких компонентах:

  • Расчёт речевых признаков. Акустические признаки выделяет модель на основе свёрточной нейронной сети.
Свёрточная нейронная сеть — объяснение для бабушки
Читать

Свёрточную сеть можно представить как команду в викторине, которой нужно угадать, что изображено на картине: кошка, собака или, например, «Мона Лиза».

Допустим, на изображении кот.

Игра напоминает глухой телефон, только интереснее:

  1. Участники выстраиваются по очереди. Каждый из них называется слоем свёртки.
  2. Первый слой свёртки видит исходную картину. И его задача: перерисовать изображение на разные карточки. Но рисовать самого кота нельзя: можно на карточках изображать только контуры, дуги и ребра.
  3. Второй участник (новый слой нейронной сети) уже не видит саму картину, но ему передают всё, что нарисовал первый. Его задача заключается в том, чтобы по этим картинкам нужно нарисовать на новых карточках, комбинируя разные признаки, уже более сложные текстуры: окружности, квадраты и т.д.
  4. Третьему слою передают теперь уже карточки с предыдущего этапа, и из всех этих фигур и квадратов ему нужно будет нарисовать на новых карточках более сложные вещи: на этом этапе где-то можно будет опознать что-то похожее на ухо кота или его хвост.
  5. И уже через несколько этапов, появляется большая коробка с карточками (они называются картами признаков). На них уже могут быть изображены лапы, усы или крылья (если это птица). Все эти карточки передают последнему участнику-эксперту, который внимательно изучает рисунки, сравнивает их со своей картотекой (шаблоны лап кота, крыльев, листьев и т.д.) а затем выносит вердикт: «Это же кот!».

Также устроена свёрточная нейронная сеть (хотя и слоев в ней и различных комбинаций может быть гораздо больше).

  • Компонент декодирования. Результат распознавания находят статистическими языковыми моделями. В этом помогает алгоритм ЦРТ для быстрого расширения словарного запаса.

  • Компонент расстановки знаков препинания.

  • Компонент сворачивания числительных на основе SRGS-грамматик.

Что в итоге

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

Сегодня
Врачи-рентгенологи города Москвы подготовили 7 протоколов с Voice2Med
(function(d, w) { var timerID; var startTime = 0; var currentTime = 0; var prevCurrentTimer = 0; var containerHTML; var counterHTML; var dialogsHTML; var isCanceled; start(); function start() { containerHTML = d.querySelector('.js-mailru-group-ai-counter-protocols-content'); counterHTML = d.querySelector('.js-mailru-group-ai-counter-protocols'); dialogsHTML = d.querySelector('.js-mailru-group-ai-protocols'); if (containerHTML && counterHTML && dialogsHTML) { printDate(); printProtocolsCount(); containerHTML.classList.add('mailru-group-ai-counter-protocols--show'); } }; function printDate() { var now = new Date(); var day = now.getDate(); var month = now.getMonth(); var year = now.getFullYear(); counterHTML.innerHTML = `${day}.${month + 1}.${year}`; }; function declineWord(number, words) { var result = `${formatNum(number)} `; if (number % 10 === 1 && number % 100 !== 11) { result += words[0]; } else if ([2, 3, 4].indexOf(number % 10) > -1 && [12, 13, 14].indexOf(number % 100) < 0) { result += words[1]; } else { result += words[2]; } return result + ' '; }; function formatNum(num) { var formatted = num.toLocaleString(); return formatted || num; }; // protocols counter function calcProtocolsCount() { var now = new Date(); var dayX = new Date('12/08/2020'); var dif = now.getTime() - dayX.getTime(); var days = Math.max(0, dif / 1000 / 60 / 60 / 24); return Math.round(34021 + 117 * days); }; function getFormattedProtocols(p) { return declineWord(p, ['протокол', 'протокола', 'протоколов']); }; function printProtocolsCount() { var protocols = calcProtocolsCount(); var formattedProtocols = getFormattedProtocols(protocols); dialogsHTML.innerHTML = formattedProtocols; }; }(document, window));

Кейс третий. Как технологии поделили телеком-аудиторию

В 2018 году в «Ростелекоме» приняли новую стратегию для трансформации в провайдера цифровых услуг. Чтобы создавать и продвигать актуальные цифровые сервисы и продукты, требовалось в том числе по-новому сегментировать аудиторию.

Классический подход к тому времени исчерпал себя: в компании не понимали ёмкость рынка и позиции конкурентов. Понадобились более глубокие сегментационные исследования, в основе которых — пользователь и его потребности.

О технологии

Команда Predict из Mail.ru Group создала новую AI-based-сегментацию, которая разделила рынок и клиентскую базу «Ростелеком» на 8 сегментов. Каждый описан более чем по 450 признакам: расширенный соцдем, ценностно-поведенческий профиль, отношение к инновациям, интересы, life-style.

Сегментация строится на двух ключевых атрибутах, которые вычисляются предиктивно с помощью модели оценки личности BIG5/OCEAN и модели принятия технологических новинок Adoption Curve.

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

Градиентный бустинг — объяснение для бабушки
Читать

— Что такое градиентный бустинг, внучок?

— Бабушка, почему у тебя такие вкусные пирожки? Вот тетя Галя использует те же ингредиенты, у неё получается не так вкусно, как у тебя

— Это мой опыт. Я долго подбирала сколько соли нужно класть, яиц и так далее

— Ну хорошо. Для простоты возьмём только один градиент: соль. Вот ты положила одну чайную ложку на 10 литров воды. Пирожки будут какими?

— Они будут пресными.

— И что ты сделаешь?

— Положу больше соли.

— Хорошо. Допустим ты положила 10 кг соли на 10 л. Пирожки какими будут?

— Солёными.

— Правильно. Значит, чтобы были очень вкусными пирожки нам нужно положить соль в диапазоне от 1 ложки до 10 кг.

— Ну да, нет смысла класть меньше одной ложки, так как будет пресно, и нет смысла ставить больше 10 кг, так как будет солёно.

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

— Внучок, но пирожки это не только соль и вода. Это и мясо и яйца, и много чего ещё.

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

(function(d, css) { var texts = d.querySelectorAll(css.wrapper); if (texts.length) { for (var i = 0; i < texts.length; i += 1) { initText(texts[i]); } } function initText(text) { if (!text) return false; var isOpen = text.classList.contains(css.open); var button = text.querySelector(css.button); var icon = text.querySelector(css.icon); button.addEventListener('click', openText); icon.addEventListener('click', toggleText); function openText() { if (!isOpen) { text.classList.add(css.open); isOpen = true; } }; function closeText() { if (isOpen) { text.classList.remove(css.open); isOpen = false; } }; function toggleText() { if (isOpen) { closeText(); } else { openText(); } }; }; }(document, {wrapper: '.ai-russia-text-cut', button: '.ai-russia-text-cut__button', body: '.ai-russia-text-cut__body', icon: '.ai-russia-text-cut__icon', open: 'ai-russia-text-cut--open'}));

Что в итоге

«Ростелеком» оценил ёмкость рынка и разработал стратегию продвижения традиционных продуктов и цифровых сервисов. Новая AI-based-сегментация стала реальным рабочим инструментом для маркетинга. Сейчас все рекламные кампании ориентированы на таргет-сегменты, и новые продукты выстраиваются вокруг потребностей клиентов.

Кейс четвёртый. ML алгоритмы нефтяников

Перед началом нефтеразработки специалисты «Газпром нефть» анализируют сейсмические данные, исследуют геофизические свойства скважин и образцы керна (порода, извлечённая из скважины). Всё для того, чтобы построить структурную модель месторождения.

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

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

О технологии

Собственное ML-решение «Газпром нефти» включает в себя алгоритмы для работы с сейсмическими данными и обучения нейронных сетей на сейсмических кубах. Для этого применяются:

  • Свёрточные сегментационные сети (encoder-decoder).
  • Система распознавания изображений для анализа сейсмических снимков.
Свёрточная сегментационная сеть — объяснение для бабушки
Читать

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

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

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

Как это работает: эксперт отмечает на разметке разреженный каркас горизонта, занимающий примерно 1% сейсмического куба. Набор нейросетей строит границы слоёв по всей площади месторождения в каждой точке куба без интерполяции. Точность выделения границ и распознавание структуры месторождения становятся лучше.

Что в итоге

Технология позволяет специалистам «Газпром нефть» автоматически и всего за пару часов размечать границы пластов на всей площади месторождения, в том числе в сложных местах, например в зонах тектонических сдвигов. Специалисту остаётся только выбрать оптимальные решения, предложенные машиной.

Кейс пятый. Найти человека на тысячах фото

С 2018 года поисково-спасательный отряд «Лиза Алерт» подключил к поиску пропавших людей беспилотники. С ними удаётся найти как минимум одного человека в неделю — на природе (поля, болота, озёра, лесные просеки) и промышленных территориях.

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

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

О технологии

«Лиза Алерт» использовала технологию «Beeline AI — Поиск людей» на базе свёрточных нейронных сетей. Датасет для обучения нейросети формировался из:

  • 3120 фото с реальных поисков.
  • 148 постановочных снимков тел.
  • 608 фото с людьми.
  • 400 снимков хорошего качества с Semantic Drone Dataset.
Датасет — объяснение для бабушки
Читать

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

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

Так вот, ящик с яблоками вместе с твоими объяснениями, какое хорошее, а какое — нет, и есть «Датасет» для задачи классификации яблок на хорошие и плохие.

(function(d, css) { var texts = d.querySelectorAll(css.wrapper); if (texts.length) { for (var i = 0; i < texts.length; i += 1) { initText(texts[i]); } } function initText(text) { if (!text) return false; var isOpen = text.classList.contains(css.open); var button = text.querySelector(css.button); var icon = text.querySelector(css.icon); button.addEventListener('click', openText); icon.addEventListener('click', toggleText); function openText() { if (!isOpen) { text.classList.add(css.open); isOpen = true; } }; function closeText() { if (isOpen) { text.classList.remove(css.open); isOpen = false; } }; function toggleText() { if (isOpen) { closeText(); } else { openText(); } }; }; }(document, {wrapper: '.ai-russia-text-cut', button: '.ai-russia-text-cut__button', body: '.ai-russia-text-cut__body', icon: '.ai-russia-text-cut__icon', open: 'ai-russia-text-cut--open'}));

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

Технология работает и как онлайн-сервис — передаёт данные в облачное хранилище BeeCloud, и как офлайн-решение на компьютере поисковой группы на месте.

Что в итоге

С технологией «Beeline AI — Поиск людей» в разы сократилось время просмотра и сортировки снимков с дрона. Технология постоянно совершенствуется и адаптируется к специфике новых задач.

Потенциально нейронная сеть способна находить людей и предметы в лесу, городах, на болотах, полях — независимо от времени года и одежды человека. В будущем алгоритм сможет распознавать нестандартное положение тела: сидящего, лежащего или частично укрытого листвой пропавшего с высоты 30–100 метров.

Вы читаете эту статью 1 секунду
За это время
Система «Beeline AI — Поиск людей» проанализировала 1 фотографию
(function(d, w) { var timerID; var startTime = 0; var currentTime = 0; var prevCurrentTimer = 0; var counterHTML; var photosHTML; var isCanceled; startTimer(); function startTimer() { counterHTML = d.querySelector('.js-mailru-group-ai-counter-photos'); photosHTML = d.querySelector('.js-mailru-group-ai-photos'); if (counterHTML && photosHTML) { timerID = requestAnimationFrame(timerLoop); onBeforePageChange(clearTimer); } }; function clearTimer() { isCanceled = true; cancelAnimationFrame(timerID); }; function timerLoop(time) { if (!isCanceled) { timerID = requestAnimationFrame(timerLoop); } else { cancelAnimationFrame(timerID); } startTime = startTime ? startTime : time; currentTime = time - startTime; if (currentTime - prevCurrentTimer > 1000) { printTime(currentTime); printProtocolsCount(currentTime); prevCurrentTimer = currentTime; } }; function calcTime(t) { return { days: Math.floor(t / (1000 * 60 * 60 * 24)), hours: Math.floor((t%(1000 * 60 * 60 * 24))/(1000 * 60 * 60)), mins: Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)), secs: Math.floor((t % (1000 * 60)) / 1000), }; }; function getFormattedTime(time) { return { days: declineWord(time.days, ['день', 'дня', 'дней']), hours: declineWord(time.hours, ['час', 'часа', 'часов']), mins: declineWord(time.mins, ['минуту', 'минуты', 'минут']), secs: declineWord(time.secs, ['секунду', 'секунды', 'секунд']), }; }; function printTime(time) { var calcedTime = calcTime(time); var formattedTime = getFormattedTime(calcedTime); var timeString = ''; timeString = ''; var keys = Object.keys(calcedTime); for (var i = 0; i < keys.length; i += 1) { if (calcedTime[keys[i]] > 0) { timeString += formattedTime[keys[i]]; } } counterHTML.innerHTML = timeString; }; function declineWord(number, words) { var result = `${number} `; if (number % 10 === 1 && number % 100 !== 11) { result += words[0]; } else if ([2, 3, 4].indexOf(number % 10) > -1 && [12, 13, 14].indexOf(number % 100) < 0) { result += words[1]; } else { result += words[2]; } return result + ' '; }; function onBeforePageChange(callback) { if (window.Air && window.Air.get) { var ajaxify = window.Air.get('module.ajaxify'); if (ajaxify) { ajaxify.on('Before page changed', callback); } } }; // photos counter function calcPhotoCount(t) { return Math.round(((t / 1000) * 30) / 60); }; function getFormattedPhoto(p) { return declineWord(p, ['фотографию', 'фотографии', 'фотографий']); }; function printProtocolsCount(time) { var photo = calcPhotoCount(time); var formattedPhoto = getFormattedPhoto(photo); photosHTML.innerHTML = formattedPhoto; }; }(document, window));

Библиотека AI Russia Works и премия AI Russia Awards — проекты Альянса крупнейших технологических компаний с сфере искусственного интеллекта. В него входят Mail.ru Group, «Сбер», «Яндекс», МТС, «Газпром нефть» и РФПИ.

В библиотеке собраны десятки интересных ИИ-кейсов с доказанной эффективностью. В ней простая навигация, видеоролики и полезные материалы по применению ИИ — можно найти как технологическое решение, так и партнёров. В 2021 году самые успешные проекты из библиотеки наградят премией AI Russia Awards.

0
3 комментария
Invent Valley

"Исследовать новое месторождение за пару часов"©
......................................
Отлично сделанная, и шикарно оформленная статья, с ... ураганным бредом.
(термины "искусственный интеллект", и "блокчейн" - становятся стопроцентными маркерами красиво оформленного бреда)

Ответить
Развернуть ветку
Iustina Fox

👏👍

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Iustina Fox

Думала меня одну раздражает эта чушь. Это не спам. Это ситуация при которой квалификация автора катастрофически низка. И маскируется % которые ни о чем не говорят, долями неизвестно от чего и терминологией без понимания ее значения.

Ответить
Развернуть ветку
0 комментариев
Раскрывать всегда