Обробляйте іпотечні документи за допомогою інтелектуальної обробки документів за допомогою Amazon Texttract і Amazon Comprehend PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Обробляйте іпотечні документи за допомогою інтелектуальної обробки документів за допомогою Amazon Texttract і Amazon Comprehend

Організації, які займаються кредитуванням та іпотекою, щодня обробляють тисячі документів. Від нової заявки на іпотеку до рефінансування іпотеки ці бізнес-процеси включають сотні документів на заявку. Сьогодні доступна обмежена автоматизація для обробки та вилучення інформації з усіх документів, особливо через різні формати та макети. Через великий обсяг додатків фіксація стратегічної інформації та отримання ключової інформації з вмісту є трудомістким, дуже ручним, схильним до помилок і дорогим процесом. Застарілі інструменти оптичного розпізнавання символів (OCR) недорогі, схильні до помилок, вимагають багато налаштувань і їх важко масштабувати. Інтелектуальна обробка документів (IDP) із послугами штучного інтелекту (AI) AWS допомагає автоматизувати та прискорити обробку заявок на іпотеку з цілями швидшого та якіснішого прийняття рішень, одночасно зменшуючи загальні витрати.

У цій публікації ми демонструємо, як можна використовувати можливості машинного навчання (ML). Текст Amazon та «Амазонка» для обробки документів у новій іпотечній заявці без потреби в навичках ML. Ми досліджуємо різні етапи IDP, як показано на наступному малюнку, і те, як вони пов’язані з етапами процесу подачі заявки на іпотеку, такими як подання заявки, андеррайтинг, перевірка та закриття.

Незважаючи на те, що кожна заявка на іпотеку може бути унікальною, ми взяли до уваги деякі з найпоширеніших документів, які включаються в заявку на іпотеку, наприклад форму Уніфікованої заявки на житловий кредит (URLA-1003), форми 1099 та іпотечну довідку.

Огляд рішення

Amazon Texttract — це служба ML, яка автоматично витягує текст, рукописний текст і дані зі сканованих документів за допомогою попередньо навчених моделей ML. Amazon Comprehend — це служба обробки природної мови (NLP), яка використовує ML для виявлення цінних ідей і зв’язків у тексті та може виконувати класифікацію документів, розпізнавання об’єктів імен (NER), моделювання тем тощо.

На наступному малюнку показано етапи IDP, пов’язані з етапами процесу подачі заявки на іпотеку.

На зображенні показано високорівневу архітектуру рішення для етапів інтелектуальної обробки документів (IDP), що стосується етапів подачі заявки на іпотеку.

На початку процесу документи завантажуються в Служба простого зберігання Amazon (Amazon S3) відро. Це ініціює процес класифікації документів для класифікації документів за відомими категоріями. Після класифікації документів наступним кроком є ​​вилучення з них ключової інформації. Потім ми збагачуємо вибрані документи, наприклад редагування особистої інформації (PII), додавання тегів до документів, оновлення метаданих тощо. Наступний крок включає перевірку даних, отриманих на попередніх етапах, щоб переконатися в повноті заявки на іпотеку. Перевірку можна виконати за допомогою правил перевірки бізнесу та правил перевірки між документами. Оцінки достовірності отриманої інформації також можна порівняти із встановленим порогом і автоматично скерувати до перевіряючого через Розширений ШІ в Амазонці (Amazon A2I), якщо порогове значення не досягнуто. На завершальному етапі процесу витягнуті та перевірені дані надсилаються до подальших систем для подальшого зберігання, обробки або аналізу даних.

У наступних розділах ми детально обговорюємо етапи ВПО, оскільки вони пов’язані з етапами подачі заявки на іпотеку. Ми проходимо фази IDP та обговорюємо типи документів; як ми зберігаємо, класифікуємо та витягуємо інформацію, а також як ми збагачуємо документи за допомогою машинного навчання.

Зберігання документів

