DeepPavlov մշակողների համար. #1 NLP գործիքներ և չաթ-բոտի ստեղծում

Բարեւ բոլորին! Մենք բացում ենք մի շարք հոդվածներ, որոնք նվիրված են բնական լեզվի մշակման հետ կապված գործնական խնդիրների լուծմանը (Natural Language Processing կամ պարզապես NLP) և ստեղծում ենք երկխոսության գործակալներ (chatbots)՝ օգտագործելով բաց կոդով գրադարան։ Դիփ Պավլով, որը մշակվում է MIPT-ի նյարդային համակարգերի և խորը ուսուցման լաբորատորիայի մեր թիմի կողմից: Շարքի հիմնական նպատակն է ներկայացնել DeepPavlov-ին ծրագրավորողների լայն շրջանակի հետ և ցույց տալ, թե ինչպես կարող եք լուծել կիրառական NLP խնդիրները՝ չունենալով խորը գիտելիքներ մեքենայական ուսուցման և մաթեմատիկայի ասպիրանտուրայում:

NLP-ի առաջադրանքները ներառում են տեքստի տրամադրության որոշումը, անվանված միավորների վերլուծությունը, որոշել, թե ինչ է ուզում զրուցակիցը ձեր բոտից՝ պատվիրել պիցցա կամ ստանալ ֆոնային տեղեկատվություն և շատ ավելին: Դուք կարող եք ավելին կարդալ NLP առաջադրանքների և մեթոդների մասին այստեղ.

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

DeepPavlov մշակողների համար. #1 NLP գործիքներ և չաթ-բոտի ստեղծում

DeepPavlov-ի տեղադրում

Այստեղ և ստորև կներկայացվեն Linux-ի հրահանգներ: Windows-ի համար տես մեր փաստաթղթեր

  • Ստեղծեք և ակտիվացրեք վիրտուալ միջավայր Python-ի ընթացիկ աջակցվող տարբերակով.
    virtualelnv env -p python3.7
    source env/bin/activate
  • Տեղադրեք DeepPavlov-ը վիրտուալ միջավայրում.
    pip install deeppavlov
    

REST սերվերի գործարկում DeepPavlov մոդելով

Նախքան առաջին անգամ DeepPavlov մոդելով սերվեր գործարկելը, օգտակար կլինի խոսել գրադարանի ճարտարապետության որոշ առանձնահատկությունների մասին:

DP-ի ցանկացած մոդել բաղկացած է.

  • Python կոդը;
  • Ներբեռնվող բաղադրիչներ - սերիականացված վերապատրաստման արդյունքներ հատուկ տվյալների վրա (ներկառուցումներ, նեյրոնային ցանցերի կշիռներ և այլն);
  • Կազմաձևման ֆայլ (այսուհետ՝ կոնֆիգուրացիա), որը պարունակում է տեղեկատվություն մոդելի կողմից օգտագործվող դասերի, ներբեռնված բաղադրիչների URL-ների, Python-ի կախվածությունների և այլնի մասին։

Այն մասին, թե ինչ է գտնվում Դիպ Պավլովի գլխարկի տակ, մենք ձեզ ավելին կպատմենք հետևյալ հոդվածներում, առայժմ մեզ բավական է իմանալ, որ.

  • DeepPavlov-ի ցանկացած մոդել նույնացվում է իր կազմաձևի անունով.
  • Մոդելը գործարկելու համար անհրաժեշտ է ներբեռնել դրա բաղադրիչները DeepPavlov սերվերներից;
  • Նաև մոդելը գործարկելու համար հարկավոր է տեղադրել Python գրադարանները, որոնք նա օգտագործում է:

Առաջին մոդելը, որը մենք կներկայացնենք, կլինի բազմալեզու Named Entity Recognition (NER): Մոդելը դասակարգում է տեքստային բառերը՝ ըստ անվանված միավորների տեսակի, որոնց դրանք պատկանում են (հատուկ անուններ, աշխարհագրական անուններ, արժույթների անվանումներ և այլն): NER-ի ընթացիկ ամենավերջին տարբերակի կազմաձևման անունը.

ner_ontonotes_bert_mult

