Здраво на сите! Отвораме серија написи посветени на решавање на практични проблеми поврзани со обработката на природниот јазик (обработка на природен јазик или едноставно НЛП) и создаваме агенти за дијалог (чет-ботови) користејќи библиотека со отворен код
Задачите на НЛП вклучуваат одредување на чувството на текстот, парсирање на именувани ентитети, одредување што сака соговорникот од вашиот бот: нарачајте пица или добијте информации во позадина и многу повеќе. Можете да прочитате повеќе за задачите и методите на НЛП
Во оваа статија, ќе ви покажеме како да стартувате сервер REST со претходно обучени NLP модели, подготвени за употреба без дополнителна конфигурација или обука.
Инсталација на DeepPavlov
Овде и подолу, ќе бидат дадени инструкции за Linux. За Windows, видете го нашиот
- Креирајте и активирајте виртуелна средина со тековната поддржана верзија на Python:
virtualelnv env -p python3.7 source env/bin/activate
- Инсталирајте го DeepPavlov во виртуелна средина:
pip install deeppavlov
Лансирање на REST сервер со моделот DeepPavlov
Пред да започнеме сервер со моделот DeepPavlov за прв пат, ќе биде корисно да зборуваме за некои карактеристики на архитектурата на библиотеката.
Секој модел во ДП се состои од:
- Пајтон код;
- Компоненти за преземање - сериски резултати од обуката за специфични податоци (вградувања, тежини на невронски мрежи итн.);
- Конфигурациска датотека (во натамошниот текст: конфигурација), која содржи информации за класите што ги користи моделот, 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 Gb, во некои случаи достигнувајќи 20 Gb по отпакувањето.
- Го стартуваме серверот 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
Секој модел на Дип Павлов има барем еден влезен аргумент. Во 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_en
Барање:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Резултатот е:
[
[1],
[0]
]
Секогаш може да се најде тековната листа на сите модели на DeepPavlov надвор од кутијата
Заклучок
Во оваа статија се запознавме со DeepPavlov API и некои од можностите за обработка на текст на библиотеката обезбедени надвор од кутијата. Треба да се има на ум дека за која било НЛП задача, најдобриот резултат ќе се постигне при обука на моделот на збир на податоци што одговара на предметната област (домен) на задачата. Покрај тоа, уште повеќе модели, во принцип, не можат да бидат обучени за сите ситуации.
Во следните статии ќе разгледаме дополнителни поставки на библиотеката, лансирање на DeepPavlov од Docker, а потоа ќе преминеме на модели за обука. И не заборавајте дека Дип Павлов има
Извор: www.habr.com