Виктор Сонк и Стейн Декуббер, инженеры ML @ ML6

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

Здесь на помощь приходит GDPR. Он не запрещает компаниям использовать ваши данные, он всего лишь требует, чтобы у вас был выбор. Но даже если компании разрешено использовать эти персональные данные, существуют строгие правила, которым необходимо следовать с точки зрения защиты и безопасности данных. Такие правила, как запрет на использование личных данных, кроме как в производственных средах, и строгие требования к шифрованию заставляют компании очень внимательно следить за тем, как они обрабатывают свои данные.

В ML6 мы часто работаем над проектами машинного обучения, которые требуют от нас обработки конфиденциальных данных. В последние годы прорывы в области глубокого обучения и выпуск программного обеспечения, такого как TensorFlow, открыли дорогу новым захватывающим программным приложениям, часто включающим неструктурированные данные, такие как изображения, аудио или текстовые файлы. Однако выявить и замаскировать конфиденциальные части в неструктурированных данных не всегда просто, а иногда даже невозможно при подходах, основанных на правилах. В этой статье мы проиллюстрируем, как службы машинного обучения Google Cloud могут использоваться для идентификации и маскировки конфиденциальных данных в неструктурированных наборах данных. Мы начнем с некоторых примеров Google Cloud Vision, а затем расскажем, как решить более сложную проблему, объединив Cloud Vision с Cloud Natural Language. Как мы покажем, эти сервисы являются мощными, они используют самые современные модели для получения высокоточных результатов и могут быть легко интегрированы в существующие сервисы или как конвейеры обработки исходных данных.

Чтобы продолжить, вам нужно создать проект Google Cloud Platform (GCP). Если у вас еще нет учетной записи: пробный период длится 1 год, и вы можете потратить 300 долларов. Создайте свой первый проект здесь и убедитесь, что биллинг включен. Облачная консоль Google - это обычное место, откуда можно управлять всем, что вы хотите делать в GCP. В нашем случае нам понадобятся Cloud Vision API и Cloud Natural Language API.

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

Маскирование номерных знаков с помощью Google Cloud Vision
Только в 2017 году мы в общей сложности сделали около 1,2 триллиона фотографий. Все эти данные используются для приложений машинного обучения, от обнаружения объектов до беспилотных автомобилей. Но во многих сценариях части изображения не важны для модели машинного обучения и очень чувствительны. Беспилотный автомобиль на самом деле не заботится о номерном знаке, а только о том, что есть препятствие. У Google Street View та же проблема: лица пешеходов необязательны для хорошего просмотра улиц, но они, тем не менее, видны, и мы хотим защитить конфиденциальность этих людей.

А теперь самое интересное: код!

Начнем с импорта. Модуль Vision из облачного пакета Google, позволяющий взаимодействовать с API видения GCP. Мы пришлем ему фотографии машин и хотим определять их номерные знаки. Мы используем PIL, чтобы открыть изображение, рисуем наш черный ящик, скрывающий на нем номерной знак, и сохраняем изображение. Мы используем io, чтобы открыть изображение.

Вы можете прочитать объяснение каждого из компонентов в комментариях к коду, но в основном мы делаем функцию, которая имеет путь к изображению в качестве входных данных и сохраняет цензурированную версию изображения. Обратите внимание, что также можно вызывать большинство сервисов Google Cloud через REST API, включая те, которые обсуждаются здесь. Ниже приведен пример работы скрипта.

Маскирование лиц
Теперь, когда у нас есть базовый код и мы знаем, что делать, мы можем применить этот метод к различным другим категориям, которые распознаются Cloud Vision: лица, ориентиры, логотипы ... Ниже код, расширяющий наш предыдущий пример возможностью обнаружения лиц. Вы можете поэкспериментировать с этим и подключить каждую из вышеперечисленных категорий в качестве дополнительных способов анонимности ваших данных.

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

Анонимизация товарных чеков: Cloud Vision и Cloud Natural Language

В примере с номерными знаками мы использовали Cloud Vision, чтобы скрыть номерные знаки, просто обнаружив и замаскировав весь текст на изображении. Что, если мы хотим замаскировать только определенные типы текста? Введите язык Cloud Natural. API естественного языка обеспечивает готовое распознавание сущностей, анализ тональности и даже синтаксический анализ и в настоящее время поддерживает 10 основных языков.

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

Как только мы определили имена, их несложно замаскировать, используя приведенный выше код:

Основное отличие от предыдущих примеров с точки зрения реализации - это дополнительный вызов Cloud Natural Language. На практике это означает всего две лишние строки кода:

Облачная речь и облачное видео
Помимо сервисов визуализации и естественного языка, GCP также предлагает API для преобразования речи в текст, а также для анализа и аннотации видео. Хотя мы не будем здесь рассматривать эти службы, очевидно, что они также могут использоваться для идентификации и маскировки конфиденциальных данных. Одним из примеров является автоматическое извлечение и маскирование имен из образцов речи (например, телефонных звонков в службу поддержки клиентов) путем преобразования сначала в текст с помощью Cloud Speech, а затем вызова Cloud Natural Language для распознавания сущностей.

Предотвращение потери данных в облаке
Еще один вариант - использовать API предотвращения потери данных GCP. Он в основном предназначен для текстовых данных и позволяет обнаруживать и редактировать конфиденциальные данные, такие как номера кредитных карт, номера телефонов и имена. Кроме того, он может обрабатывать текстовые потоки, так что данные могут быть отредактированы по мере их поступления, прежде чем они будут записаны на диск. Таким образом, он очень подходит для приложений реального времени.

Но безопасны ли мои данные при их отправке в Google Cloud?
Да. Отправка данных в службы GCP осуществляется через HTTPS, обеспечивая безопасность через соединение TLS, что означает, что вы можете быть уверены, что отправляете данные правильному получателю и что ваши данные зашифрованы при передаче. В более общем смысле, Google Cloud Platform по умолчанию шифрует все данные перед их записью на диск. Кроме того, ключи шифрования для каждого блока данных сами зашифрованы с помощью набора мастер-ключей, и GCP предлагает различные способы управления этими ключами, от автоматического управления ими до возможности управления мастер-ключами со стороны клиента и хранится в помещениях.

В ML6 мы имеем обширный опыт интеграции машинного обучения в программные продукты, будь то использование Google Cloud API или создание индивидуальных решений для решения более сложных проблем. Защита конфиденциальности занимает одно из первых мест в нашем списке приоритетов для любого проекта, и мы считаем, что находимся в выгодном положении для решения сложных проблем машинного обучения в будущем.

Чтобы узнать больше об API машинного обучения GCP, обратитесь к этой записи блога, где мы обсуждаем, как мы использовали Cloud Vision для оцифровки более миллиона каталожных карточек для Гентского университета.