Хөгжүүлэгчид зориулсан DeepPavlov: №1 NLP хэрэгслүүд болон чатбот бүтээх

Сайн уу! Бид байгалийн хэлний боловсруулалт (Natural Language Processing буюу энгийн NLP) болон нээлттэй эхийн номын санг ашиглан харилцах агентууд (чатбот) үүсгэхтэй холбоотой практик асуудлыг шийдвэрлэхэд зориулагдсан цуврал нийтлэлүүдийг нээж байна. Гүн ПавловMIPT мэдрэлийн систем ба гүнзгий сургалтын лабораторийн манай багийн боловсруулж байгаа . Цувралын гол зорилго нь DeepPavlov-ийг өргөн хүрээний хөгжүүлэгчдэд танилцуулж, машин сургалтын гүнзгий мэдлэг, математикийн докторын зэрэггүйгээр NLP-ийн хэрэглээний асуудлыг хэрхэн шийдэж болохыг харуулах явдал юм.

NLP даалгаврууд нь текстийн мэдрэмжийг тодорхойлох, нэрлэсэн байгууллагуудыг задлан шинжлэх, ярилцагч таны ботоос юу хүсч байгааг тодорхойлох: пицца захиалах, суурь мэдээлэл авах гэх мэт. Та NLP даалгавар, аргуудын талаар илүү ихийг уншиж болно энд.

Энэ нийтлэлд бид ямар нэгэн нэмэлт тохиргоо, сургалтгүйгээр ашиглахад бэлэн, урьдчилан бэлтгэгдсэн NLP загвар бүхий REST серверийг хэрхэн ажиллуулахыг харуулах болно.

Хөгжүүлэгчид зориулсан DeepPavlov: №1 NLP хэрэгслүүд болон чатбот бүтээх

ДепПавловыг суурилуулах

Энд болон доор Линуксийн зааварчилгааг өгөх болно. Windows-ийн хувьд манай баримт бичиг

  • Python-ийн одоогийн дэмжигдсэн хувилбараар виртуал орчин үүсгэж идэвхжүүлнэ үү:
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlov-ийг виртуал орчинд суулгана уу:
    pip install deeppavlov
    

DeepPavlov загвартай REST серверийг ажиллуулж байна

DeepPavlov загвартай серверийг анх удаа эхлүүлэхийн өмнө номын сангийн архитектурын зарим онцлог шинж чанаруудын талаар ярих нь ашигтай байх болно.

АН дахь аливаа загвар нь дараахь зүйлээс бүрдэнэ.

  • Python код;
  • Татаж авах боломжтой бүрэлдэхүүн хэсгүүд - тодорхой өгөгдлүүд (суулгах, мэдрэлийн сүлжээний жин гэх мэт) дээр цувралчилсэн сургалтын үр дүн;
  • Загварт ашигласан ангиуд, татаж авсан бүрэлдэхүүн хэсгүүдийн URL, Python-н хамаарал гэх мэт мэдээллийг агуулсан тохиргооны файл (цаашид тохиргоо гэх).

Дараах нийтлэлүүдэд ДипПавловын халхавчны дор юу байгааг бид танд хэлэх болно, одоохондоо үүнийг мэдэхэд хангалттай.

  • DeepPavlov дахь аливаа загвар нь түүний тохиргооны нэрээр тодорхойлогддог;
  • Загварыг ажиллуулахын тулд та түүний бүрэлдэхүүн хэсгүүдийг DeepPavlov серверүүдээс татаж авах хэрэгтэй;
  • Мөн загварыг ажиллуулахын тулд та түүний ашигладаг Python сангуудыг суулгах хэрэгтэй.

Бидний гаргах анхны загвар нь олон хэлээр ярьдаг Нэрлэсэн Байгууллага таних (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).

Загварыг эхлүүлсний дараа API баримт бичигтэй Swagger болон тест хийх чадварыг URL хаягаас олж болно http://127.0.0.1:5005. Загварыг эцсийн цэг рүү илгээх замаар туршиж үзье http://127.0.0.1:5005/model Дараах JSON контент бүхий POST хүсэлт:

