Geliştiriciler için DeepPavlov: 1 numaralı NLP araçları ve sohbet robotu oluşturma

Herkese selam! Doğal dil işleme (Doğal Dil İşleme veya basitçe NLP) ile ilgili pratik problemleri çözmeye ve açık kaynak bir kütüphane kullanarak diyalog aracıları (sohbet robotları) oluşturmaya adanmış bir dizi makale açıyoruz. DerinPavlovMIPT Sinir Sistemleri ve Derin Öğrenme Laboratuvarı'nda ekibimiz tarafından geliştirilmektedir. Serinin temel amacı DeepPavlov'u geniş bir geliştirici yelpazesine tanıtmak ve Makine Öğrenimi ve Matematik Doktora alanında derin bilgiye sahip olmadan uygulamalı NLP problemlerini nasıl çözebileceğinizi göstermektir.

NLP görevleri arasında metnin duygusunu belirlemek, adlandırılmış varlıkları ayrıştırmak, muhatabın botunuzdan ne istediğini belirlemek: pizza sipariş etmek veya arka plan bilgisi almak ve çok daha fazlası yer alır. NLP görevleri ve yöntemleri hakkında daha fazla bilgi edinebilirsiniz burada.

Bu makalede, herhangi bir ek yapılandırma veya eğitim gerektirmeden kullanıma hazır, önceden eğitilmiş NLP modelleriyle bir REST sunucusunun nasıl çalıştırılacağını göstereceğiz.

Geliştiriciler için DeepPavlov: 1 numaralı NLP araçları ve sohbet robotu oluşturma

DeepPavlov'un kurulumu

Burada ve aşağıda Linux için talimatlar verilecektir. Windows için, bkz. belgeleme

  • Python'un desteklenen mevcut sürümüyle sanal bir ortam oluşturun ve etkinleştirin:
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlov'u sanal bir ortama yükleyin:
    pip install deeppavlov
    

DeepPavlov modeliyle REST sunucusu başlatma

DeepPavlov modeliyle ilk kez bir sunucu çalıştırmadan önce kütüphane mimarisinin bazı özelliklerinden bahsetmek faydalı olacaktır.

DP'deki herhangi bir model aşağıdakilerden oluşur:

  • Python kodu;
  • İndirilebilir bileşenler - belirli verilere (yerleştirmeler, sinir ağlarının ağırlıkları vb.) ilişkin serileştirilmiş eğitim sonuçları;
  • Model tarafından kullanılan sınıflar, indirilen bileşenlerin URL'leri, Python bağımlılıkları vb. hakkında bilgi içeren bir yapılandırma dosyası (bundan sonra yapılandırma olarak anılacaktır).

Aşağıdaki yazılarımızda DeepPavlov'un başlığı altında neler olduğunu sizlere daha detaylı anlatacağız, şimdilik şunu bilmemiz yeterli:

  • DeepPavlov'daki herhangi bir model, yapılandırmasının adıyla tanımlanır;
  • Modeli çalıştırmak için bileşenlerini DeepPavlov sunucularından indirmeniz gerekir;
  • Ayrıca modeli çalıştırmak için kullandığı Python kütüphanelerini kurmanız gerekir.

Başlatacağımız ilk model, çok dilli Adlandırılmış Varlık Tanıma (NER) olacak. Model, metin sözcüklerini ait oldukları adlandırılmış varlıkların türüne göre (özel adlar, coğrafi adlar, para birimlerinin adları ve diğerleri) sınıflandırır. NER'in mevcut en son sürümünün yapılandırma adı:

ner_ontonotes_bert_mult

