ഡെവലപ്പർമാർക്കുള്ള DeepPavlov: #1 NLP ടൂളുകളും ചാറ്റ്ബോട്ട് സൃഷ്ടിക്കലും

എല്ലാവർക്കും ഹായ്! സ്വാഭാവിക ഭാഷാ പ്രോസസ്സിംഗുമായി (നാച്ചുറൽ ലാംഗ്വേജ് പ്രോസസ്സിംഗ് അല്ലെങ്കിൽ ലളിതമായി NLP) ബന്ധപ്പെട്ട പ്രായോഗിക പ്രശ്നങ്ങൾ പരിഹരിക്കുന്നതിനും ഒരു ഓപ്പൺ സോഴ്‌സ് ലൈബ്രറി ഉപയോഗിച്ച് ഡയലോഗ് ഏജന്റുമാരെ (ചാറ്റ്ബോട്ടുകൾ) സൃഷ്ടിക്കുന്നതിനുമായി സമർപ്പിച്ചിരിക്കുന്ന ലേഖനങ്ങളുടെ ഒരു പരമ്പര ഞങ്ങൾ തുറക്കുന്നു. ഡീപ്പാവ്ലോവ്, MIPT ലബോറട്ടറി ഓഫ് ന്യൂറൽ സിസ്റ്റംസ് ആൻഡ് ഡീപ്പ് ലേണിംഗിൽ ഞങ്ങളുടെ ടീം വികസിപ്പിച്ചുകൊണ്ടിരിക്കുന്നു. വിപുലമായ ശ്രേണിയിലുള്ള ഡെവലപ്പർമാർക്ക് ഡീപ്പാവ്‌ലോവിനെ പരിചയപ്പെടുത്തുകയും മെഷീൻ ലേണിംഗിലും ഗണിതശാസ്ത്രത്തിൽ പിഎച്ച്ഡിയിലും ആഴത്തിലുള്ള അറിവില്ലാതെ നിങ്ങൾക്ക് എങ്ങനെ പ്രായോഗികമായ NLP പ്രശ്നങ്ങൾ പരിഹരിക്കാമെന്ന് കാണിക്കുകയും ചെയ്യുക എന്നതാണ് പരമ്പരയുടെ പ്രധാന ലക്ഷ്യം.

NLP ടാസ്‌ക്കുകളിൽ ടെക്‌സ്‌റ്റിന്റെ വികാരം നിർണ്ണയിക്കുക, പേരിട്ടിരിക്കുന്ന എന്റിറ്റികൾ പാഴ്‌സിംഗ് ചെയ്യുക, നിങ്ങളുടെ ബോട്ടിൽ നിന്ന് ഇന്റർലോക്കുട്ടർ എന്താണ് ആഗ്രഹിക്കുന്നതെന്ന് നിർണ്ണയിക്കുക: പിസ്സ ഓർഡർ ചെയ്യുക അല്ലെങ്കിൽ പശ്ചാത്തല വിവരങ്ങൾ നേടുക, കൂടാതെ മറ്റു പലതും. NLP ടാസ്‌ക്കുകളെയും രീതികളെയും കുറിച്ച് നിങ്ങൾക്ക് കൂടുതൽ വായിക്കാം ഇവിടെ.

ഈ ലേഖനത്തിൽ, അധിക കോൺഫിഗറേഷനോ പരിശീലനമോ ഇല്ലാതെ ഉപയോഗിക്കാൻ തയ്യാറായ, മുൻകൂട്ടി പരിശീലിപ്പിച്ച NLP മോഡലുകൾ ഉപയോഗിച്ച് ഒരു REST സെർവർ എങ്ങനെ പ്രവർത്തിപ്പിക്കാമെന്ന് ഞങ്ങൾ കാണിച്ചുതരാം.

ഡെവലപ്പർമാർക്കുള്ള DeepPavlov: #1 NLP ടൂളുകളും ചാറ്റ്ബോട്ട് സൃഷ്ടിക്കലും

ഡീപ്പാവ്ലോവിന്റെ ഇൻസ്റ്റാളേഷൻ

ഇവിടെയും താഴെയും ലിനക്സിനുള്ള നിർദ്ദേശങ്ങൾ നൽകും. വിൻഡോസിനായി, ഞങ്ങളുടെ കാണുക പ്രമാണീകരണം

  • പൈത്തണിന്റെ നിലവിലെ പിന്തുണയ്‌ക്കുന്ന പതിപ്പ് ഉപയോഗിച്ച് ഒരു വെർച്വൽ എൻവയോൺമെന്റ് സൃഷ്‌ടിക്കുകയും സജീവമാക്കുകയും ചെയ്യുക:
    virtualelnv env -p python3.7
    source env/bin/activate
  • ഒരു വെർച്വൽ പരിതസ്ഥിതിയിൽ DeepPavlov ഇൻസ്റ്റാൾ ചെയ്യുക:
    pip install deeppavlov
    

DeepPavlov മോഡലിനൊപ്പം ഒരു REST സെർവർ സമാരംഭിക്കുന്നു

