Papers, please. Як нейромережа допомагає нам перевіряти клієнтів і ловити шахраїв

Papers, please. Як нейромережа допомагає нам перевіряти клієнтів і ловити шахраїв

Перед тим як клієнт зможе робити грошові перекази в ePayments, йому доведеться пройти верифікацію. Він надає нам свої персональні дані і завантажує документи для підтвердження особи та адреси. А ми перевіряємо, чи відповідають вони вимогам нашого регулятора. Потік заявок на верифікацію ставав все більше, нам стало важко обробляти такий потік документів. Ми боялися, що процедура займатиме багато часу і перевищить всі розумні строки для клієнтів. Тоді ми вирішили зробити систему верифікації на основі deep learning.

Лікнеп про регулятори і вимоги

Щоб випускати електронні гроші, потрібно отримати ліцензію регулятора. Якщо ви відкриваєте платіжну систему, наприклад, в Росії, вашим регулятором стане Центробанк РФ. ePayments — англійська платіжна система, наш регулятор — Financial Conduct of Authority (FCA), орган, підзвітний Мінфіну Великобританії. FCA стежить, щоб ми дотримувалися політики Anti-money laundering (боротьба з відмиванням грошових коштів, AML), частиною якої є набір процедур Know Your Customer («Знай свого клієнта», KYC).

Згідно KYC, ми зобов’язуємося перевіряти, хто наш клієнт і не пов’язаний він з суспільно небезпечними групами. Тому у нас два зобов’язання:

  1. Визначення і підтвердження особи клієнта.
  2. Звірка його даних з різними списками: терористів, осіб під санкціями, членів уряду і багатьма іншими.

З кожним роком вимоги щодо KYC стають суворішими і детальніше. На початку 2017 року клієнти ePayments без верифікації ще могли отримувати плату або здійснювати перекази. Тепер це неможливо, поки вони не підтвердять особистість.

Верифікація ручна

Кілька років тому ми справлялися своїми силами. Росіяни для підтвердження особи надсилали скан певних сторінок паспорта, для підтвердження адреси – скан договору оренди, квитанції про оплату послуг ЖКГ. Пам’ятайте гру Papers, please? В ній ви, граючи за митника, перевіряєте документи за все більш ускладнюється вимогам уряду. Наш клієнтський відділ грав в неї на роботі кожен день.

Клієнти верифікуються віддалено, без візиту в офіс. Щоб процедура проходила швидше, ми наймали нових співробітників, але це тупиковий шлях. Тоді й з’явилася думка доручити частину роботи нейронної мережі. Якщо вона добре справляється з розпізнаванням осіб, значить, впорається і з нашими завданнями.

З точки зору бізнесу, система швидкої верифікації повинна вміти наступне:

  1. Класифікувати документ. Нам надсилають посвідчення особи і підтвердження адреси проживання. Система повинна відповісти, що вона одержала на вхід: паспорт громадянина РФ, договір оренди або щось інше.
  2. Порівняти обличчя на фотокартці і документі. Ми просимо клієнтів надіслати селфи з посвідченням особистості, щоб переконатися, що вони самі реєструються в платіжній системі.
  3. Витягти текст. Заповнювати десятки полів зі смартфона не дуже зручно. Набагато простіше, якщо додаток все саме зробив за тебе.
  4. Перевірити файли зображень на фотомонтаж. Не можна забувати про шахраїв, які хочуть потрапити в систему обманним шляхом.
Читайте також  Kotlin під капотом — дивимося декомпилированный байткод

На виході система повинна вказувати певний рівень довіри до клієнта: високий, середній або низький. Орієнтуючись на таку градацію, ми будемо швидше верифікувати і не злити клієнтів затягнутими термінами.

Класифікатор документів

Завдання цього модуля — упевнитися, що користувач надсилає дійсний документ і дати відповідь, що конкретно він завантажив: паспорт громадянина Казахстану, договір оренди або квитанцію для оплати ЖКГ.

Класифікатор отримує вхідні дані:

  • Фотографію або скан документа
  • Країну проживання
  • Тип документа, що зазначений клієнтом (посвідчення особи або підтвердження адреси проживання)
  • Витягнутий текст (про це трохи нижче)

На виході класифікатор повідомляє, що він отримав (паспорт, водійське посвідчення і так далі) і наскільки він упевнений у правильності відповіді.