{
  "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-д аргументуудыг нэрлэсэн бөгөөд тэдгээрийн нэр нь ирж буй толь бичгийн түлхүүр юм. Ихэнх тохиолдолд аргумент нь боловсруулах шаардлагатай текст юм. Загваруудаас буцаасан аргументууд болон утгуудын талаарх дэлгэрэнгүй мэдээллийг баримт бичгийн ЗАГВАР хэсгээс авах боломжтой. Гүн Павлов

Жишээн дээр хоёр мөрийн жагсаалтыг х аргумент руу шилжүүлсэн бөгөөд тус бүрд нь тус тусад нь тэмдэглэгээ өгсөн. DeepPavlov-д бүх загварууд бие даан боловсруулагдсан утгуудын жагсаалтыг (багц) оруулдаг.

"Багц" гэсэн нэр томъёо нь машин сургалтын талбарт хамаарах бөгөөд алгоритм эсвэл мэдрэлийн сүлжээгээр нэгэн зэрэг боловсруулсан бие даасан оролтын утгуудын багцыг хэлдэг. Энэ арга нь загвар нь багцын нэг элементийг боловсруулах хугацааг оролт руу тусад нь дамжуулсан ижил утгатай харьцуулахад (ихэвчлэн мэдэгдэхүйц) багасгах боломжийг олгодог. Гэхдээ боловсруулалтын үр дүн нь бүх элементүүдийг боловсруулсны дараа л гардаг. Тиймээс, ирж буй багцыг үүсгэхдээ загварын хурд, түүний бие даасан элемент тус бүрийн боловсруулах шаардлагатай хугацааг харгалзан үзэх шаардлагатай.

Хэрэв DeepPavlov загварт хэд хэдэн аргумент байгаа бол тэдгээр нь тус бүр өөрийн багц утгыг хүлээн авдаг бөгөөд гаралтын үед загвар нь үргэлж нэг багц хариултыг гаргадаг. Гарсан багцын элементүүд нь ижил индекстэй ирж ​​буй багцын элементүүдийг боловсруулсны үр дүн юм.

Дээрх жишээн дээрх загварын үр дүн нь мөр бүрийг тэмдэгт (үг ба цэг таслал) болгон задалж, токеныг төлөөлж буй нэрлэгдсэн нэгжтэй (байгууллагын нэр, валют) харьцуулан ангилах явдал байв. Одоогоор загвар ner_ontonotes_bert_mult 18 төрлийн нэрлэсэн аж ахуйн нэгжийг таних чадвартай бөгөөд нарийвчилсан тайлбарыг олж болно энд.

DeepPavlov-ийн бусад бэлэн загварууд

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_en

Лавлагаа:

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

Үр дүн:

[
  [1],
  [0]
]

DeepPavlov-ийн бүх бэлэн загваруудын одоогийн жагсаалтыг үргэлж олж болно энд.

дүгнэлт

Энэ нийтлэлд бид DeepPavlov API болон номын сангийн зарим текст боловсруулах боломжуудтай танилцсан. Аливаа NLP даалгаврын хувьд тухайн даалгаврын сэдэвт (домэйн) тохирох өгөгдлийн багц дээр загварыг сургах нь хамгийн сайн үр дүнд хүрнэ гэдгийг санах нь зүйтэй. Нэмж дурдахад илүү олон загварыг зарчмын хувьд бүх нөхцөл байдалд сургах боломжгүй юм.

Дараах нийтлэлүүдэд бид номын сангийн нэмэлт тохиргоог авч үзэх болно, Docker-аас DeepPavlov-ийг ажиллуулж, дараа нь сургалтын загвар руу шилжих болно. Мөн ДипПавловт байдгийг бүү мартаарай форум – номын сан, загвартай холбоотой асуултуудаа асуугаарай. Анхаарал тавьсанд баярлалаа!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх