DeepPavlov ho an'ny mpamorona: Fitaovana NLP #1 sy famoronana chatbot

Salama daholo! Manokatra andian-dahatsoratra natokana hamahana ireo olana azo ampiharina mifandraika amin'ny fanodinana fiteny voajanahary (Natural Language Processing na NLP tsotra fotsiny) izahay ary mamorona mpandraharaha fifanakalozan-kevitra (chatbots) amin'ny fampiasana tranomboky misokatra. DeepPavlov, izay novolavolain'ny ekipanay ao amin'ny MIPT Laboratory of Neural Systems and Deep Learning. Ny tanjona fototra amin'ny andiany dia ny fampahafantarana an'i DeepPavlov amin'ireo mpamorona isan-karazany ary mampiseho ny fomba ahafahanao mamaha ny olan'ny NLP ampiharina nefa tsy manana fahalalana lalina amin'ny Machine Learning sy PhD amin'ny Matematika.

Ny asan'ny NLP dia ahitana ny famaritana ny fihetseham-pon'ny lahatsoratra, ny famaritana ny anarana nomena anarana, ny famaritana izay tadiavin'ny mpifaninana amin'ny botanao: manafatra pizza na mahazo fampahalalana momba ny fototra, sy ny maro hafa. Afaka mamaky bebe kokoa momba ny asa sy ny fomba NLP ianao eto.

Ato amin'ity lahatsoratra ity, hasehontsika anao ny fomba fampandehanana mpizara REST miaraka amin'ny maodely NLP efa voaofana mialoha, vonona hampiasaina tsy misy fanamboarana na fiofanana fanampiny.

DeepPavlov ho an'ny mpamorona: Fitaovana NLP #1 sy famoronana chatbot

Fametrahana ny DeepPavlov

Eto sy eto ambany dia homena ny torolàlana ho an'ny Linux. Ho an'ny Windows, jereo ny anay tahirin-kevitra

  • Mamorona sy manetsika tontolo virtoaly miaraka amin'ny kinova Python tohana ankehitriny:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Mametraka DeepPavlov amin'ny tontolo virtoaly:
    pip install deeppavlov
    

Manokatra mpizara REST miaraka amin'ny modely DeepPavlov

Alohan'ny hanombohantsika voalohany ny lohamilina miaraka amin'ny modely DeepPavlov, dia ilaina ny miresaka momba ny endri-javatra sasany amin'ny maritrano ao amin'ny tranomboky.

Ny modely rehetra ao amin'ny DP dia ahitana:

  • Python code;
  • Ireo singa azo alaina - vokatry ny fanofanana serie amin'ny angona manokana (fampidirana, lanjan'ny tambajotra neural, sns.);
  • Raki-drakitra fanamafisam-peo (antsoina hoe config) izay misy fampahalalana momba ny kilasy ampiasain'ny modely, URL misy singa alaina, fiankinan-doha Python, sns.

Holazainay aminao bebe kokoa momba izay ao ambanin'ny saron'i DeepPavlov ao amin'ny lahatsoratra manaraka, amin'izao fotoana izao dia ampy ho antsika ny mahafantatra fa:

  • Ny modely rehetra ao amin'ny DeepPavlov dia fantatra amin'ny anaran'ny config azy;
  • Mba hampandehanana ny modely dia mila misintona ny singa ao amin'ny lohamilina DeepPavlov ianao;
  • Ary koa, raha hampandeha ny modely dia mila mametraka ny tranomboky Python ampiasainy ianao.

Ny maodely voalohany havoakantsika dia ny Fanekena Entity Named (NER) amin'ny fiteny maro. Ny maodely dia manasokajy ny teny an-tsoratra araka ny karazana anarana nomena azy (anarana manokana, anarana ara-jeografika, anaran'ny vola, sy ny hafa). Anaran'ny config ho an'ny kinova NER farany indrindra:

ner_ontonotes_bert_mult

Manomboka ny mpizara REST miaraka amin'ny modely izahay:

  1. Apetrakay ao amin'ny tontolo virtoaly mavitrika ny fiankinan-doha modely voalaza ao amin'ny config:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Ampidino ny singa modely misy serial avy amin'ny mpizara DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Ny singa serialized dia alaina ao amin'ny lahatahiry an-trano DeepPavlov, izay hita amin'ny alàlan'ny default

    ~/.deeppavlov

    Rehefa misintona, ny hash amin'ireo singa efa nalaina dia voamarina amin'ny hashs amin'ny singa hita ao amin'ny server. Raha toa ka misy ny lalao dia adino ny fampidinana ary ampiasaina ny rakitra efa misy. Ny haben'ny singa alaina dia mety miovaova amin'ny antsalany manomboka amin'ny 0.5 ka hatramin'ny 8 Gb, amin'ny toe-javatra sasany dia mahatratra 20 Gb aorian'ny famoahana azy.

  3. Manomboka ny mpizara REST miaraka amin'ny modely izahay:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Vokatry ny fanatanterahana an'io baiko io dia hisy mpizara REST misy modely havoaka amin'ny seranan-tsambo 5005 an'ny milina mpampiantrano (5000 ny seranan-tsambo default).

Taorian'ny nanombohana ny maodely dia hita ao amin'ny URL ny Swagger miaraka amin'ny antontan-taratasy API sy ny fahafahana manao fitiliana http://127.0.0.1:5005. Andao hizaha toetra ny modely amin'ny fandefasana azy any amin'ny teboka farany http://127.0.0.1:5005/model POST fangatahana miaraka amin'ity atiny JSON manaraka ity:

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

