Named entity recognition для имен и ссылок

Начал изучение NER на основе библиотеки Transformers и решил реализовать пример, который приведен в документации:

from transformers import AutoModelForTokenClassification, AutoTokenizer, BertTokenizer
import torch

model = AutoModelForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")
tokenizer = BertTokenizer.from_pretrained("bert-base-cased")




label_list = [
    "O",       # Outside of a named entity
    "B-MISC",  # Beginning of a miscellaneous entity right after another miscellaneous entity
    "I-MISC",  # Miscellaneous entity
    "B-PER",   # Beginning of a person's name right after another person's name
    "I-PER",   # Person's name
    "B-ORG",   # Beginning of an organisation right after another organisation
    "I-ORG",   # Organisation
    "B-LOC",   # Beginning of a location right after another location
    "I-LOC"    # Location
]

sequence = "Welcome Home Ekaterina Copperfield here is your link https://stackoverflow.com/jobs"
# Bit of a hack to get the tokens with the special tokens
tokens = tokenizer.tokenize(tokenizer.decode(tokenizer.encode(sequence)))
inputs = tokenizer.encode(sequence, return_tensors="pt")

outputs = model(inputs)[0]
predictions = torch.argmax(outputs, dim=2)

print([(token, label_list[prediction]) for token, prediction in zip(tokens, predictions[0].tolist())])

output:[('[CLS]', 'O'), ('Welcome', 'O'), ('Home', 'O'),
 ('E', 'I-PER'), ('##kat', 'I-PER'), ('##erina', 'I-PER'),
 ('Copper', 'I-PER'), ('##field', 'I-ORG'), ('here', 'O'),
 ('is', 'O'), ('your', 'O'), ('link', 'O'), ('https', 'O'),
 (':', 'O'), ('/', 'O'), ('/', 'O'), ('stack', 'O'), ('##over', 'O'),
 ('##flow', 'O'), ('.', 'O'), ('com', 'O'), ('/', 'O'), ('jobs', 'O'), ('[SEP]', 'O')]

Я так понимаю, что из-за русского имени оно разделило его на 3 части но, могу ли я настроить эту часть кода, чтобы на выходе не иметь подобное разделение ('E', 'I-PER'), ('##kat', 'I-PER'), ('##erina', 'I-PER'). ?

И второй вопрос, в данной моделе существует только 9 классов и поэтому не распознается ссылка (в данном случае на stack jobs). Можно ли в модель, представленную этой библиотекой, добавить дополнительный класс для ссылок или, к примеру, номеров телефона?


Ответы (0 шт):