Amazon S3 — це служба зберігання об’єктів, яка пропонує найкращі в галузі масштабованість, доступність даних, безпеку та продуктивність. Ми використовуємо Amazon S3 для безпечного зберігання іпотечних документів під час і після подачі заявки на іпотеку. А пакет заявок на іпотеку може містити кілька типів форм і документів, наприклад URLA-1003, 1099-INT/DIV/RR/MISC, W2, платіжні квитанції, банківські виписки, виписки з кредитних карток тощо. Ці документи подаються заявником на етапі подання заявки на іпотеку. Не переглядаючи їх вручну, можна не відразу зрозуміти, які документи входять до пакета. Цей ручний процес може бути трудомістким і дорогим. На наступному етапі ми автоматизуємо цей процес за допомогою Amazon Comprehend, щоб класифікувати документи за відповідними категоріями з високою точністю.

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

Класифікація документів — це метод, за допомогою якого велика кількість неідентифікованих документів може бути класифікована та маркована. Ми виконуємо цю класифікацію документів за допомогою Amazon Comprehend користувацький класифікатор. Спеціальний класифікатор — це модель ML, яку можна навчити за допомогою набору документів з мітками розпізнавати класи, які вас цікавлять. Після того, як модель навчена та розгорнута позаду розміщеної кінцевої точки, ми можемо використовувати класифікатор для визначення категорії (або класу), до якої належить певний документ. У цьому випадку ми навчаємо спеціальний класифікатор багатокласний режим, що можна зробити за допомогою файлу CSV або доповненого файлу маніфесту. Для цілей цієї демонстрації ми використовуємо файл CSV для навчання класифікатора. Зверніться до нашого GitHub сховище для повного зразка коду. Нижче наведено загальний огляд необхідних кроків:

  1. Видобувайте простий текст у кодуванні UTF-8 із файлів зображень або PDF за допомогою Amazon Texttract DetectDocumentText API.
  2. Підготуйте навчальні дані для навчання спеціального класифікатора у форматі CSV.
  3. Навчіть спеціальний класифікатор за допомогою файлу CSV.
  4. Розгорніть навчену модель із кінцевою точкою для класифікації документів у реальному часі або використовуйте багатокласовий режим, який підтримує як операції в реальному часі, так і асинхронні.

Наступна діаграма ілюструє цей процес.

Зображення показує процес навчання спеціального класифікатора Amazon Comprehend і класифікацію документів за допомогою навченої та розгорнутої моделі класифікатора (у реальному часі або пакетно).

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

Вилучення документів

На цьому етапі ми витягуємо дані з документа за допомогою Amazon Texttract і Amazon Comprehend. Для структурованих і напівструктурованих документів, що містять форми та таблиці, ми використовуємо Amazon Texttract Аналіз документа API. Для спеціальних документів, таких як документи, що посвідчують особу, Amazon Texttract надає AnalyzeID API. Деякі документи також можуть містити щільний текст, і вам може знадобитися витягти з них ключові терміни, що стосуються бізнесу, також відомі як юридичні особи. Ми використовуємо розпізнавання індивідуальних сутностей можливість Amazon Comprehend навчати спеціальний засіб розпізнавання об’єктів, який може ідентифікувати такі об’єкти з щільного тексту.

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

Витягти дані з Єдиної заявки на житловий кредит URLA-1003

Уніфікована заявка на житловий кредит (URLA-1003) — це стандартна форма заявки на іпотечний кредит. Це досить складний документ, який містить інформацію про претендента на іпотеку, тип нерухомості, що купується, суму фінансування та інші відомості про характер придбання нерухомості. Нижче наведено зразок URLA-1003, і ​​ми маємо намір отримати інформацію з цього структурованого документа. Оскільки це форма, ми використовуємо API AnalyzeDocument із типом функції ФОРМА.

На зображенні зображено зразок єдиної форми заявки на житловий кредит URLA-1003

