Հեղինակ՝ Ադրիեն Բոլը, Կլեմեն Դումուրոն և Ժոզեֆ Դյուրոն

Snips Embedded Voice Platform-ը թույլ է տալիս սարքի ցանկացած արտադրողի ստեղծել Private by Design ձայնային ինտերֆեյս իրենց արտադրանքի համար: Այն կարգավորում է Wakeword-ի հայտնաբերումը, խոսքի ճանաչումը և բնական լեզվի ըմբռնումը ամբողջությամբ սարքի վրա, այնպես որ ձեր անձնական ձայնային տվյալներից ոչ մեկը չի գնում ամպ: Snips հարթակը բաց է նաև ոչ առևտրային օգտագործման համար, բոլորի համար, ովքեր ցանկանում են կոտրել ձայնային օգնականը տանը: Raspberry Pi 3-ով, խոսափողով և ձեր ժամանակի մեկ ժամով կարող եք սկսել ձայնով կառավարել ձեր տունը՝ լիովին վերահսկելով ձեր տվյալները:

Այսօր Snips թիմը լրացուցիչ քայլ է անում՝ խթանելու գաղտնիությունը պահպանող Արհեստական ​​ինտելեկտի օգտագործումը.

Snips NLU-ն մշակվել է՝ հաշվի առնելով ճշգրտությունը և հետքը: Մենք ցանկանում էինք, որ մեր ներկառուցված լուծումը տա նման կամ ավելի լավ կատարումներ, ինչպես ամպի վրա հիմնված NLU լուծումները (Dialogflow, Amazon Lex և այլն): Մենք նաև ցանկանում էինք, որ այն գործարկվի ցանկացած վայրում՝ ոչ միայն սերվերների, այլ նաև պլանշետների, բջջային հեռախոսների կամ ցանկացած միացված սարքի վրա: Դրան հասնելու համար մենք պետք է ամբողջությամբ վերանայեինք, թե ինչպես կառուցել NLU շարժիչ, ինչպես ինժեներական, այնպես էլ մեքենայական ուսուցման առումով: Եկեք ձեզ ծանոթացնենք Snips NLU-ին:

Բնական լեզվի ըմբռնում

NLU շարժիչներն օգտագործվում են ցանկացած չաթբոտ կամ ձայնային օգնական սնուցելու համար: Նրանց նպատակն է բացահայտել օգտատիրոջ մտադրությունը (a.k.a intent) և հարցումների պարամետրերը (a.k.a slots): Այնուհետև մշակողը կարող է օգտագործել սա՝ համապատասխան գործողությունը կամ պատասխանը որոշելու համար:

Եկեք սկսենք պարզ օրինակին նայելով և տեսնենք, թե ինչ եք ակնկալում լավ NLU շարժիչից: Դիտարկենք հետևյալ տվյալների բազան, որն օգտագործվում է եղանակի պարզ օգնականին մի քանի հարցումների օրինակներով մարզելու համար.

  • Give me the weather for [tomorrow](snips/datetime)
  • Show me the [Paris](location)'s weather for [Sunday](snips/datetime)

Եվ քաղաքների կարճ ցուցակ.

  • Paris
  • New York

Դետերմինիստական ​​վարքագիծ

Առաջին բանը, որ դուք ցանկանում եք, այն է, որ բոլոր օրինակները, որոնք դուք տալիս եք մոդելը վարժեցնելու համար, ճիշտ կերպով ապահովված լինեն շարժիչով: Սա համակարգը կանխատեսելի և օգտագործման համար դյուրին է դարձնում. եթե հարցումը ճիշտ վերլուծված չէ, ապա ավելացրեք այն տվյալների շտեմարանում և այն անմիջապես կաշխատի:

Ընդհանրացման հզորություն

Այս դետերմինիստական ​​վարքագիծը հիանալի է ամրության և կանխատեսելիության համար, բայց հզոր NLU շարժիչը նույնպես պետք է ունենա որոշակի ընդհանրացման հզորություն: Դուք ցանկանում եք, որ համակարգը ոչ միայն ճանաչի ուսուցման հավաքածուում ներկայացված օրինաչափությունները, այլ նաև բոլոր հնարավոր տատանումները, որոնք գալիս են բնական խոսելուց: Եթե ​​վերադառնանք նախորդ տվյալների բազային, ապա խելամիտ է ակնկալել, որ NLU շարժիչը կվերլուծի այնպիսի հարցում, ինչպիսին է. .

Կազմակերպության որոշում