ഞങ്ങൾ ആദ്യമായി DeepPavlov മോഡൽ ഉപയോഗിച്ച് ഒരു സെർവർ സമാരംഭിക്കുന്നതിന് മുമ്പ്, ലൈബ്രറിയുടെ ആർക്കിടെക്ചറിന്റെ ചില സവിശേഷതകളെ കുറിച്ച് സംസാരിക്കുന്നത് ഉപയോഗപ്രദമാകും.

ഡിപിയിലെ ഏത് മോഡലിലും ഇവ ഉൾപ്പെടുന്നു:

  • പൈത്തൺ കോഡ്;
  • ഡൗൺലോഡ് ചെയ്യാവുന്ന ഘടകങ്ങൾ - നിർദ്ദിഷ്ട ഡാറ്റയിൽ സീരിയലൈസ് ചെയ്ത പരിശീലന ഫലങ്ങൾ (എംബെഡിംഗുകൾ, ന്യൂറൽ നെറ്റ്‌വർക്കുകളുടെ ഭാരം മുതലായവ);
  • മോഡൽ ഉപയോഗിക്കുന്ന ക്ലാസുകൾ, ഡൗൺലോഡ് ചെയ്ത ഘടകങ്ങളുടെ URL-കൾ, പൈത്തൺ ഡിപൻഡൻസികൾ മുതലായവയെ കുറിച്ചുള്ള വിവരങ്ങൾ ഉൾക്കൊള്ളുന്ന ഒരു കോൺഫിഗറേഷൻ ഫയൽ (ഇനിമുതൽ കോൺഫിഗറേഷൻ എന്ന് വിളിക്കുന്നു).

ഇനിപ്പറയുന്ന ലേഖനങ്ങളിൽ ഡീപ്‌പാവ്‌ലോവിന്റെ ഹൂഡിന് കീഴിലുള്ള കാര്യങ്ങളെക്കുറിച്ച് ഞങ്ങൾ നിങ്ങളോട് കൂടുതൽ പറയും, ഇപ്പോൾ ഞങ്ങൾക്ക് അത് അറിഞ്ഞാൽ മതി:

  • ഡീപ്‌പാവ്‌ലോവിലെ ഏത് മോഡലും അതിന്റെ കോൺഫിഗറേഷന്റെ പേരിലാണ് തിരിച്ചറിയുന്നത്;
  • മോഡൽ പ്രവർത്തിപ്പിക്കുന്നതിന്, നിങ്ങൾ DeepPavlov സെർവറുകളിൽ നിന്ന് അതിന്റെ ഘടകങ്ങൾ ഡൗൺലോഡ് ചെയ്യേണ്ടതുണ്ട്;
  • കൂടാതെ, മോഡൽ പ്രവർത്തിപ്പിക്കുന്നതിന്, അത് ഉപയോഗിക്കുന്ന പൈത്തൺ ലൈബ്രറികൾ നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്.

ഞങ്ങൾ പുറത്തിറക്കുന്ന ആദ്യ മോഡൽ ബഹുഭാഷാ നാമമുള്ള എന്റിറ്റി റെക്കഗ്നിഷൻ (NER) ആയിരിക്കും. വാചക പദങ്ങൾ അവ ഉൾപ്പെടുന്ന പേരുള്ള എന്റിറ്റികളുടെ തരം അനുസരിച്ച് മോഡൽ തരംതിരിക്കുന്നു (ശരിയായ പേരുകൾ, ഭൂമിശാസ്ത്രപരമായ പേരുകൾ, കറൻസികളുടെ പേരുകൾ, മറ്റുള്ളവ). NER-ന്റെ ഏറ്റവും പുതിയ പതിപ്പിന്റെ കോൺഫിഗറേഷൻ പേര്:

ner_ontonotes_bert_mult

മോഡൽ ഉപയോഗിച്ച് ഞങ്ങൾ REST സെർവർ സമാരംഭിക്കുന്നു:

  1. അതിന്റെ കോൺഫിഗേഷനിൽ വ്യക്തമാക്കിയ മോഡൽ ഡിപൻഡൻസികൾ ഞങ്ങൾ സജീവമായ വെർച്വൽ എൻവയോൺമെന്റിലേക്ക് ഇൻസ്റ്റാൾ ചെയ്യുന്നു:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. DeepPavlov സെർവറുകളിൽ നിന്ന് സീരിയലൈസ് ചെയ്ത മോഡൽ ഘടകങ്ങൾ ഡൗൺലോഡ് ചെയ്യുക:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    ഡിഫോൾട്ടായി സ്ഥിതി ചെയ്യുന്ന DeepPavlov ഹോം ഡയറക്ടറിയിലേക്ക് സീരിയലൈസ് ചെയ്ത ഘടകങ്ങൾ ഡൗൺലോഡ് ചെയ്യപ്പെടും.

    ~/.deeppavlov

    ഡൗൺലോഡ് ചെയ്യുമ്പോൾ, ഇതിനകം ഡൗൺലോഡ് ചെയ്ത ഘടകങ്ങളുടെ ഹാഷ് സെർവറിൽ സ്ഥിതി ചെയ്യുന്ന ഘടകങ്ങളുടെ ഹാഷുകൾക്കെതിരെ പരിശോധിക്കുന്നു. പൊരുത്തമുണ്ടെങ്കിൽ, ഡൗൺലോഡ് ഒഴിവാക്കുകയും നിലവിലുള്ള ഫയലുകൾ ഉപയോഗിക്കുകയും ചെയ്യും. ഡൗൺലോഡ് ചെയ്‌ത ഘടകങ്ങളുടെ വലുപ്പം ശരാശരി 0.5 മുതൽ 8 ജിബി വരെ വ്യത്യാസപ്പെടാം, ചില സന്ദർഭങ്ങളിൽ അൺസിപ്പ് ചെയ്‌തതിന് ശേഷം 20 ജിബി വരെ എത്തുന്നു.

  3. മോഡൽ ഉപയോഗിച്ച് ഞങ്ങൾ REST സെർവർ സമാരംഭിക്കുന്നു:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