Тип функції FORM витягує інформацію форми з документа, яка потім повертається у форматі пари ключ-значення. Наступний фрагмент коду використовує amazon-textract-textractor Бібліотека Python для отримання інформації з форми лише за допомогою кількох рядків коду. Спосіб зручності call_textract() телефонує AnalyzeDocument Внутрішній API і параметри, передані методу, абстрагують деякі конфігурації, необхідні API для виконання завдання вилучення. Document це зручний метод, який використовується для аналізу відповіді JSON з API. Він забезпечує високорівневу абстракцію та робить висновок API повторюваним і легким для отримання інформації. Для отримання додаткової інформації див Синтаксичний аналізатор текстових відповідей та Textractor.

from textractcaller.t_call import call_textract, Textract_Features
from trp import Document

response_urla_1003 = call_textract(input_document='s3://<your-bucket>/URLA-1003.pdf', 
                                   features=[Textract_Features.FORMS])
doc_urla_1003 = Document(response_urla_1003)
for page in doc_urla_1003.pages:
    forms=[]
    for field in page.form.fields:
        obj={}
        obj[f'{field.key}']=f'{field.value}'
        forms.append(obj)
print(json.dumps(forms, indent=4))

Зверніть увагу, що вихідні дані містять значення для прапорців або перемикачів, які існують у формі. Наприклад, у прикладі документа URLA-1003, Купити вибрано варіант. Відповідний вихід для радіокнопки витягується як "Purchase” (ключ) і “SELECTED” (значення), що вказує на те, що перемикач вибрано.

[
    { "No. of Units": "1" },
    { "Amount": "$ 450,000.00" },
    { "Year Built": "2010" },
    { "Purchase": "SELECTED" },
    { "Title will be held in what Name(s)": "Alejandro Rosalez" },
    { "Fixed Rate": "SELECTED" },
    ...
]

Витяг даних із 1099 форм

Пакет заявок на іпотечний кредит також може містити низку документів IRS, наприклад 1099-DIV, 1099-INT, 1099-MISC та 1099-R. Ці документи показують прибуток заявника через відсотки, дивіденди та інші різні компоненти доходу, які є корисними під час андеррайтингу для прийняття рішень. На наступному зображенні показано колекцію цих документів, схожих за структурою. Однак у деяких випадках документи містять інформацію форми (позначену червоними та зеленими рамками), а також табличну інформацію (позначену жовтими рамками).

На зображенні показано зразки 1099 форм INT, DIV, MISC і R.

Щоб отримати інформацію з форми, ми використовуємо код, подібний до описаного раніше з AnalyzeDocument API. Проходимо додаткову функцію ТАБЛИЦЯ до API, щоб вказати, що нам потрібні як дані форми, так і таблиці, витягнуті з документа. Наступний фрагмент коду використовує AnalyzeDocument API із функціями FORMS і TABLES у документі 1099-INT:

from textractcaller.t_call import call_textract, Textract_Features
from trp import Document
response_1099_int = call_textract(input_document='s3://<your-bucket>/1099-INT-2018.pdf',
                                  features=[Textract_Features.TABLES, 
                                            Textract_Features.FORMS])
doc_1099_int = Document(response_1099_int)
num_tables=1
for page in doc_1099_int.pages:     
    for table in page.tables:
        num_tables=num_tables+1
        for r, row in enumerate(table.rows):
            for c, cell in enumerate(row.cells):
                print(f"Cell[{r}][{c}] = {cell.text}")
        print('n')

Оскільки документ містить одну таблицю, вихід коду виглядає так:

Table 1
-------------------
Cell[0][0] = 15 State 
Cell[0][1] = 16 State identification no. 
Cell[0][2] = 17 State tax withheld 
Cell[1][0] = 
Cell[1][1] = 34564 
Cell[1][2] = $ 2000 
Cell[2][0] = 
Cell[2][1] = 23543 
Cell[2][2] = $ 1000

