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). Можно ли в модель, представленную этой библиотекой, добавить дополнительный класс для ссылок или, к примеру, номеров телефона?