Я пытался использовать трансформаторы для NER на французском языке, используя модель «камамбер». Я наткнулся на этот код из: https://huggingface.co/transformers/usage.html. К сожалению, результаты моего короткого предложения неудовлетворительны, и я не могу понять, что-то не так с моим кодом.
import torch
from transformers import AutoModelForTokenClassification, AutoTokenizer
model = AutoModelForTokenClassification.from_pretrained("camembert-base")
tokenizer = AutoTokenizer.from_pretrained("camembert-base")
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 = "Paris, capitale de la France, est une grande ville européenne et un centre mondial de l'art, de la mode, de la gastronomie et de la culture."
# 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())])
Результат прогноза:
[('<s>', 'O'), ('▁Paris', 'O'), (',', 'O'), ('▁capitale', 'B-MISC'), ('▁de', 'O'), ('▁la', 'B-MISC'), ('▁France', 'O'), (',', 'O'), ('▁est', 'B-MISC'), ('▁une', 'O'), ('▁grande', 'O'), ('▁ville', 'O'), ('▁européenne', 'O'), ('▁et', 'O'), ('▁un', 'O'), ('▁centre', 'O'), ('▁mondial', 'O'), ('▁de', 'O'), ('▁l', 'O'), ("'", 'O'), ('art', 'O'), (',', 'O'), ('▁de', 'O'), ('▁la', 'B-MISC'), ('▁mode', 'B-MISC'), (',', 'O'), ('▁de', 'O'), ('▁la', 'B-MISC'), ('▁gastronomie', 'O'), ('▁et', 'O'), ('▁de',
'O'), ('▁la', 'O'), ('▁culture', 'O'), ('.', 'O'), ('</s>', 'O')]`