Інформація в таблиці містить положення клітинки (рядок 0, стовпець 0 тощо) і відповідний текст у кожній клітинці. Ми використовуємо зручний метод, який може перетворити ці дані таблиці в зручне для читання подання сітки:

from textractprettyprinter.t_pretty_print import Textract_Pretty_Print, get_string, Pretty_Print_Table_Format
print(get_string(textract_json=response_1099_int, 
                 table_format=Pretty_Print_Table_Format.grid, 
                 output_type=[Textract_Pretty_Print.TABLES]))

Ми отримуємо наступний результат:

+----------+-----------------------------+-----------------------+
| 15 State | 16 State identification no. | 17 State tax withheld |
+----------+-----------------------------+-----------------------+
|          | 34564                       | $ 2000                |
+----------+-----------------------------+-----------------------+
|          | 23543                       | $ 1000                |
+----------+-----------------------------+-----------------------+

Щоб отримати результат у зручному для використання форматі CSV, тип формату Pretty_Print_Table_Format.csv можна передати в table_format параметр. Також підтримуються інші формати, такі як TSV (значення, розділені табуляцією), HTML і Latex. Для отримання додаткової інформації див Text-PrettyPrinter.

Витяг даних із заставної

Пакет заявок на іпотеку може містити неструктуровані документи зі щільним текстом. Деякими прикладами щільних текстових документів є контракти та угоди. Іпотечна нота — це угода між заявником іпотеки та кредитором або іпотечною компанією, яка містить інформацію у щільних абзацах. У таких випадках відсутність структури ускладнює пошук ключової бізнес-інформації, яка є важливою в процесі подання заявки на іпотеку. Є два підходи до вирішення цієї проблеми:

У наведеному нижче зразку іпотечної нотатки ми конкретно зацікавлені в тому, щоб дізнатися суму щомісячного платежу та основну суму.

На зображенні показано зразок документа про заставну.

Для першого підходу ми використовуємо Query та QueriesConfig зручні методи налаштування набору запитань, які передаються до Amazon Texttract AnalyzeDocument виклик API. Якщо документ багатосторінковий (PDF або TIFF), ми також можемо вказати номери сторінок, на яких Amazon Texttract має шукати відповіді на запитання. Наступний фрагмент коду демонструє, як створити конфігурацію запиту, здійснити виклик API та згодом проаналізувати відповідь, щоб отримати відповіді з відповіді:

from textractcaller import QueriesConfig, Query
import trp.trp2 as t2

#Setup the queries
query2 = Query(text="What is the principal amount borrower has to pay?", alias="PRINCIPAL_AMOUNT", pages=["1"])
query4 = Query(text="What is the monthly payment amount?", alias="MONTHLY_AMOUNT", pages=["1"])

#Setup the query config with the above queries
queries_config = QueriesConfig(queries=[query1, query2, query3, query4])
#Call AnalyzeDocument with the queries_config
response_mortgage_note = call_textract(input_document='s3://<your-bucket>/Mortgage-Note.pdf',
                                       features=[Textract_Features.QUERIES],
                                       queries_config=queries_config)
doc_mortgage_note: t2.TDocumentSchema = t2.TDocumentSchema().load(response_mortgage_note) 

entities = {}
for page in doc_mortgage_note.pages:
    query_answers = doc_mortgage_note.get_query_answers(page=page)
    if query_answers:
        for answer in query_answers:
            entities[answer[1]] = answer[2]
print(entities)

Ми отримуємо наступний результат:

{
    'PRINCIPAL_AMOUNT': '$ 555,000.00',
    'MONTHLY_AMOUNT': '$2,721.23',
}