REST sunucusunu aşağıdaki modelle başlatıyoruz:

  1. Yapılandırmasında belirtilen model bağımlılıklarını aktif sanal ortama yüklüyoruz:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Serileştirilmiş model bileşenlerini DeepPavlov sunucularından indirin:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serileştirilmiş bileşenler, varsayılan olarak bulunan DeepPavlov ana dizinine indirilecektir.

    ~/.deeppavlov

    İndirme sırasında, halihazırda indirilmiş olan bileşenlerin karma değeri, sunucuda bulunan bileşenlerin karma değerlerine göre kontrol edilir. Eşleşme olması durumunda indirme işlemi atlanır ve mevcut dosyalar kullanılır. İndirilen bileşenlerin boyutları ortalama 0.5 ila 8 Gb arasında değişebilir, bazı durumlarda zip açıldıktan sonra 20 Gb'ye ulaşabilir.

  3. REST sunucusunu aşağıdaki modelle başlatıyoruz:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Bu komutun yürütülmesi sonucunda ana makinenin 5005 numaralı bağlantı noktasında modelli bir REST sunucusu başlatılacaktır (varsayılan bağlantı noktası 5000'dir).

Modeli başlattıktan sonra, API belgelerine sahip Swagger ve test etme yeteneği URL'de bulunabilir. http://127.0.0.1:5005. Modeli uç noktaya göndererek test edelim http://127.0.0.1:5005/model Aşağıdaki JSON içeriğine sahip POST isteği:

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

Yanıt olarak aşağıdaki JSON'u almalıyız:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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 örnekleri kullanarak DeepPavlov REST API'sini analiz edeceğiz.

API DeepPavlov

Her DeepPavlov modelinde en az bir giriş argümanı bulunur. REST API'de argümanlar isimlendirilir, isimleri gelen sözlüğün anahtarlarıdır. Çoğu durumda argüman, işlenmesi gereken metindir. Modellerin döndürdüğü argümanlar ve değerler hakkında daha fazla bilgiyi belgelerin MODELLER bölümünde bulabilirsiniz. DerinPavlov

Örnekte, x bağımsız değişkenine iki dizeden oluşan bir liste aktarıldı ve bunların her birine ayrı işaretleme verildi. DeepPavlov'da tüm modeller, bağımsız olarak işlenen değerlerin bir listesini (toplu) girdi olarak alır.

"Toplu" terimi, makine öğrenimi alanını ifade eder ve bir algoritma veya sinir ağı tarafından aynı anda işlenen bir grup bağımsız giriş değerini ifade eder. Bu yaklaşım, girdiye ayrı olarak iletilen aynı değerle karşılaştırıldığında modelin bir partinin bir öğesini işleme süresini (genellikle önemli ölçüde) azaltmanıza olanak tanır. Ancak işleme sonucu ancak tüm öğeler işlendikten sonra verilir. Bu nedenle, gelen bir partiyi oluştururken modelin hızını ve her bir elemanı için gerekli işlem süresini hesaba katmak gerekli olacaktır.

DeepPavlov modeline ilişkin birden fazla argüman varsa, bunların her biri kendi değer grubunu alır ve çıktıda model her zaman bir grup yanıt üretir. Giden partinin elemanları, gelen partilerin elemanlarının aynı indeksle işlenmesinin sonuçlarıdır.

Yukarıdaki örnekte, modelin sonucu, her dizeyi belirteçlere (kelimeler ve noktalama işaretleri) bölmek ve belirteci, temsil ettiği adlandırılmış varlığa (kuruluş adı, para birimi) göre sınıflandırmaktı. Şu anda modeli ner_ontonotes_bert_mult 18 tür adlandırılmış varlığı tanıyabilen, ayrıntılı bir açıklama bulunabilir burada.

DeepPavlov'un diğer kullanıma hazır modelleri

NER'e ek olarak, bu yazının yazıldığı sırada DeepPavlov'da aşağıdaki kullanıma hazır modeller mevcuttur:

Metin Soru Cevaplama

Metne ilişkin soruyu bu metnin bir parçasıyla yanıtlayın. Modeli yapılandırması: squad_ru_bert_infer

Örnek istek:

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

Sonuç:

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

Hakaret Tespiti

Metnin hitap edildiği kişiye yönelik hakaretin varlığının tespiti (yazma sırasında - yalnızca İngilizce için). Model yapılandırması: hakarets_kaggle_conv_bert

Örnek istek:


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

Sonuç:

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

Duygu Analizi

Metin duyarlılığının sınıflandırılması (olumlu, nötr, olumsuz). Modeli yapılandırması: rusentiment_elmo_twitter_cnn

Örnek istek:

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

Sonuç:

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

Açıklama Tespiti

İki farklı metnin aynı anlama sahip olup olmadığının belirlenmesi. Modeli yapılandırması: stand_paraphraser_en

Rica etmek:

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

Sonuç:

[
  [1],
  [0]
]

Kullanıma hazır tüm DeepPavlov modellerinin güncel listesi her zaman bulunabilir burada.

Sonuç

Bu makalede DeepPavlov API'si ve kütüphanenin kullanıma hazır olarak sunulan bazı metin işleme yetenekleri hakkında bilgi sahibi olduk. Herhangi bir NLP görevi için en iyi sonucun, modelin görevin konu alanına (etki alanına) karşılık gelen bir veri seti üzerinde eğitilmesiyle elde edileceği unutulmamalıdır. Ayrıca, prensip olarak daha fazla modelin tüm durumlar için eğitilmesi mümkün değildir.

Sonraki yazılarımızda Docker'dan DeepPavlov'u başlatarak kütüphanenin ek ayarlarına bakacağız ve ardından eğitim modellerine geçeceğiz. Ve şunu unutmayın ki DeepPavlov форум – Kütüphane ve modellerle ilgili sorularınızı sorun. İlginiz için teşekkür ederiz!

Kaynak: habr.com

Yorum ekle