Tərtibatçılar üçün DeepPavlov: №1 NLP Alətləri və Chatbot Yaradılması

Hamıya salam! Təbii dil emalı (Natural Language Processing və ya sadəcə NLP) ilə bağlı praktiki problemlərin həllinə və açıq mənbəli kitabxanadan istifadə edərək dialoq agentlərinin (chatbotlar) yaradılmasına həsr olunmuş bir sıra məqalələr açırıq. Dərin PavlovMIPT Sinir Sistemləri və Dərin Öyrənmə Laboratoriyasında komandamız tərəfindən hazırlanır. Seriyanın əsas məqsədi DeepPavlovu geniş tərtibatçılara təqdim etmək və Maşın Öyrənməsi və Riyaziyyat üzrə PhD üzrə dərin biliklərə malik olmadan tətbiqi NLP problemlərini necə həll edə biləcəyinizi göstərməkdir.

NLP tapşırıqlarına mətnin əhval-ruhiyyəsini təyin etmək, adları verilmiş obyektləri təhlil etmək, həmsöhbətin botunuzdan nə istədiyini müəyyənləşdirmək daxildir: pizza sifariş edin və ya məlumat əldə edin və s. NLP tapşırıqları və üsulları haqqında daha çox oxuya bilərsiniz burada.

Bu yazıda biz sizə əvvəlcədən öyrədilmiş NLP modelləri ilə heç bir əlavə konfiqurasiya və ya təlim olmadan istifadəyə hazır olan REST serverini necə idarə edəcəyinizi göstərəcəyik.

Tərtibatçılar üçün DeepPavlov: №1 NLP Alətləri və Chatbot Yaradılması

DeepPavlovun quraşdırılması

Burada və aşağıda Linux üçün təlimatlar veriləcək. Windows üçün bizim baxın sənədlər

  • Python-un cari dəstəklənən versiyası ilə virtual mühit yaradın və aktivləşdirin:
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlovu virtual mühitdə quraşdırın:
    pip install deeppavlov
    

DeepPavlov modeli ilə REST serverinin işə salınması

DeepPavlov modeli ilə serveri ilk dəfə işə salmazdan əvvəl kitabxananın arxitekturasının bəzi xüsusiyyətləri haqqında danışmaq faydalı olar.

DP-də hər hansı bir model aşağıdakılardan ibarətdir:

  • Python kodu;
  • Yüklənə bilən komponentlər - xüsusi məlumatlar (yerləşdirmələr, neyron şəbəkələrinin çəkiləri və s.) üzrə seriallaşdırılmış təlim nəticələri;
  • Modelin istifadə etdiyi siniflər, yüklənmiş komponentlərin URL-ləri, Python asılılıqları və s. haqqında məlumatları ehtiva edən konfiqurasiya faylı (bundan sonra konfiqurasiya).

Aşağıdakı məqalələrdə DeepPavlovun başlığı altında olanlar haqqında sizə daha ətraflı məlumat verəcəyik, hələlik bunu bilməyimiz kifayətdir:

  • DeepPavlov-da hər hansı bir model konfiqurasiyasının adı ilə müəyyən edilir;
  • Modeli işə salmaq üçün onun komponentlərini DeepPavlov serverlərindən yükləmək lazımdır;
  • Həmçinin modeli işə salmaq üçün onun istifadə etdiyi Python kitabxanalarını quraşdırmalısınız.

Başlayacağımız ilk model çoxdilli Adlandırılmış Varlığın Tanınması (NER) olacaq. Model mətn sözlərini aid olduqları adlandırılmış obyektlərin tipinə (xüsusi adlar, coğrafi adlar, valyutaların adları və s.) görə təsnif edir. NER-in ən son versiyası üçün konfiqurasiya adı:

ner_ontonotes_bert_mult

REST serverini modellə işə salırıq:

  1. Konfiqurasiyasında göstərilən model asılılıqlarını aktiv virtual mühitə quraşdırırıq:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. DeepPavlov serverlərindən seriallaşdırılmış model komponentlərini yükləyin:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Seriallaşdırılmış komponentlər defolt olaraq yerləşən DeepPavlov ev kataloquna endiriləcək

    ~/.deeppavlov

    Yükləyərkən artıq yüklənmiş komponentlərin hashı serverdə yerləşən komponentlərin heşləri ilə yoxlanılır. Uyğunluq varsa, yükləmə atlanır və mövcud fayllar istifadə olunur. Yüklənmiş komponentlərin ölçüləri orta hesabla 0.5-dən 8 Gb-a qədər dəyişə bilər, bəzi hallarda arxivdən çıxarıldıqdan sonra 20 Gb-a çatır.

  3. REST serverini modellə işə salırıq:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Bu əmrin icrası nəticəsində ana maşının 5005-ci portunda modeli olan REST serveri işə salınacaq (standart port 5000-dir).