Մենք գործարկում ենք REST սերվերը մոդելով.

  1. Մենք տեղադրում ենք մոդելի կախվածությունները, որոնք նշված են դրա կազմաձևում ակտիվ վիրտուալ միջավայրում.
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Ներբեռնեք սերիական մոդելի բաղադրիչներ DeepPavlov սերվերներից.
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Սերիականացված բաղադրիչները կներբեռնվեն DeepPavlov տնային գրացուցակում, որը գտնվում է լռելյայնորեն

    ~/.deeppavlov

    Ներբեռնելիս արդեն ներբեռնված բաղադրիչների հեշը ստուգվում է սերվերում տեղակայված բաղադրիչների հեշերի հետ: Եթե ​​համընկնում է, ներբեռնումը բաց է թողնվում և առկա ֆայլերն օգտագործվում են: Ներբեռնված բաղադրիչների չափերը կարող են տատանվել միջինում 0.5-ից մինչև 8 Գբ, որոշ դեպքերում զիփելուց հետո հասնելով 20 Գբ-ի:

  3. Մենք գործարկում ենք REST սերվերը մոդելով.
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Այս հրամանի կատարման արդյունքում մոդելով REST սերվերը կգործարկվի հոսթ մեքենայի 5005 պորտում (կանխադրված պորտը 5000 է):

Մոդելի սկզբնավորումից հետո Swagger-ը API փաստաթղթերով և փորձարկելու կարողությամբ կարելի է գտնել URL-ում http://127.0.0.1:5005. Եկեք փորձարկենք մոդելը՝ ուղարկելով այն վերջնական կետ http://127.0.0.1:5005/model POST հարցում հետևյալ JSON բովանդակությամբ.

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