Зараз рішення працює на архітектурі Wide Residual Network. Ми прийшли до неї не відразу. Перша версія системи швидкої верифікації працювала на базі архітектури, на яку нас надихнула VGG. У неї було 2 очевидні проблеми: велика кількість параметрів (близько 130 мільйонів) і нестійкість до положення документа. Чим більше параметрів, тим важче навчити таку нейронну мережу — вона погано узагальнює знання. Документ на фотографії повинен бути розташований по центру, класифікатор інакше довелося б навчати на вибірках, в яких він знаходиться в різних частинах фотографії. У підсумку ми відмовилися від VGG і вирішили перейти на іншу архітектуру.

Residual Network (ResNet) була крутіше, ніж VGG. Завдяки skip connections можна створити велику кількість шарів і домогтися високої точності роботи. У ResNet всього близько 1 млн параметрів і їй було байдуже положення документа. Неважливо, де він знаходиться на зображенні, вирішення на цій архітектурі справлялося з класифікацією.

Поки ми допрацьовували рішення напилком, вийшла нова модифікація архітектури, Wide Residual Network (WRN). Головна відмінність від ResNet — крок назад в плані глибини. У WRN менше шарів, але більше згорткових фільтрів. Зараз це найкраща архітектура нейронної мережі для більшості завдань і наше рішення працює на ній.

Кілька корисних рішень

Проблема № 1. Класифікатор потрібно було навчити. Ми повинні були завантажити багато російських, казахстанських і білоруських паспортів і водійських посвідчень. Але брати документи клієнтів, зрозуміло, не можна. У мережі лежать зразки, але їх занадто мало для успішного навчання нейромережі.

Рішення. Наш технічний відділ згенерував вибірку з 8000+ зразків кожного виду. Ми створюємо шаблон документа і множимо на багато рандомних зразків. Потім генеруємо випадкове положення документа в просторі щодо камери, враховуючи її математичну модель і характеристики: фокусна відстань, дозвіл матриці і так далі. При генерації штучної фотографії в якості фону вибирається випадкове зображення з готового набору даних. Після цього документ з перспективними спотвореннями розміщується на зображенні випадковим чином. На такій вибірці наша нейромережа добре навчилася і чудово визначала документ «бою». Результати — в кінці статті.

Читайте також  Рецензія на книгу «Розробка вимог до програмного забезпечення» Карла Вигерса і Джой Бітті

Проблема № 2. Банальне обмеження на обчислювальні ресурси і пам’ять. Немає сенсу подавати глибокої нейронної мережі на вхід зображення великих розмірів. А фотографії з сучасних смартфонів саме такі.

Рішення. Перед подачею на вхід фотографія стискається до розміру приблизно 300х300 пікселів. Зображення такого дозволу можна легко відрізнити один документ, що посвідчує особу, від іншого. Для вирішення цієї задачі ми можемо використовувати стандартну архітектуру Wide ResNet.

Проблема № 3. З документами, що підтверджують адресу проживання, все складніше. Договір оренди або банківську виписку можна відрізнити тільки по тексту на аркуші. Після зменшення розміру зображення до тих самих 300х300 пікселів будь-який з цих документів виглядає однаково – як аркуш формату А4 з нерозбірливим текстом.

Рішення. Для класифікації довільних документів ми внесли зміни в саму архітектуру нейронної мережі. У ній з’явився додатковий вхідний шар нейронів, який пов’язаний з вихідним шаром. Нейрони цього вхідного шару отримують на вхід вектор, що описує попередньо розпізнаний текст за допомогою моделі Bag-of-Words.

Спочатку ми навчали нейронну мережу для класифікації документів, що засвідчують особу. Ваги навченої мережі ми використовували при ініціалізації інший мережі з додатковим шаром для класифікації довільних документів. У цього рішення була висока точність, але розпізнавання тексту вимагало певний час. Різницю у швидкості обробки різними модулями і точність класифікації можна подивитися в таблиці №2.

Розпізнавання осіб

Як обдурити платіжну систему, яка перевіряє документи? Можна запозичити чужий паспорт і зареєструватися через нього. Щоб переконатися, що клієнт реєструється сам, ми просимо зробити селфи з посвідченням особи. І модуль розпізнавання повинен звірити особа на документі та особа на селфи і відповісти, це одна людина або два різних.

