Чому ми в «Дадате» витрачаємо 2 млн доларів на рік на 99,99% точність обробки даних

 коли-небудь замислювалися, чому взагалі можливо виправити помилки і помилки в текстових даних, наприклад, в адреси та іменах? Чому ми думаємо, що «Терська» — це, швидше за все, Тверська вулиця, а не яка-небудь фантастична вулиця Василиятерского? А раптом це Комсомольський проспект, в якому зроблено двадцять помилок?
Наш життєвий досвід говорить про те, що впорядковані низкоэнтропийные стану менш ймовірні, ніж высокоэнтропийные невпорядковані. То є «Терська» швидше Тверська з однією помилкою, ніж Комсомольський проспект двадцятьма помилками. Однак у життя виникає багато спірних випадків, де ймовірності не так однозначні.


Наприклад, «8 Березня 1 12» — це «1-я вулиця 8 Березня, будинок 12» " або «вулиця 8 Березня, будинок 1, квартира 12»? Обидва адреси існують і правильні, але який з них відповідає вихідному?
Сіра зона
При обробці адрес виникає три групи результатів:

  • Хороші   помилок не було або їх вдалося однозначно виправити.
  • Погані   нічого не можна зробити: не вистачає даних або равновероятная неоднозначність, як в прикладі з вулицею 8 Березня;
  • Незрозумілі   помилки виправили, але зробили при цьому якісь припущення.
Фронт битви за якість — це щоб зелених адрес було якомога більше, але при цьому серед них не траплялися червоні.
Для спам-розсилки зазвичай достатньо, щоб більше спаму досягло своїх адресатів, при цьому не відправляти листи на зовсім вже очевидні «чорні діри». То є важливо, щоб база після обробки стала краще, чим була. Або хоча не стала гірше. Це, мабуть, єдиний випадок, коли відсоток розпізнаних даних має самостійну цінність.
 інших випадках потрібно швидко отримати підмножина «зелених» даних, де абсолютно точно немає помилок, і відразу запустити їх в роботу: видавати кредити, слати товари, використовувати для скорингу та виписувати страхові поліси. Отримали 50% зелених даних? Поганенько, але вже цінно для бізнесу. 80%? Супер, кількість ручної роботи скоротилося в 5 раз! 95%?
 з іншими «сіренькими» можна розібратися потім. Параноїдально доводити всю базу до 100% зазвичай не має особливого сенсу з точки зору бізнесу, тому цінних і актуальних клієнтів виправляють форсовано (зазвичай з залученням ручної праці співробітників або підйомом первинної документації). А решта так і в «сірій зоні», поки клієнт сам не зв'яжеться з компанією.
Червоні зеленої шкурі
 це все має сенс тільки коли наші «зелені»   дійсно зелені. Такі, що ми їм віримо, як самим собі і навіть більше. Коли їх не потрібно перевіряти.
Припустимо, що у нас є корзина з двома десятками яблук. Ми знаємо, що серед них є отруєні. Розкусиш   помреш. Але скільки їх   невідомо. Може всі отруєні, а і не одного.
Споживча цінність такого кошика близька до нулю. Розумна людина зважиться взяти хоч одне яблучко, тільки якщо альтернативою буде голодна смерть.
Тепер припустимо, що в 5 яблук з 20 встромлена табличка «це яблуко точно не отруєно». Яблука ті ж, тільки є ще й таблички. Тепер інша справа. Так, 5 яблук з 20 — це небагато, але  можна з'їсти. А якщо їх не 5, а 15? Цінності в три рази більше!
 якщо їх  19, але на табличці буде не «точно не отруєно», а «95%, що не отруєно»? Ризикнете? Очевидно, що споживча цінність такого кошика різко падає.

