DeepPavlov per i sviluppatori: Strumenti NLP #1 è creazione di chatbot

Salut à tutti ! Apertura una seria d'articuli dedicati à risolve i prublemi pratichi ligati à u trasfurmazioni di a lingua naturale (Trattamentu di a Lingua Naturale o simpricimenti NLP) è à creà agenti di dialogu (chatbots) cù una biblioteca open-source. DeepPavlov, chì hè sviluppatu da a nostra squadra in u Laboratoriu MIPT di Sistemi Neural è Deep Learning. U scopu principale di a serie hè di presentà DeepPavlov à una larga gamma di sviluppatori è dimustrà cumu pudete risolve i prublemi di NLP applicati senza avè una cunniscenza prufonda in Machine Learning è PhD in Matematica.

I travaglii di NLP includenu a determinazione di u sentimentu di u testu, l'analisi di entità chjamate, a determinazione di ciò chì l'interlocutore vole da u vostru bot: ordine pizza o uttene infurmazione di fondo, è assai di più. Pudete leghje più nantu à i travaglii è i metudi di NLP ccà.

In questu articulu, vi mustraremu cumu eseguisce un servitore REST cù mudelli NLP pre-addestrati, pronti à aduprà senza cunfigurazione o furmazione supplementari.

DeepPavlov per i sviluppatori: Strumenti NLP #1 è creazione di chatbot

Installazione di DeepPavlov

Quì è quì sottu, struzzioni per Linux seranu datu. Per Windows, vede u nostru documentazione

  • Crea è attivate un ambiente virtuale cù a versione attuale supportata di Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Installa DeepPavlov in un ambiente virtuale:
    pip install deeppavlov
    

Lanciazione di un servitore REST cù u mudellu DeepPavlov

Prima di lancià un servitore cù u mudellu DeepPavlov per a prima volta, serà utile per parlà di qualchi funziunalità di l'architettura di a biblioteca.

Ogni mudellu in DP hè custituitu da:

  • codice Python;
  • Cumpunenti scaricabili - risultati di furmazione seriali nantu à dati specifichi (embeddings, pesi di e rete neurali, etc.);
  • Un schedariu di cunfigurazione (in seguitu chjamatu a cunfigurazione), chì cuntene infurmazioni nantu à e classi utilizati da u mudellu, URL di cumpunenti scaricati, dipendenze di Python, etc.

Vi diciaremu più nantu à ciò chì hè sottu u cappucciu di DeepPavlov in l'articuli seguenti, per avà hè abbastanza per sapè chì:

  • Ogni mudellu in DeepPavlov hè identificatu da u nome di a so cunfigurazione;
  • Per eseguisce u mudellu, avete bisognu di scaricà i so cumpunenti da i servitori DeepPavlov;
  • Inoltre, per eseguisce u mudellu, avete bisognu di installà e librerie Python chì usa.

U primu mudellu chì avemu da lancià serà Multilingual Named Entity Recognition (NER). U mudellu classifica e parolle di testu secondu u tipu di entità chjamatu à quale appartenenu (nomi propiu, nomi geugrafichi, nomi di muniti, è altri). Nome di cunfigurazione per a versione più recente attuale di NER:

ner_ontonotes_bert_mult

Lancemu u servitore REST cù u mudellu:

  1. Installemu e dependenzii di mudelli specificate in a so cunfigurazione in l'ambiente virtuale attivu:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Scaricate i cumpunenti di mudelli seriali da i servitori DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    I cumpunenti seriali seranu scaricati in u repertoriu di casa DeepPavlov, chì si trova per automaticamente

    ~/.deeppavlov

    Quandu u scaricamentu, l'hash di cumpunenti digià scaricati hè verificatu cù l'hash di cumpunenti situati in u servitore. Se ci hè una partita, u scaricamentu hè saltatu è i schedari esistenti sò usati. E dimensioni di i cumpunenti scaricati ponu varià in media da 0.5 à 8 Gb, in certi casi righjunghjendu 20 Gb dopu à unzipping.

  3. Lancemu u servitore REST cù u mudellu:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

In u risultatu di eseguisce stu cumandamentu, un servitore REST cù un mudellu serà lanciatu nantu à u portu 5005 di a macchina host (u portu predeterminatu hè 5000).

Dopu l'inizializazione di u mudellu, Swagger cù a documentazione API è a capacità di pruvà pò esse truvata à l'URL http://127.0.0.1:5005. Testemu u mudellu mandendu à l'endpoint http://127.0.0.1:5005/model A dumanda POST cù u seguente cuntenutu JSON:

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

