Изследвания · Обучение на правила
Научаване на четими правила от примери
Често компанията умее да разпознава добрите и лошите случаи, без да може да формулира правилото, което ги разделя: кои поръчки да се проверят, кои клиенти са допустими, кой е старши. Индуктивното логическо програмиране, или ILP, намира това правило от обозначени примери. За разлика от статистическия модел, резултатът е записано правило, което може да бъде прочетено, обсъдено и внедрено.
Как работи
Подават се три неща: известни факти за случаите, отклонение (bias), което казва кои предикати правилото може да използва и каква да е максималната му дължина, и положителни и отрицателни примери. Двигателят, вдъхновен от подхода „учене от неуспехите“, изброява правила кандидати, проверява всяко спрямо примерите и превръща всеки неуспех в ограничение, което изключва цели семейства кандидати. Накрая сглобява най-малката програма, която покрива всички положителни примери и нито един отрицателен.
- Известни факти
- Отклонение
- Обозначени примери
- Проверено правило
Не е необходимо извикване на езиковия модел. Незадължителен вариант може да поиска от езиковия модел да предложи отклонение или начални правила по описание; крайната програма винаги се проверява формално спрямо примерите.
Примери от бизнеса
Контрол на поръчките: кои поръчки да се проверят?
Отделът за обслужване на клиенти е отбелязал четири поръчки, които заслужават проверка, и пет, които не заслужават. Търсим правилото, което ги разделя, по четири сигнала.
[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"]
Какво гарантира и какви са ограниченията му
- Резултатът е четимо правило, проверено спрямо всеки пример, с неговото покритие: не черна кутия.
- Избраното правило е най-простото, съвместимо с примерите. Ако примерите не разграничават два критерия, правилото ще запази само единия: качеството на примерите е по-важно от броя им.
- Отклонението ограничава търсенето; разширяването му забавя обучението.
- Наученото правило може да бъде подложено на политика за валидиране, преди да бъде пуснато в производство.
Да приложим тази работа към вашите процеси?
Диагностиката тръгва от реалния начин, по който работите, и определя решенията, които могат да бъдат поверени на ИИ.