Ці таблички в розборі слабоструктурованих даних називаються кодами якості. &Nbsp;суті це ті ж таблички: «точно не отруєно», «не можна при вагітності і лактації», «ціаністий калій, 100 мг».
Зламати, щоб полагодити
Десять років тому у нас в «Дадате» вже були відмінні алгоритми, які виправляли навіть дуже складні адреси: з помилками, порушеним порядком, з перейменуваннями і переподчинениями.
Кожне перетворення добре пояснювалося логікою програми, але з точки зору людини було багато бузувірських випадків, коли результуючий очищений адресу було зовсім не схожий на вихідний. У насправді, будь-яка абракадабра, навіть фзвща8г2з98оаз9, може бути адресою з великою кількістю помилок. Але це логікою програми, а не людини з здоровим глуздом.
Тому ми додали процес валідації розібраних даних. Валідація спеціально псує хороші дані і робить з них погані. Для валідації використовуються зовсім інші алгоритми, ніж для розбору — вони пробують розібрані дані искорежить таким чином, щоб знову вийшов вихідний адресу. Таким чином перевіряється відразу кілька речей:
  •   помилки в розборі?
  • Дійсно чи результуючий адреса відповідає, або алгоритми щось нафантазували?
  • Дійсно код якості відображає те, що сталося з адресою?
Валидированные таким чином дані — дуже зелені. Для валидированных даних ми домоглися точності 99,99%, або не більше 1 помилки на 10000 записів. Така точність гарантована щодня актуализируемыми тестами десятків мільйонів прикладів. Це надлюдський рівень якості. Блискуча перемога людського розуму над самим собою!
Головне тут — «щодня актуализируемые тести з десятків мільйонів прикладів». Створення тестів   одноразова завдання, а постійний процес, оскільки змінюються довідники, і життя приносить нові випадки. Без тестів неможливо гарантувати, що «зелені» дані   дійсно «зелені», а без цього для більшості реальних застосувань все втрачає сенс.
Магія «дев'яток»
Різниця між якістю 99,99% і 99,98%   два рази. У першому випадку 1 помилка на 10 000, а у другому — 2 помилки на 10 000 записів.
Досягнення і постійне обслуговування кожної гарантованої «дев'ятки» коштує дорожче, ніж усі попередні «дев'ятки» разом узяті. Це не тільки значно більш складні алгоритми, але і значно більш об'ємні тести, які повинні репрезентативно відображати різні випадки в реальних даних і різні розгалуження цих більш складних алгоритмів.
Якщо 90% можна гарантувати репрезентативним тестом з 10 тисяч тестових пар (вихідний адресу і очікуваний очищений), то для 99% знадобиться вже близько 100 тисяч, а для 99,99%   не менше 10 мільйонів тестів. Не випадкових записів, а саме тестів, показність кожного випадку яких відображає зустрічальність проблеми в реальних даних.

Оскільки на таких обсягах домогтися розподілу зустрічальності вкрай важко, то доводиться використовувати ще більші обсяги, щоб вже точно все зустрілося. У підсумку мінімальний корпус тестів для російських адрес — це приблизно 50 мільйонів тестових пар, які актуалізуються фахівцями на кілька відсотків рік. Це означає, що щомісяця вручну перевіряються десятки і сотні тисяч адрес. Поступово процеси налагоджують і обслуговування такого корпусу знижується, але навряд на це варто розраховувати перші роки.
Точність «Дадаты» нам потрібно близько двох мільйонів доларів в рік.
Розробка парсерів цілком силам талановитим ентузіастам і невеликим командам, але високі і гарантовані показники якості довільних даних практично недосяжні. &Nbsp;цим же причин перенесення технології однієї країни і мови на інші практично еквівалентний розробки з нуля, оскільки левова частка часу і витрат — це якісні тести, а не алгоритми.
Висновки
Описані явища характерні не тільки для адрес, але і для будь-яких застосовуваних у реальному бізнесі результатів роботи з слабоструктурованими даними. Для глибокого машинного навчання, великих даних, тексту, голосу, зображень та відео   скрізь будуть ці закономірності:
  1. Точні коди якості важливіше точності обробки даних.
  2. Коди якості повинен присвоювати не той алгоритм, який обробляє дані.
  3. Точність недосяжна без хороших тестів.
  4. Хороші тести довго створювати і дорого підтримувати.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.