ഈ കമാൻഡ് എക്സിക്യൂട്ട് ചെയ്യുന്നതിന്റെ ഫലമായി, ഹോസ്റ്റ് മെഷീന്റെ പോർട്ട് 5005-ൽ ഒരു മോഡൽ ഉള്ള ഒരു REST സെർവർ ലോഞ്ച് ചെയ്യും (സ്ഥിര പോർട്ട് 5000 ആണ്).

മോഡൽ സമാരംഭിച്ച ശേഷം, API ഡോക്യുമെന്റേഷനോടുകൂടിയ സ്വാഗറും പരിശോധിക്കാനുള്ള കഴിവും URL-ൽ കണ്ടെത്താനാകും http://127.0.0.1:5005. അവസാന പോയിന്റിലേക്ക് അയച്ചുകൊണ്ട് നമുക്ക് മോഡൽ പരിശോധിക്കാം http://127.0.0.1:5005/model ഇനിപ്പറയുന്ന JSON ഉള്ളടക്കത്തോടുകൂടിയ POST അഭ്യർത്ഥന:

{
  "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

ഓരോ 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"]
]

പാരാഫ്രേസ് കണ്ടെത്തൽ

രണ്ട് വ്യത്യസ്ത ഗ്രന്ഥങ്ങൾക്ക് ഒരേ അർത്ഥമുണ്ടോ എന്ന് നിർണ്ണയിക്കുന്നു. മോഡൽ കോൺഫിഗറേഷൻ: സ്റ്റാൻഡ്_പാരാഫ്രേസർ_രു

അഭ്യർത്ഥന:

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

ഫലം:

[
  [1],
  [0]
]

എല്ലാ ഔട്ട്-ഓഫ്-ബോക്സ് ഡീപ്പാവ്ലോവ് മോഡലുകളുടെയും നിലവിലെ ലിസ്റ്റ് എല്ലായ്പ്പോഴും കണ്ടെത്താനാകും ഇവിടെ.

തീരുമാനം

ഈ ലേഖനത്തിൽ, ഞങ്ങൾ DeepPavlov API യും ബോക്‌സിന് പുറത്ത് നൽകിയിരിക്കുന്ന ലൈബ്രറിയുടെ ചില ടെക്‌സ്‌റ്റ് പ്രോസസ്സിംഗ് കഴിവുകളും പരിചയപ്പെട്ടു. ഏതൊരു എൻ‌എൽ‌പി ടാസ്‌ക്കിനും, ടാസ്‌ക്കിന്റെ വിഷയ മേഖലയുമായി (ഡൊമെയ്‌ൻ) അനുയോജ്യമായ ഒരു ഡാറ്റാ സെറ്റിൽ മോഡൽ പരിശീലിപ്പിക്കുമ്പോൾ മികച്ച ഫലം കൈവരിക്കുമെന്ന് ഓർമ്മിക്കേണ്ടതാണ്. കൂടാതെ, കൂടുതൽ മോഡലുകൾ, തത്വത്തിൽ, എല്ലാ സാഹചര്യങ്ങളിലും പരിശീലിപ്പിക്കാൻ കഴിയില്ല.

ഇനിപ്പറയുന്ന ലേഖനങ്ങളിൽ ഞങ്ങൾ ലൈബ്രറിയുടെ അധിക ക്രമീകരണങ്ങൾ നോക്കും, ഡോക്കറിൽ നിന്ന് DeepPavlov സമാരംഭിക്കും, തുടർന്ന് ഞങ്ങൾ പരിശീലന മോഡലുകളിലേക്ക് പോകും. ഡീപ്പാവ്‌ലോവിന് ഉണ്ടെന്ന കാര്യം മറക്കരുത് ഫോറം - ലൈബ്രറിയെക്കുറിച്ചും മോഡലുകളെക്കുറിച്ചും നിങ്ങളുടെ ചോദ്യങ്ങൾ ചോദിക്കുക. നിങ്ങളുടെ ശ്രദ്ധയ്ക്ക് നന്ദി!

അവലംബം: www.habr.com

ഒരു അഭിപ്രായം ചേർക്കുക