Ի վերջո, ձեզ անհրաժեշտ է մի բան, որը կոչվում է Entity Resolution: Ըստ էության, «2018 թվականի մարտի երրորդ կիրակի» հատվածը հանելը «Ինձ եղանակ է պետք 2018 թվականի մարտի երրորդ կիրակիի համար» նախադասությունից լավ առաջին քայլ է: Այնուամենայնիվ, այն, ինչ դուք ցանկանում եք անել հաջորդը, եղանակային API-ն է անվանել՝ եղանակը պարզելու համար, և քիչ հավանական է, որ API-ն ընդունի չմշակված ամսաթվերի տողերը որպես մուտքագրում: Այն ավելի շուտ կվերցնի ISO ձևաչափով ամսաթիվ՝ 2018–03–18: Վերջինը կոչվում է կազմակերպության լուծված արժեք:

Ամսաթվերը և ժամերը սուբյեկտների օրինակներ են, որոնք կարող են լուծվել: Կան շատ ուրիշներ, ինչպիսիք են թիվը, ջերմաստիճանը, տևողությունը և այլն: Մենք անվանում ենք այս հատուկ տեսակի միավորներ Ներկառուցված կազմակերպություններ, քանի որ շարժիչն աջակցում է դրանք բնիկորեն՝ չպահանջելով, որ մշակողն օրինակներ ներկայացնի դրանց համար (ինչը գործ մաքսային սուբյեկտների համար): Ներկառուցված սուբյեկտների ցանկը, որոնք ներկայումս աջակցվում են Snips-ի կողմից, հասանելի է այստեղ, մենք նախատեսում ենք հետագայում ավելացնել ավելին:

Այս նպատակները բավարարելու համար՝ դետերմինիստական ​​վարքագիծ, ընդհանրացման ուժ և միավորներ լուծելու կարողություն, մենք կառուցեցինք վերը նկարում նկարագրված վերամշակման խողովակաշարը: Այն ստանում է տեքստը որպես մուտքագրում և դուրս է բերում կառուցվածքային պատասխան, որը պարունակում է մտադրությունը և սլոտների ցանկը: Խողովակաշարի հիմնական մշակման միավորը NLU շարժիչն է։ Այն պարունակում է երկու մտադրության վերլուծիչներ, որոնք կոչվում են հաջորդաբար՝ դետերմինիստական ​​մտադրության վերլուծիչ և հավանականական:

Դետերմինիստական ​​վերլուծիչը հենվում է կանոնավոր արտահայտությունների վրա, որպեսզի համապատասխանի մտադրություններին և սլոտներին, ինչը հանգեցնում է կատարյալ վարքի ուսուցման օրինակների վրա, բայց չի ընդհանրացնում: Այս վերլուծիչն առաջինն է, որն օգտագործվում է իր խստության պատճառով:

Հավանական վերլուծիչն օգտագործվում է ամեն անգամ, երբ առաջին վերլուծիչը չի կարողանում համապատասխանություն գտնել: Այն օգտագործում է մեքենայական ուսուցում՝ ընդհանրացնելու համար գնացքի ժամանակ դիտվող նախադասությունների շարքը՝ դրանով իսկ մեղմելով դետերմինիստական ​​վերլուծիչի սահմանափակումները: Այս վերլուծիչը ներառում է երկու հաջորդական քայլեր՝ մտադրությունների դասակարգում և բնիկի լրացում: Մտադրության դասակարգման քայլը հիմնված է լոգիստիկ ռեգրեսիայի վրա՝ օգտագործողի արտահայտած մտադրությունը բացահայտելու համար: Սլոտի լցոնումը բաղկացած է Պայմանական պատահական դաշտ (CRF) գծային շղթայից, որը հատուկ պատրաստված է հայտնաբերված մտադրության անցքերը հանելու համար:

Ինչ վերաբերում է մոդելների ընտրությանը, մենք փորձեցինք տասնյակ տարբեր ճարտարապետություններ, այդ թվում՝ խորը։ Մենք գտանք, որ այս առաջադրանքի համար խորը ուսուցման ընդդեմ CRF-ների օգտագործմամբ զգալի շահ չկա, ուստի մենք նախընտրեցինք ամենաթեթև տարբերակը:

Մենք նաև վերարտադրեցինք 2018 թվականի հունվարին անցած ամառ հրապարակված ակադեմիական հենանիշը: Այս հոդվածում հեղինակները գնահատել են API.ai-ի (այժմ՝ Dialogflow, Google), Luis.ai-ի (Microsoft), IBM Watson-ի և Rasa NLU-ի աշխատանքը: Արդարության համար մենք օգտագործեցինք Rasa NLU-ի թարմացված տարբերակը և այն համեմատեցինք Snips NLU-ի վերջին տարբերակի հետ (երկուսն էլ մուգ կապույտով):

Մտադրությունը և սլոտները բացահայտելուց հետո վերջին քայլը բնիկի արժեքների լուծումն է: Հում տողը լուծված կազմի վերածելը հաճախ բարդ խնդիր է, որի համար մենք հիմնվում ենք մեկ այլ Snips բաց կոդով գրադարանի վրա՝ Rustling: Սա Ռաստում Facebook-ի մեծ բադիկի գրադարանի ներտնային վերագործարկումն է: Սկզբնական ալգորիթմը փոփոխվել է, որպեսզի գործարկման ժամանակն ավելի կայուն դարձնի վերլուծված նախադասությունների երկարության առումով: Այն լուծում է այնպիսի արժեքներ, ինչպիսիք են ամսաթվերը, ջերմաստիճանը, տեւողությունը և այլն, ինչպես նախկինում բացատրվեց:

Այս ամբողջ խողովակաշարը նախագծվել է ինչպես կարգավորելի, այնպես էլ ընդարձակելի: Օրինակ, բնիկի լցավորիչի CRF-ները հեշտությամբ կարող են փոխարինվել այլ բանով: Խողովակաշարի յուրաքանչյուր վերամշակող միավոր ունի իր սեփական կոնֆիգուրացիան, որը կարող է կարգավորվել՝ հարմարեցնելով հատուկ օգտագործման դեպքերին:

Snips NLU էկոհամակարգ

Snips NLU էկոհամակարգը ապահովում է այն ամենը, ինչ կապված է NLU-ի հետ Snips-ում: Snips NLU-ն օգտագործվում է Snips վեբ կոնսոլում ստեղծված մոդելների պատրաստման համար՝ Python աշխատողների վրա: Snips NLU Rust-ն օգտագործվում է ամենուր եզրակացություններ գործարկելու համար՝ մեր վեբ վահանակում՝ օգտագործելով Scala backend-ը, կամ սարքում՝ Linux, iOS կամ Android: Որպեսզի նույն կոդը գործարկվի նման բազմազան և սահմանափակ միջավայրերում, մենք շատ ենք խաղադրույք կատարել Rust-ի վրա: Այս ժամանակակից լեզուն առաջարկում է բարձր կատարողականություն և ցածր հիշողության ծախսեր, ինչպես նաև հիշողության անվտանգություն և խաչաձև կոմպիլացիա՝ որպես առաջին կարգի քաղաքացիներ: Վերապատրաստված մոդելների JSON սերիալացումն օգտագործվում է որպես ինտերֆեյս Snips NLU գրադարաններում:

Սա Snips NLU-ն դարձնում է առաջին բաց կոդով NLU գրադարանը, որը լիովին շարժական է:

Snips NLU-ի եզրին կամ տարածքներում օգտագործելը զգալիորեն նվազեցնում է եզրակացության գործարկման ժամանակը, համեմատած NLU ամպային ծառայության հետադարձ ճանապարհի հետ: Հիշողության հետքը տատանվում է մի քանի հարյուր ԿԲ RAM-ից սովորական դեպքերի համար մինչև մի քանի ՄԲ ամենաբարդ օգնականների համար:

Ի՞նչ է հաջորդը:

Հաջորդ ամիսների մեր ուշադրությունը կլինի մեր մոդելների, մասնավորապես մտադրությունների դասակարգման մասի կատարելագործումը, ռեսուրսների հետ աշխատելու ձևի բարելավումը և ավելի շատ ներկառուցված կառույցների և լեզուների աջակցություն ավելացնելը: Այսօր Snips NLU-ն աշխատում է անգլերեն, ֆրանսերեն, գերմաներեն, իսպաներեն և կորեերեն:

Վերջապես, մենք շատ ուշադիր կլինենք համայնքից ստացվող արձագանքների նկատմամբ, այնպես որ մի հապաղեք հարցեր ներկայացնել և պահանջներ ներկայացնել: 😉

Սկսել!

Սկսելու համար ստուգեք փաստաթղթերը, մի հապաղեք սուզվել Github կոդի մեջ: Միացե՛ք մեզ Discord-ում ցանկացած հարցի կամ արձագանքի համար և սկսե՛ք ստեղծել ձեր սեփական օգնականը Snips կոնսոլում:

Եթե ձեզ դուր եկավ այս հոդվածը և ցանկանում եք աջակցել Snips-ին, խնդրում ենք տարածել այն:

Հետևեք մեզ Twitter-ում adrien_ball, clem_doum, jodureau և snips:

Եթե ցանկանում եք աշխատել AI + Գաղտնիության վրա, ստուգեք մեր աշխատատեղերի էջը: