Изследвания · Обучение на правила

Научаване на четими правила от примери

Често компанията умее да разпознава добрите и лошите случаи, без да може да формулира правилото, което ги разделя: кои поръчки да се проверят, кои клиенти са допустими, кой е старши. Индуктивното логическо програмиране, или ILP, намира това правило от обозначени примери. За разлика от статистическия модел, резултатът е записано правило, което може да бъде прочетено, обсъдено и внедрено.

Как работи

Подават се три неща: известни факти за случаите, отклонение (bias), което казва кои предикати правилото може да използва и каква да е максималната му дължина, и положителни и отрицателни примери. Двигателят, вдъхновен от подхода „учене от неуспехите“, изброява правила кандидати, проверява всяко спрямо примерите и превръща всеки неуспех в ограничение, което изключва цели семейства кандидати. Накрая сглобява най-малката програма, която покрива всички положителни примери и нито един отрицателен.

  1. Известни факти
  2. Отклонение
  3. Обозначени примери
  4. Проверено правило

Не е необходимо извикване на езиковия модел. Незадължителен вариант може да поиска от езиковия модел да предложи отклонение или начални правила по описание; крайната програма винаги се проверява формално спрямо примерите.

Примери от бизнеса

Контрол на поръчките: кои поръчки да се проверят?

Отделът за обслужване на клиенти е отбелязал четири поръчки, които заслужават проверка, и пет, които не заслужават. Търсим правилото, което ги разделя, по четири сигнала.

[kb set "cmd_verif"]
[facts "cmd_verif"
  "montant_eleve(c1)." "nouveau_client(c1)."
  "montant_eleve(c2)." "nouveau_client(c2)." "carte_etrangere(c2)."
  "carte_etrangere(c3)." "adresse_differente(c3)."
  "carte_etrangere(c4)." "adresse_differente(c4)." "montant_eleve(c4)."
  "montant_eleve(c5)." "nouveau_client(c6)." "carte_etrangere(c7)."
  "adresse_differente(c8)." "nouveau_client(c8)."
  "montant_eleve(c9)." "adresse_differente(c9)."]
$biais = [ilp:bias [JSON '{
  "target": "a_verifier/1",
  "predicates": [
    {"name": "a_verifier",         "modes": ["+commande"], "role": "head", "is_bk": false},
    {"name": "montant_eleve",      "modes": ["+commande"]},
    {"name": "nouveau_client",     "modes": ["+commande"]},
    {"name": "carte_etrangere",    "modes": ["+commande"]},
    {"name": "adresse_differente", "modes": ["+commande"]}],
  "types": {"commande": "symbolic"}, "max_body": 2, "max_clauses": 3}']]
$positifs = [JSON '[["c1"], ["c2"], ["c3"], ["c4"]]']
$negatifs = [JSON '[["c5"], ["c6"], ["c7"], ["c8"], ["c9"]]']
$regle = [ilp:learn $biais "a_verifier" $positifs $negatifs [JSON '[]'] [JSON '{"beam_width": 128, "seed": 7}'] "cmd_verif"]
$regle.program

Резултат, получен на сървъра: две правила, „нов клиент и висока сума“ или „чуждестранна карта и различен адрес за доставка“, които покриват четирите случая за проверка и нито един от останалите пет.

Внедряване на наученото правило

Наученото правило е проверена логическа програма. То се добавя в този вид към производствена база и се прилага към новите поръчки.

[kb set "cmd_prod"]
[facts "cmd_prod" "montant_eleve(c42)." "nouveau_client(c42)." "carte_etrangere(c43)."]
[for $clause $regle.program [[rules "cmd_prod" $clause]]]
[query VVL "cmd_prod" "a_verifier(c42)?"]      # oui : nouveau client, montant élevé
[query VVL "cmd_prod" "a_verifier(c43)?"]      # non : carte étrangère seule

Резултат, получен на сървъра: поръчка c42 трябва да бъде проверена, поръчка c43 – не.

Човешки ресурси: кой е старши?

Ръководителите могат да посочат старшите профили. Обучението намира критерия: с опит и сертифициран. Хюго, сертифициран, но без опит, и Карол, с опит, но без сертификат, принуждават правилото да съчетае двете.

[kb set "rh_senior"]
[facts "rh_senior"
  "experimente(alice)." "experimente(carol)." "experimente(eve)." "experimente(grace)."
  "certifie(alice)." "certifie(eve)." "certifie(grace)." "certifie(hugo)."]
$biais = [ilp:bias [JSON '{
  "target": "senior/1",
  "predicates": [
    {"name": "senior",      "modes": ["+personne"], "role": "head", "is_bk": false},
    {"name": "experimente", "modes": ["+personne"]},
    {"name": "certifie",    "modes": ["+personne"]}],
  "types": {"personne": "symbolic"}, "max_body": 2, "max_clauses": 2}']]
$r = [ilp:learn $biais "senior" [JSON '[["alice"], ["eve"], ["grace"]]']
                [JSON '[["carol"], ["hugo"], ["bob"], ["dave"]]']
                [JSON '[]'] [JSON '{"beam_width": 128, "seed": 7}'] "rh_senior"]
[ilp:explain $r]

Резултат, получен на сървъра: senior(X), ако certifie(X) и experimente(X), покритие 3 от 3, статус проверено.

Одит на съществуващо правило

Правило, написано на ръка, може да бъде сверено с обозначените примери, преди да бъде пуснато в употреба: колко добри случая покрива и дали хваща лоши.

$clause = [JSON '["a_verifier(C) :- montant_eleve(C)."]']
[ilp:test $clause "a_verifier" $positifs $negatifs [JSON '[]'] "cmd_verif"]
# { n_pos, covered_pos, covered_neg, complete, consistent }

Резултат, получен на сървъра: правилото „висока сума“ покрива 3 от 4-те поръчки за проверка, но отбелязва и 2 изрядни поръчки; то не е нито пълно, нито непротиворечиво.

Насочване на обучението чрез описание

Когато полезните предикати не са очевидни, описание на естествен език може да насочи търсенето. Езиковият модел предлага насоки, а избраната програма все така се проверява спрямо примерите.

$r = [ilp:induce
  "A grandparent is two generations of parent. Use parent/2, male/1, female/1."
  "grandparent" 2
  $pos $neg
  [JSON '{"n_seeds": 5, "max_body": 3, "beam_width": 128, "seed": 42}']
  "ilp_llm_bootstrap"]

Какво гарантира и какви са ограниченията му

  • Резултатът е четимо правило, проверено спрямо всеки пример, с неговото покритие: не черна кутия.
  • Избраното правило е най-простото, съвместимо с примерите. Ако примерите не разграничават два критерия, правилото ще запази само единия: качеството на примерите е по-важно от броя им.
  • Отклонението ограничава търсенето; разширяването му забавя обучението.
  • Наученото правило може да бъде подложено на политика за валидиране, преди да бъде пуснато в производство.

Да приложим тази работа към вашите процеси?

Диагностиката тръгва от реалния начин, по който работите, и определя решенията, които могат да бъдат поверени на ИИ.

Свържете се с нас в WhatsApp