Yerli dillərdə kontekstli söz yerləşdirmə ilə xüsusi bir NER modeli yaradın

Hal-hazırda sosial media, xəbər məqalələri, söhbət məlumatları və s. Kimi müxtəlif mənbələrdən əldə edilmiş çox sayda strukturlaşdırılmamış məlumatlara sahibik. Bu məlumatlar əldə etmək çətin olsa da, bu NLP-nin (Təbii Dil İşləmə) ən böyük problemlərindən biridir.

Adlı Varlıq Tanıma'nın işə başladığı yer budur. Bu yazıda NER (Adlı Varlıq Tanıma) ilə tanış oluruq. Şəxsi NER-i, müəssisələrlə işarələnmiş "Hava" ifadələrini özündə cəmləşdirən bir Hindi verilənlər bazasında Allennlp çərçivəsini istifadə edərək tətbiq edəcəyik.

Adlı Varlıq Tanıma (NER) ilə tanış olmaq

NER, söz yerləşdirmələrini istifadə edərək sözlərin kontekstual mənasını almağa çalışdığımız bir sıra etiketi tapşırığıdır. Adı verilən şəxsləri strukturlaşdırılmamış mətndən əvvəlcədən təyin edilmiş kateqoriyalara ayırmaq üçün NER məlumat çıxarış modelindən istifadə edirik. Adlandırılmış varlıqlar bir şəxsin adı, yeri, işarəsi və s. Kimi həqiqi obyektlərdir.

NER sənədlərdən (məsələn, e-poçtlardan), danışıq məlumatlarından və s. Məlumatların çıxarılmasında əsas rol oynayır. Əslində, söhbət botunun NLU-nun iki əsas komponenti niyyət təsnifatı və varlığın çıxarılmasıdır. Conversational Agent-lərdəki NER, tarix, yer, e-poçt ünvanı, telefon nömrəsi və s. Kimi məlumatları əldə etmək üçün varlığın aşkarlanması və məlumat çıxarılması üçün istifadə olunur.

Konteksti nəzərə almaq müxtəlif NLP tapşırıqlarının ayrılmaz hissəsidir. NER-də (GLOVE, Fasttext, Word2Vec və s.) Kimi adi söz birləşmələri ilə əldə edilə bilməyən konteksti bilmək çox vacibdir. Burada bu yerleşimler söz başına yalnız bir təmsil təyin edir, əslində fərqli sözlər harada və hansı kontekstdə istifadə olunduğuna görə fərqli mənalar daşıyır. İndi ELMO modeli istifadə edərək kontekstləşdirilmiş söz yerləşdirmənin səmərəli kontekstual məlumat təmin etdiyini görəcəyik.

ELMo (dil modellərindən daxilolma)

ELMO memarlığı

ELMO, yalnız sözlərin mənasını tutan və konteksti bilməyən GLOVE gömdüklərindən fərqli olaraq həm sözlərin mənasını, həm də yerləşdikləri konteksti başa düşür.

ELMO, sözlərin mənasını həmin kontekstdə tutmaq və digər kontekstual məlumatları əldə etmək üçün istifadə edildikləri kontekstə əsaslanaraq sözcüklərə yer ayırır.

GLOVE-dəki kimi hər bir söz üçün sabit bir yerləşdirmə istifadə etmək əvəzinə, ELMo hər bir sözə bir gömme təyin etmədən əvvəl bütün cümləyə baxır. Bu söz yerləşdirmələrini yaratmaq üçün xüsusi tapşırıqlar üçün hazırlanmış iki istiqamətli LSTM istifadə edir.

ELMO, təbii dil emalı (NLP) kontekstində təlim öncəsi bir addım idi. Elmo LSTM, xüsusi dil modelləri yaratmaq üçün hər hansı bir dildə geniş bir məlumat dəsti üzərində öyrədilə bilər və daha sonra NLU (Natural Language Understanding) -dan məsul olan digər modellərdə bir komponent olaraq yenidən istifadə edilə bilər.

ELMO, NLU (Natural Language Understanding) üçün vacib olan dil modelləşdirməsi adlı bir tapşırıq olan növbəti sözləri bir sıra ardıcıllıqla proqnozlaşdırmağı öyrəndi. Bu, dil modellərinin yaradılması üçün faydalıdır, çünki belə bir modelin etiketlərə ehtiyac duymadan öyrənə biləcəyi çox sayda mətn məlumatımız var.

Kontekstləşdirilmiş söz daxiletmələri, cümlə daxilində mənalarına əsasən sözlərə müxtəlif yerləşmişlər verə bilər. (Mənbə: Illustrated BERT, ELMo and Co. (NLP necə keçdi Transfer öyrənmə) Jay Alammar)