In risposta, duvemu riceve u seguente 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"]
  ]
]

Utilizendu questi esempi, analizzeremu l'API REST DeepPavlov.

API DeepPavlov

Ogni mudellu DeepPavlov hà almenu un argumentu di input. In l'API REST, l'argumenti sò chjamati, i so nomi sò i chjavi di u dizziunariu entrante. In a maiò parte di i casi, l'argumentu hè u testu chì deve esse processatu. Più infurmazione nantu à l'argumenti è i valori restituiti da i mudelli ponu esse truvati in a sezione MODELLI di a documentazione DeepPavlov

In l'esempiu, una lista di duie stringhe hè stata passata à l'argumentu x, ognuna di quale hè stata data marcatura separata. In DeepPavlov, tutti i mudelli piglianu cum'è input una lista (batch) di valori chì sò trattati indipindentamente.

U terminu "batch" si riferisce à u campu di l'apprendimentu automaticu è si riferisce à un batch di valori di input indipendenti trattati da un algoritmu o rete neurale simultaneamente. Stu approcciu permette di riduce (spessu significativamente) u tempu chì u mudellu processa un elementu di un batch cumparatu cù u stessu valore passatu à l'input separatamente. Ma u risultatu di trasfurmazioni hè emessu solu dopu chì tutti l'elementi sò stati processati. Dunque, quandu generà un batch in entrata, serà necessariu di piglià in contu a rapidità di u mudellu è u tempu di prucessu necessariu per ognunu di i so elementi individuali.

Se ci sò parechji argumenti à u mudellu DeepPavlov, ognunu riceve u so propiu batch of values, è à u risultatu u mudellu sempre pruduce un batch di risposte. L'elementi di u batch outgoing sò i risultati di trasfurmà l'elementi di i batchs entranti cù u stessu indice.

In l'esempiu supra, u risultatu di u mudellu era di scumpressà ogni stringa in tokens (parole è segni di puntuazione) è classificà u token relative à l'entità chjamata (nome di l'urganizazione, munita) chì rapprisenta. Attualmente u mudellu ner_ontonotes_bert_mult capace di ricunnosce 18 tipi di entità chjamate, una descrizzione dettagliata pò esse truvata ccà.

Altri mudelli out-of-the-box da DeepPavlov

In più di NER, i seguenti mudelli out-of-the-box sò dispunibili in DeepPavlov à u mumentu di a scrittura:

Rispondi à a quistione di testu

Rispondi à a quistione à u testu cù un fragmentu di stu testu. Cunfigurazione di mudellu: squad_ru_bert_infer

Esempiu di dumanda:

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

Risultatu:

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

Rilevazione di l'insultu

Detezzione di a presenza di un insultu à a persona à quale u testu hè indirizzatu (à u mumentu di a scrittura - solu per l'inglese). Cunfigurazione mudellu: insults_kaggle_conv_bert

Esempiu di dumanda:


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

Risultatu:

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

Analisi di Sentimenti

Classificazione di u sentimentu testu (pusitivu, neutru, negativu). Cunfigurazione di mudellu: rusentiment_elmo_twitter_cnn

Esempiu di dumanda:

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

Risultatu:

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

Rilevazione di parafrasi

Determina se dui testi diffirenti anu u stessu significatu. Cunfigurazione di mudellu: stand_paraphraser_en

dumanda:

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

Risultatu:

[
  [1],
  [0]
]

A lista attuale di tutti i mudelli DeepPavlov fora di a scatula pò sempre esse truvata ccà.

cunchiusioni

In questu articulu, avemu cunnisciutu l'API DeepPavlov è alcune di e capacità di prucessu di testu di a biblioteca furnita fora di a scatula. Hè da esse cunsideratu chì per ogni attività di NLP, u megliu risultatu serà ottinutu quandu u mudellu di furmazione nantu à un settore di dati currispundenu à l'area di u sughjettu (domain) di u travagliu. Inoltre, ancu più mudelli ùn ponu micca, in principiu, esse furmatu per tutte e situazioni.

In l'articuli chì seguitanu, guardemu paràmetri supplementari di a biblioteca, lanciandu DeepPavlov da Docker, è poi andemu à i mudelli di furmazione. È ùn vi scurdate chì DeepPavlov hà u foru - fate e vostre dumande in quantu à a biblioteca è i mudelli. Grazie per a vostra attenzione!

Source: www.habr.com

Add a comment