Автор|huggingface Компилировать|ВКонтакте Источник | Гитхаб
В этой главе рассматриваются наиболее распространенные варианты использования библиотеки Transformers. Доступные модели допускают множество различных конфигураций и очень универсальны для разных вариантов использования. Здесь представлены простейшие методы, демонстрирующие использование для таких задач, как ответы на вопросы, классификация последовательностей, распознавание именованных объектов и многое другое.
Эти примеры используютAuto Model
, эти классы создадут экземпляр модели на основе заданной контрольной точки и автоматически выберут правильную архитектуру модели. Для получения дополнительной информации, проверьте:AutoModel
документация. Не стесняйтесь изменять код, чтобы он был более конкретным, и адаптируйте его к вашему конкретному варианту использования.
- Чтобы модель хорошо справлялась с задачей, модель должна быть загружена из контрольной точки, соответствующей этой задаче. Эти контрольные точки обычно предварительно обучаются на больших объемах данных и точно настраиваются для конкретных задач. Это означает: не все модели точно настроены под все задачи. Если вы хотите настроить модель под конкретную задачу, вы можете использовать каталог примеров
run\$task.py
сценарий. - Точно настроенная модель точно настроена на конкретном наборе данных. Этот набор данных может или не может пересекаться с вашим вариантом использования и доменом. Как упоминалось ранее, вы можете использовать примеры сценариев для тонкой настройки модели или создавать свои собственные обучающие сценарии.
Для рассуждений о задачах в библиотеке предусмотрено несколько механизмов:
- Каналы — это очень простые в использовании абстракции, для которых требуется всего две строки кода.
- Используйте модель напрямую с Tokenizer (PyTorch/TensorFlow), чтобы использовать полный вывод модели. Этот механизм немного сложнее, но и мощнее.
Здесь показаны два метода.
Обратите внимание, что все представленные здесь задачи используют модели, которые были настроены для конкретных задач после предварительно обученных моделей. При загрузке контрольной точки, которая не настроена для конкретной задачи, будет загружен только слой преобразователя, а не дополнительный слой, используемый для этой задачи, что случайным образом инициализирует веса этого дополнительного слоя. Это произведет случайный вывод.
классификация последовательностей
Классификация последовательностей — это задача классификации последовательностей на основе заданных классов. Примером классификации последовательностей является набор данных GLUE, полностью основанный на этой задаче. Если вы хотите точно настроить свою модель для задачи классификации последовательности GLUE, вы можете использоватьrun_GLUE.py
илиrun_tf_GLUE.py
сценарий.
Вот пример анализа настроений с использованием конвейера: определение того, является ли последовательность положительной или отрицательной. Он использует точно настроенную модель на sst2, которая представляет собой задачу GLUE.
from transformers import pipeline
nlp = pipeline("sentiment-analysis")
print(nlp("I hate you"))
print(nlp("I love you"))
Это вернет метку («положительно» или «отрицательно») и оценку, подобную этой:
[{'label': 'NEGATIVE', 'score': 0.9991129}]
[{'label': 'POSITIVE', 'score': 0.99986565}]
Ниже приведен пример использования модели для классификации последовательностей, чтобы определить, являются ли две последовательности объяснениями друг друга. Процесс выглядит следующим образом:
- Создайте экземпляр токенизатора и модели по имени контрольной точки. Модель идентифицируется как модель BERT и загружается с весами, хранящимися в контрольной точке.
- Создайте последовательность из этих двух предложений, токенизируйте идентификатор типа и маску внимания с помощью правильного разделителя для конкретной модели (с этим справляются encode() и encode_plus())
- Передайте эту последовательность в модель, чтобы отнести ее к одному из двух доступных классов: 0 (не объяснение) и 1 (является объяснением).
- Рассчитайте softmax результата, чтобы получить вероятность класса
- распечатать результат
Питорч код
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased-finetuned-mrpc")
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased-finetuned-mrpc")
classes = ["not paraphrase", "is paraphrase"]
sequence_0 = "The company HuggingFace is based in New York City"
sequence_1 = "Apples are especially bad for your health"
sequence_2 = "HuggingFace's headquarters are situated in Manhattan"
paraphrase = tokenizer.encode_plus(sequence_0, sequence_2, return_tensors="pt")
not_paraphrase = tokenizer.encode_plus(sequence_0, sequence_1, return_tensors="pt")
paraphrase_classification_logits = model(**paraphrase)[0]
not_paraphrase_classification_logits = model(**not_paraphrase)[0]
paraphrase_results = torch.softmax(paraphrase_classification_logits, dim=1).tolist()[0]
not_paraphrase_results = torch.softmax(not_paraphrase_classification_logits, dim=1).tolist()[0]
print("Should be paraphrase")
for i in range(len(classes)):
print(f"{classes[i]}: {round(paraphrase_results[i] * 100)}%")
print("\nShould not be paraphrase")
for i in range(len(classes)):
print(f"{classes[i]}: {round(not_paraphrase_results[i] * 100)}%")
Код TensorFlow
from transformers import AutoTokenizer, TFAutoModelForSequenceClassification
import tensorflow as tf
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased-finetuned-mrpc")
model = TFAutoModelForSequenceClassification.from_pretrained("bert-base-cased-finetuned-mrpc")
classes = ["not paraphrase", "is paraphrase"]
sequence_0 = "The company HuggingFace is based in New York City"
sequence_1 = "Apples are especially bad for your health"
sequence_2 = "HuggingFace's headquarters are situated in Manhattan"
paraphrase = tokenizer.encode_plus(sequence_0, sequence_2, return_tensors="tf")
not_paraphrase = tokenizer.encode_plus(sequence_0, sequence_1, return_tensors="tf")
paraphrase_classification_logits = model(paraphrase)[0]
not_paraphrase_classification_logits = model(not_paraphrase)[0]
paraphrase_results = tf.nn.softmax(paraphrase_classification_logits, axis=1).numpy()[0]
not_paraphrase_results = tf.nn.softmax(not_paraphrase_classification_logits, axis=1).numpy()[0]
print("Should be paraphrase")
for i in range(len(classes)):
print(f"{classes[i]}: {round(paraphrase_results[i] * 100)}%")
print("\nShould not be paraphrase")
for i in range(len(classes)):
print(f"{classes[i]}: {round(not_paraphrase_results[i] * 100)}%")
Это выведет следующие результаты:
Should be paraphrase
not paraphrase: 10%
is paraphrase: 90%
Should not be paraphrase
not paraphrase: 94%
is paraphrase: 6%
Экстрактивные вопросы и ответы
Экстрактивный ответ на вопрос - это задача извлечения ответов из текста заданного вопроса. Примером набора данных для ответа на вопрос является набор данных SQuAD, который полностью основан на этой задаче. Если вы хотите настроить модель в командной задаче, вы можете использоватьrun_SQuAD.py
.
Вот пример ответа на вопрос с использованием конвейера: извлечение ответов из текста заданного вопроса. Он использует точно настроенную модель отряда.
from transformers import pipeline
nlp = pipeline("question-answering")
context = r"""
Extractive Question Answering is the task of extracting an answer from a text given a question. An example of a
question answering dataset is the SQuAD dataset, which is entirely based on that task. If you would like to fine-tune
a model on a SQuAD task, you may leverage the `run_squad.py`.
"""
print(nlp(question="What is extractive question answering?", context=context))
print(nlp(question="What is a good example of a question answering dataset?", context=context))
Это вернет извлеченный ответ из текста, уровень достоверности и значения «начало» и «конец», которые представляют собой позицию извлеченного ответа в тексте.
{'score': 0.622232091629833, 'start': 34, 'end': 96, 'answer': 'the task of extracting an answer from a text given a question.'}
{'score': 0.5115299158662765, 'start': 147, 'end': 161, 'answer': 'SQuAD dataset,'}
Ниже приведен пример ответа на вопрос с использованием модели и токенизатора. Процесс выглядит следующим образом:
- Создайте экземпляр токенизатора и модели по имени контрольной точки. Модель идентифицируется как модель BERT и загружается с весами, хранящимися в контрольной точке.
- Определите фрагмент текста и несколько вопросов.
- Переберите вопросы и создайте последовательность из текста и текущего вопроса, передайте эту последовательность в модель с правильным идентификатором типа маркера-разделителя для конкретной модели и маской внимания. Это выведет серию баллов для начальной и конечной позиции всей последовательности маркеров (вопросы и текст).
- Рассчитайте softmax результата, чтобы получить соответствующие вероятности из начального и конечного положений маркеров.
- Преобразуйте эти токены в строки.
- распечатать результат
Питорч код
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch
tokenizer = AutoTokenizer.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
model = AutoModelForQuestionAnswering.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
text = r"""
? Transformers (formerly known as pytorch-transformers and pytorch-pretrained-bert) provides general-purpose
architectures (BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet…) for Natural Language Understanding (NLU) and Natural
Language Generation (NLG) with over 32+ pretrained models in 100+ languages and deep interoperability between
TensorFlow 2.0 and PyTorch.
"""
questions = [
"How many pretrained models are available in Transformers?",
"What does Transformers provide?",
"Transformers provides interoperability between which frameworks?",
]
for question in questions:
inputs = tokenizer.encode_plus(question, text, add_special_tokens=True, return_tensors="pt")
input_ids = inputs["input_ids"].tolist()[0]
text_tokens = tokenizer.convert_ids_to_tokens(input_ids)
answer_start_scores, answer_end_scores = model(**inputs)
answer_start = torch.argmax(
answer_start_scores
) # Get the most likely beginning of answer with the argmax of the score
answer_end = torch.argmax(answer_end_scores) + 1 # Get the most likely end of answer with the argmax of the score
answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))
print(f"Question: {question}")
print(f"Answer: {answer}\n")
Код TensorFlow
from transformers import AutoTokenizer, TFAutoModelForQuestionAnswering
import tensorflow as tf
tokenizer = AutoTokenizer.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
model = TFAutoModelForQuestionAnswering.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
text = r"""
? Transformers (formerly known as pytorch-transformers and pytorch-pretrained-bert) provides general-purpose
architectures (BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet…) for Natural Language Understanding (NLU) and Natural
Language Generation (NLG) with over 32+ pretrained models in 100+ languages and deep interoperability between
TensorFlow 2.0 and PyTorch.
"""
questions = [
"How many pretrained models are available in Transformers?",
"What does Transformers provide?",
"Transformers provides interoperability between which frameworks?",
]
for question in questions:
inputs = tokenizer.encode_plus(question, text, add_special_tokens=True, return_tensors="tf")
input_ids = inputs["input_ids"].numpy()[0]
text_tokens = tokenizer.convert_ids_to_tokens(input_ids)
answer_start_scores, answer_end_scores = model(inputs)
answer_start = tf.argmax(
answer_start_scores, axis=1
).numpy()[0] # Get the most likely beginning of answer with the argmax of the score
answer_end = (
tf.argmax(answer_end_scores, axis=1) + 1
).numpy()[0] # Get the most likely end of answer with the argmax of the score
answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))
print(f"Question: {question}")
print(f"Answer: {answer}\n")
Это выведет вопрос после предсказанного ответа:
Question: How many pretrained models are available in Transformers?
Answer: over 32 +
Question: What does Transformers provide?
Answer: general - purpose architectures
Question: Transformers provides interoperability between which frameworks?
Answer: tensorflow 2 . 0 and pytorch
языковое моделирование
Языковое моделирование — это задача адаптации модели к предметно-ориентированному корпусу. Все популярные модели на основе трансформеров обучаются с использованием вариантов языкового моделирования, таких как BERT для маскированного языкового моделирования, GPT-2 для каузального языкового моделирования.
Языковое моделирование также полезно вне предварительного обучения, например, для преобразования распределения модели в конкретную область: используйте языковую модель, обученную на очень большом корпусе, а затем точно настройте ее на наборах данных новостей или научных статьях, например, LysandreJik/arxiv nlp. (закон об объятиях test.co/Travel three hot/AR…).
моделирование языка маски
Моделирование маскированного языка — это задача маскирования токенов в последовательности с помощью токенов маски и запроса модели на заполнение этой маски соответствующими токенами. Это позволяет модели обрабатывать как правый контекст (токены справа от маски), так и левый контекст (токены слева от маски). Такое обучение закладывает прочную основу для последующих задач, таких как SQuAD, которые требуют двунаправленного контекста.
Вот пример использования конвейера для замены масок в последовательности:
from transformers import pipeline
nlp = pipeline("fill-mask")
print(nlp(f"HuggingFace is creating a {nlp.tokenizer.mask_token} that the community uses to solve NLP tasks."))
Это выведет заполненную маской последовательность, показатель достоверности и идентификатор токена в словаре Tokenizer:
[
{'sequence': '<s> HuggingFace is creating a tool that the community uses to solve NLP tasks.</s>', 'score': 0.15627853572368622, 'token': 3944},
{'sequence': '<s> HuggingFace is creating a framework that the community uses to solve NLP tasks.</s>', 'score': 0.11690319329500198, 'token': 7208},
{'sequence': '<s> HuggingFace is creating a library that the community uses to solve NLP tasks.</s>', 'score': 0.058063216507434845, 'token': 5560},
{'sequence': '<s> HuggingFace is creating a database that the community uses to solve NLP tasks.</s>', 'score': 0.04211743175983429, 'token': 8503},
{'sequence': '<s> HuggingFace is creating a prototype that the community uses to solve NLP tasks.</s>', 'score': 0.024718601256608963, 'token': 17715}
]
Ниже приведен пример моделирования маскированного языка с использованием модели и Tokenizer. Процесс выглядит следующим образом:
- Создайте экземпляр токенизатора и модели по имени контрольной точки. Модель идентифицируется как модель DistilBERT и загружается с весами, хранящимися в контрольной точке.
- Определите последовательность замаскированных токенов, не используя слова, а выбирая
tokenizer.mask_token
Сделайте размещение (сделайте маскировку). - Закодируйте эту последовательность как идентификатор и найдите положение маркера маски в этом списке идентификаторов.
- Получите прогнозы по индексам замаскированных токенов: этот тензор имеет тот же размер, что и словарь, а значения представляют собой оценки для каждого токена. Модель дала более высокие оценки маркерам, которые, по его мнению, были вероятными в данном случае.
- Использование PyTorch
topk
или ТензорФлоуtop_k
Метод извлекает первые 5 токенов. - Замените токены маски предсказанными токенами и распечатайте результат
Питорч код
from transformers import AutoModelWithLMHead, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-cased")
model = AutoModelWithLMHead.from_pretrained("distilbert-base-cased")
sequence = f"Distilled models are smaller than the models they mimic. Using them instead of the large versions would help {tokenizer.mask_token} our carbon footprint."
input = tokenizer.encode(sequence, return_tensors="pt")
mask_token_index = torch.where(input == tokenizer.mask_token_id)[1]
token_logits = model(input)[0]
mask_token_logits = token_logits[0, mask_token_index, :]
top_5_tokens = torch.topk(mask_token_logits, 5, dim=1).indices[0].tolist()
for token in top_5_tokens:
print(sequence.replace(tokenizer.mask_token, tokenizer.decode([token])))
Код TensorFlow
from transformers import TFAutoModelWithLMHead, AutoTokenizer
import tensorflow as tf
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-cased")
model = TFAutoModelWithLMHead.from_pretrained("distilbert-base-cased")
sequence = f"Distilled models are smaller than the models they mimic. Using them instead of the large versions would help {tokenizer.mask_token} our carbon footprint."
input = tokenizer.encode(sequence, return_tensors="tf")
mask_token_index = tf.where(input == tokenizer.mask_token_id)[0, 1]
token_logits = model(input)[0]
mask_token_logits = token_logits[0, mask_token_index, :]
top_5_tokens = tf.math.top_k(mask_token_logits, 5).indices.numpy()
for token in top_5_tokens:
print(sequence.replace(tokenizer.mask_token, tokenizer.decode([token])))
Это напечатает пять последовательностей, в которых модель предсказывает первые пять токенов:
Distilled models are smaller than the models they mimic. Using them instead of the large versions would help reduce our carbon footprint.
Distilled models are smaller than the models they mimic. Using them instead of the large versions would help increase our carbon footprint.
Distilled models are smaller than the models they mimic. Using them instead of the large versions would help decrease our carbon footprint.
Distilled models are smaller than the models they mimic. Using them instead of the large versions would help offset our carbon footprint.
Distilled models are smaller than the models they mimic. Using them instead of the large versions would help improve our carbon footprint.
Каузальное языковое моделирование
Каузальное языковое моделирование — это задача предсказания токенов на основе последовательности токенов. В этом случае модель обращает внимание только на левый контекст (токены слева от маски). Такое обучение полезно для генеративных задач.
В настоящее время нет конвейера для моделирования/генерации каузального языка.
Ниже приведен пример использования Tokenizer и модели. использоватьgenerate()
Метод генерирует токены в соответствии с исходной последовательностью в PyTorch и создает простой цикл в TensorFlow.
Питорч код
from transformers import AutoModelWithLMHead, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelWithLMHead.from_pretrained("gpt2")
sequence = f"Hugging Face is based in DUMBO, New York City, and is"
input = tokenizer.encode(sequence, return_tensors="pt")
generated = model.generate(input, max_length=50)
resulting_string = tokenizer.decode(generated.tolist()[0])
print(resulting_string)
Код TensorFlow
from transformers import TFAutoModelWithLMHead, AutoTokenizer
import tensorflow as tf
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = TFAutoModelWithLMHead.from_pretrained("gpt2")
sequence = f"Hugging Face is based in DUMBO, New York City, and is"
generated = tokenizer.encode(sequence)
for i in range(50):
predictions = model(tf.constant([generated]))[0]
token = tf.argmax(predictions[0], axis=1)[-1].numpy()
generated += [token]
resulting_string = tokenizer.decode(generated)
print(resulting_string)
Это выведет (надеюсь) соответствующую строку из исходной последовательности, полученной с использованием распределения top_p/tok_k.generate()
Результаты выборки:
Hugging Face is based in DUMBO, New York City, and is a live-action TV series based on the novel by John
Carpenter, and its producers, David Kustlin and Steve Pichar. The film is directed by!
Распознавание именованных объектов
Распознавание именованных объектов (NER) — это задача классификации токенов по категориям, например, идентификация токена как человека, организации или местоположения. Примером набора данных для распознавания именованных объектов является набор данных CoNLL-2003, полностью основанный на этой задаче. Если вы хотите точно настроить свою модель для задач NER, вы можете использоватьner/run_ner.py
(ПиТорч),ner/run_pl_ner.py
(с использованием молнии PyTorch) илиner/run_tf_ner.py
(TensorFlow) скрипт.
Вот пример распознавания именованных объектов с использованием каналов, пытающихся идентифицировать токены как принадлежащие одному из 9 классов:
- О, не названная сущность
- B-MIS, начало разного объекта
- I-MIS, Разное юридическое лицо
- B-PER, начало имени человека
- I-PER, имя человека
- B-ORG, начало организации
- И-ОРГ, Организация
- B-LOC, начало локации
- I-LOC, местоположение
Он использует доработанную модель CoNLL-2003, доработанную @stefan-it из dbmdz.
from transformers import pipeline
nlp = pipeline("ner")
sequence = "Hugging Face Inc. is a company based in New York City. Its headquarters are in DUMBO, therefore very" \
"close to the Manhattan Bridge which is visible from the window."
print(nlp(sequence))
Это выведет список всех слов, идентифицированных как объекты в 9 классах, определенных выше. Вот ожидаемый результат:
[
{'word': 'Hu', 'score': 0.9995632767677307, 'entity': 'I-ORG'},
{'word': '##gging', 'score': 0.9915938973426819, 'entity': 'I-ORG'},
{'word': 'Face', 'score': 0.9982671737670898, 'entity': 'I-ORG'},
{'word': 'Inc', 'score': 0.9994403719902039, 'entity': 'I-ORG'},
{'word': 'New', 'score': 0.9994346499443054, 'entity': 'I-LOC'},
{'word': 'York', 'score': 0.9993270635604858, 'entity': 'I-LOC'},
{'word': 'City', 'score': 0.9993864893913269, 'entity': 'I-LOC'},
{'word': 'D', 'score': 0.9825621843338013, 'entity': 'I-LOC'},
{'word': '##UM', 'score': 0.936983048915863, 'entity': 'I-LOC'},
{'word': '##BO', 'score': 0.8987102508544922, 'entity': 'I-LOC'},
{'word': 'Manhattan', 'score': 0.9758241176605225, 'entity': 'I-LOC'},
{'word': 'Bridge', 'score': 0.990249514579773, 'entity': 'I-LOC'}
]
Обратите внимание, как «Обнимающее лицо» было идентифицировано как организация, а «Нью-Йорк», «Дамбо» и «Манхэттенский мост» — как места.
Ниже приведен пример распознавания именованных объектов с использованием модели и токенизатора. Процесс выглядит следующим образом:
- Создайте экземпляр токенизатора и модели по имени контрольной точки. Модель идентифицируется как модель BERT и загружается с весами, хранящимися в контрольной точке.
- Определяет список меток, используемых для обучения модели.
- Определите последовательность, содержащую известные объекты, такие как «Обнимающее лицо» в качестве организации и «Нью-Йорк» в качестве местоположения.
- Разделите слова на токены, чтобы их можно было сопоставить с предсказаниями. Мы используем небольшую хитрость, чтобы сначала полностью закодировать и декодировать последовательность, которая оставляет строку, содержащую специальные токены.
- Закодируйте последовательность как идентификатор (автоматически добавляются специальные токены).
- Получите прогнозы, передав входные данные модели и получив первые выходные данные. Это приведет к тому, что каждый токен будет распределен по 9 возможным классам. Мы используем argmax для получения наиболее вероятного класса для каждого токена.
- Соберите каждый жетон и его предсказание вместе и распечатайте его.
Питорч код
from transformers import AutoModelForTokenClassification, AutoTokenizer
import torch
model = AutoModelForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
label_list = [
"O", # 不是命名实体
"B-MISC", # 一个杂项实体的开头
"I-MISC", # 杂项
"B-PER", # 一个人名的开头
"I-PER", # 人名
"B-ORG", # 一个组织的开头
"I-ORG", # 组织
"B-LOC", # 一个地点的开头
"I-LOC" # 地点
]
sequence = "Hugging Face Inc. is a company based in New York City. Its headquarters are in DUMBO, therefore very" \
"close to the Manhattan Bridge."
# 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())])
Код TensorFlow
from transformers import TFAutoModelForTokenClassification, AutoTokenizer
import tensorflow as tf
model = TFAutoModelForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
label_list = [
"O", # 不是命名实体
"B-MISC", # 一个杂项实体的开头
"I-MISC", # 杂项
"B-PER", # 一个人名的开头
"I-PER", # 人名
"B-ORG", # 一个组织的开头
"I-ORG", # 组织
"B-LOC", # 一个地点的开头
"I-LOC" # 地点
]
sequence = "Hugging Face Inc. is a company based in New York City. Its headquarters are in DUMBO, therefore very" \
"close to the Manhattan Bridge."
#用特殊的标记来获取标记的一点技巧
tokens = tokenizer.tokenize(tokenizer.decode(tokenizer.encode(sequence)))
inputs = tokenizer.encode(sequence, return_tensors="tf")
outputs = model(inputs)[0]
predictions = tf.argmax(outputs, axis=2)
print([(token, label_list[prediction]) for token, prediction in zip(tokens, predictions[0].numpy())])
Это выводит список каждого токена, сопоставленного с его прогнозом. В отличие от пайплайна, здесь у нас есть предсказание для каждого токена, так как мы не убрали класс «О», а это значит, что на этом токене не найдена конкретная сущность. На выходе должен быть следующий массив:
[('[CLS]', 'O'), ('Hu', 'I-ORG'), ('##gging', 'I-ORG'), ('Face', 'I-ORG'), ('Inc', 'I-ORG'), ('.', 'O'), ('is', 'O'), ('a', 'O'), ('company', 'O'), ('based', 'O'), ('in', 'O'), ('New', 'I-LOC'), ('York', 'I-LOC'), ('City', 'I-LOC'), ('.', 'O'), ('Its', 'O'), ('headquarters', 'O'), ('are', 'O'), ('in', 'O'), ('D', 'I-LOC'), ('##UM', 'I-LOC'), ('##BO', 'I-LOC'), (',', 'O'), ('therefore', 'O'), ('very', 'O'), ('##c', 'O'), ('##lose', 'O'), ('to', 'O'), ('the', 'O'), ('Manhattan', 'I-LOC'), ('Bridge', 'I-LOC'), ('.', 'O'), ('[SEP]', 'O')]
Оригинальная ссылка:Метод объятий test.co/transformer…
Добро пожаловать на сайт блога Panchuang AI:panchuang.net/
Официальная китайская документация OpenCV:woshicver.com/
Добро пожаловать на станцию сводки ресурсов блога Panchuang:docs.panchuang.net/