ELMo sənədi, söz istifadəsinin həm sintaksis, həm də semantik kimi kompleks xüsusiyyətlərini və dil kontekstləri arasındakı fərqləri modelləşdirən dərin məzmunlu söz yerləşdirmələrini təqdim edir. Məqalədə, NLP problemlərinə meydan oxumaq üçün sənət səviyyəsini əhəmiyyətli dərəcədə yaxşılaşdırmaq üçün əvvəlcədən hazırlanmış yerləşmiş yerlərin mövcud modellərə necə əlavə edilə biləcəyi göstərilir. Daha dərindən başa düşmək üçün qəzeti oxuyun

AllenNLP-də NER modelini öyrənin

AllenNLP əməkdaşları, ELMO-nu kontekstləşdirilmiş söz yerləşdirmə konsepsiyasını dərindən kontekstləşdirilmiş söz təqdimatlarında təqdim etdilər. İndi NER vəzifəmiz üçün AllenNLP çərçivəsini istifadə edəcəyik.

quraşdırma

  1. Python ilə bir Conda mühitinin yaradılması
conda yaratmaq -n allennlp python = 3.6

2. Ətraf mühiti aktivləşdirin.

Allennlp mənbəyini aktivləşdirin

3. Mənbədən quraşdıracağıq.

Git klonu https://github.com/allenai/allennlp.git cd allennlp pip install -r requirements.txt

Allenlp Framework-də bir model yetişdirmək üçün məlumat oxumaq üçün DatasetReader və seçdiyiniz bir model tətbiq etməlisiniz, bu halda CRFTagger modeli.

  1. DatasetReader with ilə məlumatları oxuyun

Əldə etdiyimiz məlumatlar BILOU etiketləri ilə təmin edilmişdir və CoNLL formatındadır. CoNLL formatlı məlumatlar, hər bir sətirdə bir söz, varlıqlar boşluqla ayrılmış və növbəti cümlə sətirlə ayrılmışdır. BILOU işarəsi sxemində B (başlanğıc), I (içəridə), L (son), O (xaricdə), U (vahid).

क्या O कल B-tarix, L-tarix में O धूप U-hava növü आएगी O
Və U-Vəzifə O O मौसम O की O स्थिति O क्या O है O

DatasetReader bir faylı oxuyur və nümunələr toplusuna çevirir. Burada conll2003 qeyd oxuyucusunu ehtiyaclarımıza görə biraz çimdikdən istifadə edirik, çünki yalnız NER etiketləri olan məlumatlara sahibik və bu oxucu pos, NER və yığın etiketlərini ehtiva edən bir conll2003 qeydini qəbul edir.

“DatasetReader müəyyən bir yerdən məlumatları oxuyur və verilənlər bazası yaradır. Fayl yolu xaricində məlumatları oxumaq üçün lazım olan bütün parametrlər DatasetReader qurucusuna verilməlidir. ”- AllenNLP sənədləri.

Üç şəxslə bir hava qeydimiz var: yer, hava növü və tarix. Tokenləşdirilmiş nümunələri oxumaq və yaratmaq üçün iki üsul tətbiq etməliyik.

oxu ()

Read () metodu məlumat alır. AllenNLP, məlumat faylları üçün yolu təyin etməyə imkan verir (məsələn, JSON faylı üçün yol). Hər bir mətni və etiketi qeyddən oxuyub aşağıda göstərildiyi kimi text_to_instance () ilə bükəcəyik.

text_to_instance ()

Bu metod "mətn daxil edilməsindən nümunəyə keçmək üçün lazım olan işarəni və ya işləmə prosesini aparır".

2. Model hissə ilə davam edək

Allennlp Framework-də təqdim olunan CRFTagger modelindən istifadə edəcəyik. Modeldən olduğu kimi istifadə edə bilərik. CRFTagger bir Seq2SeqEncoder ilə bir mətn ardıcıllığını kodlayır və sonra ardıcıllıqdakı hər bir jeton üçün bir etiketi proqnozlaşdırmaq üçün şərti olaraq təsadüfi bir sahə modelindən istifadə edir.

Burada Bi-LSTM + CRF modeli var.

Bi-lstm sözlə konseptual məna tuta bilsə də, hələ etiketlər arasında əlaqə tapa bilməmişik. Bu, məsələn, bir günün tarixə başlamasını istəmədiyiniz və bir məkana başlamaq üçün bir günün istəmədiyiniz NER üçün problem ola bilər. Burada şərti təsadüfi sahə etiketlər arasındakı asılılığı tapmağa kömək edir.

Tətbiq edəcəyimiz "xətti zəncir" şərti təsadüfi sahə keçid xərcləri ilə bir matrisə sahibdir num_tags x num_tags, burada keçidlər [i, j] jth gündən ith günə keçid ehtimalını təmsil edir.

Proqnozlaşdırmaq istədiyimiz etiketlərə əlavə olaraq cümlələr arasındakı "keçidi" ələ keçirmək üçün hər cümlədən əvvəl və sonra xüsusi "başlanğıc" və "bitiş" etiketleri əlavə olunur.

Bundan əlavə, CRF, "etibarsız" keçidləri qadağan edən isteğe bağlı bir sıra məhdudiyyətlər qəbul edir (burada "etibarsız" modelləşdirmək istədiyinizdən asılıdır). Məsələn, NER verilərimizdə hər bir varlıq növünün başlanğıcını, ortasını və sonunu təmsil edən fərqli etiketlər var. Aşağıda izah edildiyi kimi bir tarix müəssisəsini başlamaq üçün bir günün ardından bir yer şəxsini bitirmək üçün bir gün izləmək istəmirik.

Tarixlərimizə baxsaq, ilk cümlədə कल (B-tarix) दोपहर (L-tarix) birləşdiririk, tarixi कल कल kimi əldə edə bilərik. Kontekstual səbəblərdən, कल (B-Date) (U-Wetter_Typ) ilə birləşdirilə bilməz, çünki कल (B-Date) दोपहर (L-Date) ilə izlənilməlidir. Bu, CRF köməyi ilə əldə edilir.

क्या O कल B-tarix, L-tarix में O धूप U-hava növü आएगी O
Və U-Vəzifə O O मौसम O की O स्थिति O क्या O है O

Modelin daha dərindən başa düşülməsi üçün nəzərdən keçirilməli bəzi şeylər:

Bir konfiqurasiya faylı yaratmaq

Modeli öyrətmək üçün lazım olan hər şeyi göstərmək üçün bir konfiqurasiya sənədinə ehtiyacımız var. Qatarın yolu, Val, FastText yerləşdirmə, ELMo ağırlıqları və seçim sənədləri təqdim etməliyik. Yeri gəlmişkən, bütün sahələr özünü doğruldur.

Nəhayət məşqə başlaya bilərik

İndi NER modelini öyrədə bilərik. Bunun üçün bir neçə sənədə ehtiyacımız var.

  1. Təlim və təsdiqləmə məlumatları.
  2. Hindi ELMo çəkilər və seçimlər faylı. Hind viki məlumatları üzrə öyrədilmiş bir ELMo modelindən istifadə edə bilərik. Sizə Wikidump-da təhsil almış hind dilində ELMo embedlərini təklif edirik.
  3. fastText hindi gömülü.

Bütün faylları burada tapa bilərsiniz.

Məşq zamanı hər dövrdən sonra dəqiqliyi izləyirik və ən yaxşı çəkilər qeyd olunur. Təlim metoduna zəng edərək model konfiqurasiya sənədinə və model çıxış yoluna keçərək təlimə başlaya bilərsiniz.

$ allennlp qatar yolu / to / config / file -s path / to / output / folder
Təlimdən sonra göstəricilər

Burada məşqdən sonra fərqli oxumalar aldığımızı görə bilərsiniz. Artıq burada verilən doğrulama məlumatları ilə yaxşı nəticələr əldə etmək üçün verilənlər bazası ilə də oynaya bilərsiniz. Xoşbəxt məşq !!!!!!

proqnoz

Təlim bitdikdən sonra, aşağıda göstərildiyi kimi qeyd olunan model yoluna və bir test sənədinə ötürərək "Proqnozlaşdırma Metodu" nu çağıraraq proqnoz verə bilərik.

allennlp \ path / to / model.tar.gz \ path / to / test.txt \

Bunu etdikdə müxtəlif qeydlər, etiketlər əldə edəcəksiniz. Orada proqnozlaşdırılan etiketli bütün sözlər göstərilir.

Daha dərindən başa düşmək üçün mənbələr

  1. NER və POS üçün xarakter yerləşdirmə ilə Bi-LSTM + CRF
  2. Təsvirli BERT, ELMo və Co. (NLP transfer öyrənməsini necə sındırdı)
  3. Pytorch ilə Bi-LSTM + CRF
  4. Allennlp sənədləri

Nəticə

Ümid edirəm ki, AllenNLP-i kontekstləşdirilmiş gömülü (ELMo) bir NER tətbiq etmək və sonra praktikada tətbiq etmək üçün necə istifadə edə biləcəyiniz barədə hərtərəfli bir fikir əldə etdiniz.

Bu məqaləni bəyəndinizsə, xahiş edirəm NLP inkişaf etdiricilərini məlumatlandırmaqda bizə kömək edin. Bizi izləyin, paylaşın və əl çalın.