Ho setrin'izany dia tokony hahazo ity JSON manaraka ity isika:

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

Amin'ny fampiasana ireo ohatra ireo dia hamakafaka ny DeepPavlov REST API.

API DeepPavlov

Ny modely DeepPavlov tsirairay dia manana tohan-kevitra fampidirana iray farafahakeliny. Ao amin'ny REST API, nomena anarana ny tohan-kevitra, ny anarany no fanalahidin'ny rakibolana miditra. Amin'ny ankabeazan'ny toe-javatra, ny tohan-kevitra dia ny lahatsoratra tokony hokarakaraina. Ny fampahalalana bebe kokoa momba ny tohan-kevitra sy ny soatoavina naverin'ny modely dia azo jerena ao amin'ny fizarana MODELS amin'ny antontan-taratasy DeepPavlov

Ao amin'ny ohatra, misy lisitry ny tady roa nafindra tany amin'ny argument x, izay samy nomena marika manokana. Ao amin'ny DeepPavlov, ny modely rehetra dia mandray lisitra (ampahany) amin'ny soatoavina izay karakaraina tsy miankina.

Ny teny hoe "batch" dia manondro ny sehatry ny fianarana milina ary manondro andiana soatoavina tsy miankina karakarain'ny algorithm na tambajotra neural miaraka. Ity fomba fiasa ity dia ahafahanao mampihena (matetika be) ny fotoana anaovan'ny maodely singa iray amin'ny andiany iray raha ampitahaina amin'ny sanda mitovy amin'ny fampidirana misaraka. Saingy aorian'ny fikarakarana ny singa rehetra dia avoaka ny vokatra fanodinana. Noho izany, rehefa mamorona andiany ho avy, dia ilaina ny mandinika ny hafainganam-pandehan'ny modely sy ny fotoana fanodinana ilaina ho an'ny singa tsirairay.

Raha misy tohan-kevitra maromaro momba ny modely DeepPavlov, ny tsirairay amin'izy ireo dia mahazo ny sandany manokana, ary amin'ny vokatra dia mamoaka valiny iray foana ny modely. Ny singa amin'ny andiany mivoaka dia vokatry ny fanodinana ireo singa amin'ny andiany miditra miaraka amin'ny fanondroana mitovy.

Ao amin'ny ohatra etsy ambony, ny vokatry ny maodely dia ny fandravana ny tady tsirairay ho famantarana (teny sy mari-piatoana) ary manasokajy ny famantarana mifandraika amin'ny orinasa antsoina (anaran'ny fikambanana, vola) izay asehony. Amin'izao fotoana izao ny modely ner_ontonotes_bert_mult afaka mamantatra karazana enti-milaza 18, misy famaritana amin'ny antsipiriany eto.

Modely hafa ivelan'ny boaty nataon'i DeepPavlov

Ho fanampin'ny NER, ireto modely ivelan'ny boaty ireto dia hita ao amin'ny DeepPavlov amin'ny fotoana anoratana:

Famaliana fanontaniana an-tsoratra

Valio ny fanontaniana amin'ny lahatsoratra miaraka amin'ny ampahany amin'ity lahatsoratra ity. Modely config: squad_ru_bert_infer

Mangataka ohatra:

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

vokany:

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

Fikarohana ompa

Fikarohana ny fisian'ny fanevatevana ny olona izay ny lahatsoratra (tamin'ny fotoana nanoratana - ho an'ny teny anglisy ihany). Model config: insults_kaggle_conv_bert

Mangataka ohatra:


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

vokany:

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

Famakafakana fihetseham-po

Fanasokajiana ny fihetseham-po amin'ny lahatsoratra (positive, neutral, negative). Modely config: rusentiment_elmo_twitter_cnn

Mangataka ohatra:

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

vokany:

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

Detection paraphrase

Famaritana raha mitovy hevitra ny andinin-teny roa samy hafa. Modely config: stand_paraphraser_en

fangatahana:

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

vokany:

[
  [1],
  [0]
]

Ny lisitr'ireo modely DeepPavlov rehetra ivelan'ny boaty dia azo jerena foana eto.

famaranana

Ato amin'ity lahatsoratra ity, dia nifankazatra tamin'ny DeepPavlov API sy ny sasany amin'ireo fahaiza-manao fanodinana lahatsoratra ao amin'ny tranomboky nomena avy ao anaty boaty. Tokony hotadidina fa ho an'ny asa NLP rehetra, ny vokatra tsara indrindra dia ho tratra rehefa mampiofana ny maodely amin'ny angon-drakitra mifanaraka amin'ny sehatry ny lohahevitra (domaine) amin'ny asa. Ankoatr'izay, ny modely maro kokoa dia tsy azo ampiofanina amin'ny toe-javatra rehetra.

Ao amin'ny lahatsoratra manaraka dia hijery toe-javatra fanampiny amin'ny tranomboky isika, manomboka ny DeepPavlov avy amin'ny Docker, ary avy eo dia hifindra amin'ny modely fanofanana. Ary aza adino fa manana DeepPavlov ny forum - anontanio ny fanontanianao momba ny tranomboky sy ny modely. Misaotra anao noho ny fifantohanao!

Source: www.habr.com

Add a comment