Для другого підходу ми використовуємо Amazon Comprehend DetectEntities API із заставною, яка повертає сутності, які він виявляє в тексті з a попередньо визначений набір сутностей. Це сутності, з якими розпізнавач сутностей Amazon Comprehend попередньо навчений. Однак, оскільки наша вимога полягає в тому, щоб виявляти конкретні сутності, спеціальний засіб розпізнавання сутностей Amazon Comprehend навчається за допомогою набору зразків документів про іпотечну накладну та списку сутностей. Ми визначаємо імена сутностей як PRINCIPAL_AMOUNT та MONTHLY_AMOUNT. Навчальні дані готуються після навчання Amazon Comprehend інструкції з підготовки даних для розпізнавання особливих сутностей. Розпізнавач сутностей можна навчати анотації документів або списки сутностей. Для цілей цього прикладу ми використовуємо списки об’єктів для навчання моделі. Після навчання моделі ми можемо розгорнути її за допомогою a кінцева точка реального часу або в пакетний режим щоб виявити дві сутності у вмісті документа. Нижче наведено кроки, пов’язані з навчанням і розгортанням спеціального розпізнавача сутностей. Щоб отримати повний огляд коду, зверніться до нашого репозиторію GitHub.

  1. Підготуйте навчальні дані (список об’єктів і документи у форматі звичайного тексту (кодування UTF-8).
  2. Розпочніть навчання розпізнавача сутностей за допомогою CreateEntityRecognizer API, що використовує навчальні дані.
  3. Розгорніть навчену модель із кінцевою точкою реального часу за допомогою Створити кінцеву точку API.

Витягти дані з паспорта США

Текст Amazon аналіз документів, що посвідчують особу здатність виявляти та отримувати інформацію з ідентифікаційних документів США, таких як водійські права та паспорт. The AnalyzeID API здатний виявляти та інтерпретувати неявні поля в ідентифікаційних документах, що дозволяє легко витягувати певну інформацію з документа. Документи, що посвідчують особу, майже завжди є частиною пакета заявок на іпотеку, оскільки вони використовуються для перевірки особи позичальника під час процесу андеррайтингу та для підтвердження правильності біографічних даних позичальника.

На зображенні показано зразок паспорта США

Ми використовуємо зручний метод під назвою call_textract_analyzeid, який називає AnalyzeID API внутрішньо. Потім ми повторюємо відповідь, щоб отримати виявлені пари ключ-значення з ідентифікаційного документа. Перегляньте наступний код:

from textractcaller import call_textract_analyzeid
import trp.trp2_analyzeid as t2id

response_passport = call_textract_analyzeid(document_pages=['s3://<your-bucket>/Passport.pdf'])
doc_passport: t2id.TAnalyzeIdDocument = t2id.TAnalyzeIdDocumentSchema().load(response_passport)

for id_docs in response_passport['IdentityDocuments']:
    id_doc_kvs={}
    for field in id_docs['IdentityDocumentFields']:
        if field['ValueDetection']['Text']:
            id_doc_kvs[field['Type']['Text']] = field['ValueDetection']['Text']
print(id_doc_kvs)

AnalyzeID повертає інформацію у структурі, що називається IdentityDocumentFields, який містить нормалізовані ключі та відповідні їм значення. Наприклад, у наступному виводі FIRST_NAME є нормалізованим ключем, а значенням є ALEJANDRO. Однак у прикладі зображення паспорта поле для імені позначено як «Імена / Прєноми / Номбре». AnalyzeID зміг нормалізувати це в назву ключа FIRST_NAME. Список підтримуваних нормалізованих полів див Об’єкти відповіді ідентифікаційної документації.

{
    'FIRST_NAME': 'ALEJANDRO',
    'LAST_NAME': 'ROSALEZ',
    'DOCUMENT_NUMBER': '918268822',
    'EXPIRATION_DATE': '31 JAN 2029',
    'DATE_OF_BIRTH': '15 APR 1990',
    'DATE_OF_ISSUE': '29 JAN 2009',
    'ID_TYPE': 'PASSPORT',
    'ENDORSEMENTS': 'SEE PAGE 27',
    'PLACE_OF_BIRTH': 'TEXAS U.S.A.'
}

Іпотечний пакет може містити декілька інших документів, таких як платіжна квитанція, форма W2, виписка з банківського рахунку, виписка з кредитної картки та лист із підтвердженням працевлаштування. У нас є зразки для кожного з цих документів разом із кодом, необхідним для отримання даних із них. Щоб отримати повну кодову базу, перегляньте блокноти в нашому GitHub сховище.

Збагачення документів

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

У попередньому зразку документа платіжної квитанції ми виконуємо редагування даних ідентифікаційної інформації, таких як SSN, ім’я, номер банківського рахунку та дати. Щоб визначити ідентифікаційну інформацію в документі, ми використовуємо Amazon Comprehend Виявлення ідентифікаційної інформації можливість через DetectPIIEntities API. Цей API перевіряє вміст документа, щоб визначити наявність ідентифікаційної інформації. Оскільки для цього API потрібне введення у форматі простого тексту в кодуванні UTF-8, ми спочатку витягуємо текст із документа за допомогою Amazon Texttract DetectDocumentText API, який повертає текст із документа, а також повертає геометричну інформацію, таку як розміри обмежувальної рамки та координати. Комбінація обох вихідних даних потім використовується для редагування документа в рамках процесу збагачення.

Перегляньте, перевірте та інтегруйте дані

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

Третій тип перевірки пов’язаний із оцінкою достовірності вилучених даних на етапі вилучення документа. Amazon Texttract і Amazon Comprehend повертають оцінку достовірності для виявлених форм, таблиць, текстових даних і об’єктів. Ви можете налаштувати поріг оцінки достовірності, щоб переконатися, що лише правильні значення надсилаються вниз. Це досягається за допомогою Amazon A2I, який порівнює показники достовірності виявлених даних із заздалегідь визначеним порогом достовірності. Якщо порогове значення не досягнуто, документ і витягнутий результат направляються людині для перегляду через інтуїтивно зрозумілий інтерфейс користувача. Рецензент вживає коригувальні дії щодо даних і зберігає їх для подальшої обробки. Для отримання додаткової інформації див Основні концепції Amazon A2I.

Висновок

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

Як наступний крок ви можете спробувати зразки коду та блокноти в наших GitHub сховище. Щоб дізнатися більше про те, як IDP може полегшити роботу з обробкою документів, відвідайте веб-сайт Автоматизувати обробку даних з документів.


Про авторів

Обробляйте іпотечні документи за допомогою інтелектуальної обробки документів за допомогою Amazon Texttract і Amazon Comprehend PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Анжан Бісвас є старшим архітектором рішень AI Services, який спеціалізується на AI/ML та аналізі даних. Анджан є частиною всесвітньої команди надання послуг штучного інтелекту та працює з клієнтами, щоб допомогти їм зрозуміти та розробити рішення бізнес-проблем за допомогою штучного інтелекту та машинного навчання. Анджан має понад 14 років досвіду роботи з глобальними ланцюжками постачання, виробництвом і роздрібними організаціями та активно допомагає клієнтам почати роботу та масштабувати послуги AWS AI.

Обробляйте іпотечні документи за допомогою інтелектуальної обробки документів за допомогою Amazon Texttract і Amazon Comprehend PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Двіті Патак є старшим технічним менеджером із обслуговування клієнтів із Сан-Дієго. Вона зосереджена на тому, щоб допомогти напівпровідниковій промисловості залучитися до AWS. У вільний час вона любить читати про нові технології та грати в настільні ігри.

Обробляйте іпотечні документи за допомогою інтелектуальної обробки документів за допомогою Amazon Texttract і Amazon Comprehend PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Баладжі Пулі є архітектором рішень із Bay Area, CA. Наразі ми допомагаємо вибраним клієнтам із медико-біологічних наук на північному заході США прискорити впровадження хмарних технологій AWS. Баладжі любить подорожувати та любить досліджувати різні кухні.

Часова мітка:

Більше від AWS Машинне навчання