Ի պատասխան մենք պետք է ստանանք հետևյալ JSON-ը.

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["В", "юго", "-", "западной", "Руси", "стог", "жита", "оценен", "в", "15", "гривен"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Օգտագործելով այս օրինակները՝ մենք կվերլուծենք DeepPavlov REST API-ն:

API DeepPavlov

DeepPavlov-ի յուրաքանչյուր մոդել ունի առնվազն մեկ մուտքային արգումենտ: REST API-ում արգումենտներն անվանվում են, նրանց անունները մուտքային բառարանի բանալիներն են: Շատ դեպքերում փաստարկը այն տեքստն է, որը պետք է մշակվի: Մոդելների կողմից վերադարձված փաստարկների և արժեքների մասին լրացուցիչ տեղեկություններ կարելի է գտնել փաստաթղթերի ՄՈԴԵԼՆԵՐ բաժնում։ Դիփ Պավլով

Օրինակում x արգումենտին փոխանցվել է երկու տողերի ցուցակ, որոնցից յուրաքանչյուրին տրվել է առանձին նշում: DeepPavlov-ում բոլոր մոդելները որպես մուտք են ընդունում արժեքների ցանկ (խմբաքանակ), որոնք մշակվում են ինքնուրույն:

«Խմբաքանակ» տերմինը վերաբերում է մեքենայական ուսուցման ոլորտը և վերաբերում է ալգորիթմի կամ նյարդային ցանցի կողմից միաժամանակ մշակված անկախ մուտքային արժեքների խմբաքանակին: Այս մոտեցումը թույլ է տալիս նվազեցնել (հաճախ զգալիորեն) այն ժամանակը, երբ մոդելը մշակում է խմբաքանակի մեկ տարրը՝ համեմատած առանձին մուտքագրմանը փոխանցված նույն արժեքի հետ: Բայց մշակման արդյունքը տրվում է միայն բոլոր տարրերը մշակելուց հետո: Հետևաբար, մուտքային խմբաքանակ ստեղծելիս անհրաժեշտ կլինի հաշվի առնել մոդելի արագությունը և դրա յուրաքանչյուր առանձին տարրի համար մշակման պահանջվող ժամանակը:

Եթե ​​DeepPavlov մոդելի համար կան մի քանի փաստարկներ, ապա դրանցից յուրաքանչյուրը ստանում է արժեքների իր փաթեթը, իսկ ելքում մոդելը միշտ տալիս է պատասխանների մեկ փաթեթ: Ելքային խմբաքանակի տարրերը նույն ցուցանիշով մուտքային խմբաքանակների տարրերի մշակման արդյունքներն են։

Վերոնշյալ օրինակում մոդելի արդյունքն էր յուրաքանչյուր տողը բաժանել նշանների (բառեր և կետադրական նշաններ) և դասակարգել նշանը այն անվանված անձի (կազմակերպության անվանումը, արժույթը) հետ կապված, որը ներկայացնում է: Ներկայումս մոդելը ner_ontonotes_bert_mult ի վիճակի է ճանաչելու անվանված սուբյեկտների 18 տեսակներ, կարելի է գտնել մանրամասն նկարագրություն այստեղ.

Դիփ Պավլովի կողմից ներկայացված այլ մոդելներ

Բացի NER-ից, գրելու պահին DeepPavlov-ում հասանելի են հետևյալ արտապատկերված մոդելները.

Տեքստային հարցի պատասխան

Տեքստի հարցին պատասխանեք այս տեքստի հատվածով: Մոդելի կոնֆիգուրացիա. squad_ru_bert_infer

Հարցման օրինակ.

{
  "context_raw": [
    "DeepPavlov разрабатывается лабораторией МФТИ.",
    "В юго-западной Руси стог жита оценен в 15 гривен."
  ],
  "question_raw": [
    "Кем разрабатывается DeepPavlov?",
    "Сколько стоил стог жита на Руси?"
  ]
}

Արդյունքը:

[
  ["лабораторией МФТИ", 27, 31042.484375],
  ["15 гривен", 39, 1049.598876953125]
]

Վիրավորանքի հայտնաբերում

Հայտնաբերում է վիրավորանքի առկայությունը այն անձին, ում հասցեագրված է տեքստը (գրելու պահին՝ միայն անգլերենի համար): Մոդելի կազմաձևում՝ insults_kaggle_conv_bert

Հարցման օրինակ.


{
  "x": [
    "Money talks, bullshit walks.",
    "You are not the brightest one."
  ]
}

Արդյունքը:

[
  ["Not Insult"],
  ["Insult"]
]

Զգայականության վերլուծություն

Տեքստի տրամադրությունների դասակարգում (դրական, չեզոք, բացասական): Մոդելի կոնֆիգուրացիա. rusentiment_elmo_twitter_cnn

Հարցման օրինակ.

{
  "x": [
    "Мне нравится библиотека DeepPavlov.",
    "Я слышал о библиотеке DeepPavlov.",
    "Меня бесят тролли и анонимусы."
  ]
}

Արդյունքը:

[
  ["positive"],
  ["neutral"],
  ["negative"]
]

Պարաֆրազի հայտնաբերում

Որոշել, թե արդյոք երկու տարբեր տեքստեր ունեն նույն իմաստը: Մոդելի կոնֆիգուրացիա. stand_paraphraser_ru

Հարցում.

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

Արդյունքը:

[
  [1],
  [0]
]

DeepPavlov-ի բոլոր մոդելների ընթացիկ ցանկը միշտ կարելի է գտնել այստեղ.

Ամփոփում

Այս հոդվածում մենք ծանոթացանք DeepPavlov API-ին և գրադարանի տեքստի մշակման որոշ հնարավորություններին, որոնք տրամադրվում են տուփից դուրս։ Պետք է նկատի ունենալ, որ NLP ցանկացած առաջադրանքի համար լավագույն արդյունքը ձեռք կբերվի, երբ մոդելը վերապատրաստվի առաջադրանքի առարկայական տարածքին (տիրույթին) համապատասխանող տվյալների հավաքածուի վրա: Բացի այդ, նույնիսկ ավելի շատ մոդելներ, սկզբունքորեն, չեն կարող վերապատրաստվել բոլոր իրավիճակների համար:

Հետևյալ հոդվածներում մենք կդիտարկենք գրադարանի լրացուցիչ կարգավորումները՝ գործարկելով DeepPavlov-ը Docker-ից, այնուհետև կանցնենք վերապատրաստման մոդելներին: Եվ մի մոռացեք, որ Դիփ Պավլովն ունի форум – տվեք ձեր հարցերը գրադարանի և մոդելների վերաբերյալ: Շնորհակալություն ուշադրության համար!

Source: www.habr.com

Добавить комментарий