Modeli işə saldıqdan sonra API sənədləri ilə Swagger və test etmək imkanı URL-də tapıla bilər http://127.0.0.1:5005. Modeli son nöqtəyə göndərərək test edək http://127.0.0.1:5005/model Aşağıdakı JSON məzmunu ilə POST sorğusu:

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

Cavab olaraq aşağıdakı JSON-u almalıyıq:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

Bu nümunələrdən istifadə edərək, DeepPavlov REST API-ni təhlil edəcəyik.

API DeepPavlov

Hər bir DeepPavlov modelində ən azı bir giriş arqumenti var. REST API-də arqumentlər adlandırılır, onların adları daxil olan lüğətin açarlarıdır. Əksər hallarda arqument emal edilməli olan mətndir. Modellər tərəfindən qaytarılan arqumentlər və dəyərlər haqqında daha çox məlumatı sənədlərin MODELLƏR bölməsində tapa bilərsiniz. Dərin Pavlov

Nümunədə iki sətirdən ibarət siyahı x arqumentinə ötürüldü, hər birinə ayrıca işarələmə verildi. DeepPavlov-da, bütün modellər müstəqil şəkildə işlənən dəyərlərin siyahısını (dəstini) giriş kimi qəbul edir.

"Paket" termini maşın öyrənmə sahəsinə aiddir və eyni vaxtda bir alqoritm və ya neyron şəbəkəsi tərəfindən emal edilən müstəqil giriş dəyərlərinin partiyasına aiddir. Bu yanaşma, girişə ayrıca ötürülən eyni dəyərlə müqayisədə modelin partiyanın bir elementini emal etdiyi vaxtı azaltmağa (çox vaxt əhəmiyyətli dərəcədə) imkan verir. Lakin emal nəticəsi yalnız bütün elementlər işləndikdən sonra verilir. Buna görə, daxil olan bir partiya yaratarkən, modelin sürətini və onun hər bir fərdi elementi üçün tələb olunan emal müddətini nəzərə almaq lazımdır.

DeepPavlov modelinə bir neçə arqument varsa, onların hər biri öz dəyər dəstini alır və çıxışda model həmişə bir cavab dəstini yaradır. Çıxan partiyanın elementləri eyni indekslə daxil olan partiyaların elementlərinin işlənməsinin nəticələridir.

Yuxarıdakı misalda modelin nəticəsi hər bir sətri işarələrə (sözlər və durğu işarələri) bölmək və işarəni təmsil etdiyi adlandırılmış obyektə (təşkilatın adı, valyuta) nisbətən təsnif etmək idi. Hal-hazırda model ner_ontonotes_bert_mult 18 növ adlanan varlıqları tanımağa qadirdir, ətraflı təsviri tapa bilərsiniz burada.

DeepPavlovun digər hazır olmayan modelləri

NER-ə əlavə olaraq, yazı zamanı DeepPavlov-da aşağıdakı hazır olmayan modellər mövcuddur:

Mətn sualına cavab

Bu mətndən bir fraqmentlə mətnə ​​verilən suala cavab verin. Model konfiqurasiyası: squad_ru_bert_infer

Sorğu nümunəsi:

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

Nəticə:

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

Təhqirin aşkarlanması

Mətnin ünvanlandığı şəxsə qarşı təhqirin olmasının aşkarlanması (yazı zamanı - yalnız ingilis dili üçün). Model konfiqurasiyası: insults_kaggle_conv_bert

Sorğu nümunəsi:


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

Nəticə:

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

Sentiment təhlili

Mətn hisslərinin təsnifatı (müsbət, neytral, mənfi). Model konfiqurasiyası: rusentiment_elmo_twitter_cnn

Sorğu nümunəsi:

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

Nəticə:

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

Parafraza aşkarlanması

İki fərqli mətnin eyni mənaya sahib olub-olmadığını müəyyən etmək. Model konfiqurasiyası: stand_paraphraser_az

Sorğu:

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

Nəticə:

[
  [1],
  [0]
]

Bütün hazır DeepPavlov modellərinin cari siyahısı həmişə tapıla bilər burada.

Nəticə

Bu yazıda biz DeepPavlov API və qutudan kənar təqdim olunan kitabxananın bəzi mətn emal imkanları ilə tanış olduq. Nəzərə almaq lazımdır ki, istənilən NLP tapşırığı üçün ən yaxşı nəticə tapşırığın mövzu sahəsinə (domeninə) uyğun gələn verilənlər toplusunda modeli öyrətdikdə əldə ediləcək. Bundan əlavə, daha çox model, prinsipcə, bütün vəziyyətlər üçün hazırlana bilməz.

Növbəti məqalələrdə biz Docker-dən DeepPavlov-u işə salaraq kitabxananın əlavə parametrlərinə baxacağıq və sonra təlim modellərinə keçəcəyik. DeepPavlovun da olduğunu unutma форум – kitabxana və modellərlə bağlı suallarınızı verin. Diqqətinizə görə təşəkkürlər!

Mənbə: www.habr.com

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