Як порівняти 2 особи, якщо ти машина і мислиш як машина? Перетворити фотографію в набір параметрів і порівняти між собою їх значення. Так працюють нейромережі, що розпізнають обличчя. Вони приймають зображення та перетворюють його в 128-мірний (наприклад) вектор. Коли ви подаєте на вхід інше зображення особи і просите їх порівняти, нейромережа перетворить друга особа в вектор і обчислює відстань між ними.


Таблиця 1. Приклад обчислення різниці між векторами при розпізнаванні осіб. Стів Бушемі відрізняється від себе на різних фотографіях на 0.44. А від Дженніфер Еністон – у середньому на 1.33.

Звісно, є відмінності між тим, як людина виглядає в житті і на паспорті. Ми також підбирали значення відстані між векторами і тестували на реальних людях, щоб добитися результату. У будь-якому випадку зараз остаточне рішення буде приймати особа а зауваження від системи буде лише рекомендацією.

Розпізнавання тексту

На документах є текстові поля, які допомагають класифікатором зрозуміти, що перед ним знаходиться. Вам буде зручно, якщо текст з того ж паспорта буде перенесено автоматично і не доведеться набирати вручну, ким і коли він виданий. Для цього ми зробили наступний модуль — розпізнавання і витяг тексту.

Читайте також  Вся правда про ОСРВ. Групи прапорів подій: введення і базові служби

На деяких документах, наприклад, нових паспортах РФ є Machine-readable zone (MRZ). З її допомогою легко знімати інформацію — це легко читається чорний текст на білому фоні, який просто розпізнати. До того ж MRZ має відомий формат, завдяки якому простіше отримати необхідні дані.

Якщо в задачі є документи з MRZ, то нам стає простіше. Весь процес лежить в області комп’ютерного зору. Якщо цієї зони немає, то після розпізнавання тексту потрібно вирішити одну цікаву завдання — зрозуміти, яку інформацію ми розпізнали? Наприклад, «15.05.1999» — це дата народження або дата видачі? На цьому етапі теж можна зробити помилку. MRZ хороший тим, що декодується однозначним чином. Ми завжди знаємо, яку інформацію і в якій частині MRZ шукати. Це дуже зручно для нас. Але MRZ не було на самому популярному документі, з яким буде працювати мережа — паспорті РФ.

Для розпізнавання тексту нам потрібно було дуже ефективне рішення. Текст доведеться знімати зображення, зробленого камерою телефону і не професійними фотографами. Ми протестували Google Tesseract і кілька платних рішень. Не підійшло нічого — або погано працював, чи варто було невиправдано дорого. В результаті ми стали розробляти власне рішення. Зараз ми закінчуємо його тестування. Рішення показує пристойні результати — про них можна прочитати нижче. Про модулі перевірки на фотомонтаж ми розповімо трохи пізніше, коли будуть точні результати досліджень на тестових зразках і на «бою».

Результат

Система на даний момент тестується на сегменті заявок на верифікацію з Росії. Сегмент визначається випадковою вибіркою, результати зберігаються і звіряються з рішеннями оператора клієнтського відділу по конкретному клієнту.

КраїнаТип класифікатораТочністьЧас роботи, з
РосіяПосвідчення особи99,96%0,41
РосіяДовільний документ98,62%6,89
КазахстанПосвідчення особи99,51%0,47
КазахстанДовільний документ97,25%7,66
БілорусіяПосвідчення особи98,63%0,46
БілорусіяДовільний документ98,63%9,66

Таблиця 2. Точність класифікатора документів (коректна класифікація документа порівняно з оцінкою оператора).

Один з величезних плюсів машинного навчання полягає в тому, що нейромережа дійсно навчається і робить все менше помилок. Незабаром ми закінчимо тестування на сегменті і запустимо систему верифікації в «бойовому» режимі. 30% заявок на верифікацію приходять в ePayments з Росії, Казахстану та Білорусі. За нашими підрахунками, запуск допоможе знизити навантаження на клієнтський відділ на 20-25%. У подальшому, рішення можна масштабувати на країни Європи.

Шукаєте роботу?

Ми шукаємо співробітників для роботи в офісі в Санкт-Петербурзі. Якщо вам цікавий міжнародний проект з великим пулом амбітних завдань, ми чекаємо вас. Нам не вистачає людей, які не бояться їх реалізовувати. Нижче ви знайдете посилання на вакансії на hh.ru.

  • C# Developer
  • Front-end розробник
  • QA Lead
  • QA engineer
  • Senior .NET developer/Team Lead
  • Аналітик

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

Вам також сподобається...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *