Вітаю, з цією статтею я розпочну цикл статей відносно до такої дисципліни як “обробка природної мови”.
Прикладом прикладного використання обробки природної мови може бути Google translate, й найбільш сучасний метод до обробки природної мови, сьогодні є Transformers від Huggingface.
Transformer(На базі увага – це все, що вам потрібно папір), метод заснований виключно на механізмах уваги, повністю обходячись без повторень(recurrence) чи звивин(convolutions).
Зразу вкажу що розробка моделей з нуля, є дуже трудомістка справа, й звичайно для практичних використань, набагато розумніше взяти вже готову модель з репозиторію, й зробити тонку настройку вже саме на наше завдання.
Й так, почнемо, почнемо з того, що нам потрібно імпортувати 2 важні бібліотеки, transformers й datasets. Назва першої самоочевидна, друга бібліотека потрібна щоб працювати з наборами даних
!pip3 install -q transformers datasets seqeval #&> /dev/null
import transformers,datasets
По-перше також візьмемо модель та токенізатор. Розповім про них ниже,
tokenizer = transformers.AutoTokenizer.from_pretrained("KoichiYasuoka/bert-base-slavic-cyrillic-upos")
model = transformers.BertForTokenClassification.from_pretrained("KoichiYasuoka/bert-base-slavic-cyrillic-upos")
.. але це тільки вже видана модель bert-base-slavic-cyrillic-upos яка розпізнає українські, сербські, болгарські так російські назви, й побачимо, чи ми можемо якось покращити як модель працює.
По перше подивимося, що сама базова модель покаже про речення з іменами: “Тімo живе в місті Турку й навчається в університеті м.Турку“
pipe = transformers.pipeline("ner",model=model, tokenizer=tokenizer)#,device=0)
res=pipe( "Тімo живе в місті Турку й навчається в університеті м.Турку")
for i in res:
print(i['word'],i['entity'])
А ось результат що я отримав:
ті B-NOUN ##мo I-NOUN жив B-VERB ##е I-VERB в ADP міс B-NOUN ##ті I-NOUN турк B-NOUN ##у I-NOUN и CCONJ нав B-VERB ##ча I-VERB ##ється I-VERB в ADP ун B-NOUN ##ів I-NOUN ##ерс I-NOUN ##ите I-NOUN ##ті I-NOUN м NOUN . PUNCT турк B-PROPN ##у I-PROPN
Це не є зовсім коректно, тому що Турку один раз NOUN, другий раз PROPN, й Тімо – звичайний NOUN, повинне бути PERS(Тімо) GEO(Турку) ORG(університет м.Турку).
Використаємо wikiann україномовний набір даних, у якому є позначки ORG, PER та LOC.
dataset=datasets.load_dataset('wikiann','uk')
label_names = ['O', 'B-PER' , 'I-PER' , 'B-ORG', 'I-ORG', 'B-LOC' , 'I-LOC']
print (label_names)
З цього спробуємо натренувати нашу модель на цей датасет(набір даних).
Два слова, що модель споживає й що вона виробляє.
Модель має ‘input_ids’ й ‘attention_mask’ як вхідна послідовністі й labels як вихід.