Сайн уу! Бид байгалийн хэлний боловсруулалт (Natural Language Processing буюу энгийн NLP) болон нээлттэй эхийн номын санг ашиглан харилцах агентууд (чатбот) үүсгэхтэй холбоотой практик асуудлыг шийдвэрлэхэд зориулагдсан цуврал нийтлэлүүдийг нээж байна.
NLP даалгаврууд нь текстийн мэдрэмжийг тодорхойлох, нэрлэсэн байгууллагуудыг задлан шинжлэх, ярилцагч таны ботоос юу хүсч байгааг тодорхойлох: пицца захиалах, суурь мэдээлэл авах гэх мэт. Та NLP даалгавар, аргуудын талаар илүү ихийг уншиж болно
Энэ нийтлэлд бид ямар нэгэн нэмэлт тохиргоо, сургалтгүйгээр ашиглахад бэлэн, урьдчилан бэлтгэгдсэн NLP загвар бүхий REST серверийг хэрхэн ажиллуулахыг харуулах болно.
ДепПавловыг суурилуулах
Энд болон доор Линуксийн зааварчилгааг өгөх болно. 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 серверийг дараах загвараар ажиллуулж байна.
- Бид түүний тохиргоонд заасан загварын хамаарлыг идэвхтэй виртуал орчинд суулгадаг.
python -m deeppavlov install ner_ontonotes_bert_mult
- DeepPavlov серверүүдээс цуваа загвар бүрэлдэхүүн хэсгүүдийг татаж авах:
python -m deeppavlov download ner_ontonotes_bert_mult
Цуваачилсан бүрэлдэхүүн хэсгүүдийг анхдагчаар байрладаг DeepPavlov гэрийн лавлах руу татаж авах болно
~/.deeppavlov
Татаж авахдаа аль хэдийн татаж авсан бүрэлдэхүүн хэсгүүдийн хэшийг сервер дээр байрлах бүрэлдэхүүн хэсгүүдийн хэштэй харьцуулан шалгадаг. Хэрэв тохирох зүйл байвал татан авалтыг алгасаж, одоо байгаа файлуудыг ашиглана. Татаж авсан бүрэлдэхүүн хэсгүүдийн хэмжээ дунджаар 0.5-аас 8 Гб хооронд хэлбэлздэг ба зарим тохиолдолд задлахад 20 Гб хүрдэг.
- Бид 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