Հեղինակ՝ Ադրիեն Բոլը, Կլեմեն Դումուրոն և Ժոզեֆ Դյուրոն
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 + Գաղտնիության վրա, ստուգեք մեր աշխատատեղերի էջը: