Вопрос-ответ с SQuAD: чтение текстовых файлов как содержимого - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь реализовать доступный код, обнимая лицо, пытаясь добавить только несколько строк кода, где пользователь может ввести файл, который он хочет использовать в качестве содержимого. План состоит в том, что пользователь может задавать вопросы на основе этого контекста.

import logging
logging.basicConfig(level=logging.INFO)
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
import Data_Cleaning

file = input("Please enter a file to be read")
print(f'you entered {file}')

f = open(file, "r")
string = f.read()
string = string.replace('\n', '')
#print(string)

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')

question, text = "Who is Harry Potter?", string
input_ids = tokenizer.encode(question, text)
print(input_ids)
token_type_ids = [0 if i <= input_ids.index(102) else 1 for i in range(len(input_ids))]
start_scores, end_scores = model(torch.tensor([input_ids]), token_type_ids=torch.tensor([token_type_ids]))

all_tokens = tokenizer.convert_ids_to_tokens(input_ids)
answer = ' '.join(all_tokens[torch.argmax(start_scores) : torch.argmax(end_scores)+1])
print(answer)

Однако, это дает мне сообщение об ошибке - вероятно, потому что я использовал более 120 символов.

Traceback (most recent call last):
  File "C:/Users/bartl/Documents/Bert4.0/Question-Answering.py", line 23, in <module>
    start_scores, end_scores = model(torch.tensor([input_ids]), token_type_ids=torch.tensor([token_type_ids]))
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\transformers\modeling_bert.py", line 1497, in forward
    inputs_embeds=inputs_embeds,
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\transformers\modeling_bert.py", line 802, in forward
    input_ids=input_ids, position_ids=position_ids, token_type_ids=token_type_ids, inputs_embeds=inputs_embeds
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\transformers\modeling_bert.py", line 193, in forward
    position_embeddings = self.position_embeddings(position_ids)
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\torch\nn\modules\sparse.py", line 114, in forward
    self.norm_type, self.scale_grad_by_freq, self.sparse)
  File "C:\Users\bartl\Anaconda3\envs\Bert4.0\lib\site-packages\torch\nn\functional.py", line 1484, in embedding
    return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: index out of range: Tried to access index 512 out of table with 511 rows. at C:\w\1\s\windows\pytorch\aten\src\TH/generic/THTensorEvenMoreMath.cpp:418

Я использовал этот контекст в качестве примера:

Гарри Поттер - серия фантастических романов, написанных автором Briti sh Дж. К. Роулинг. В романах рассказывается о жизни молодого волшебника Гарри Поттера и его друзей Гермионы Грейнджер и Рона Уизли, которые все являются учениками Школы колдовства и волшебства Хогвартса dry. Основная история 1016 * касается борьбы Гарри с лордом Волан-де-Мортом, темным волшебником, который собирается стать бессмертным, свергнуть руководящий орган волшебника, известный как Министерство волхвов c, и покорить всех волшебников и маглов (немагических людей). С момента выхода первого романа «Гарри Поттер и Философский камень» 26 июня 1997 года книги обрели огромную популярность, признание критиков и коммерческий успех во всем мире. Они привлекли широкую взрослую аудиторию, а также молодых читателей и часто считаются краеугольными камнями современной литературы для молодых людей. [2] По состоянию на февраль 2018 года книги были проданы тиражом более 500 миллионов экземпляров по всему миру, что делает их самыми продаваемыми сериями книг в истории, и были переведены на восемьдесят языков [3]. Последние четыре книги последовательно устанавливают рекорды как самые продаваемые книги в истории, причем последний выпуск продал примерно одиннадцать миллионов экземпляров в Соединенных Штатах в течение двадцати четырех часов после его выпуска. Эта серия была первоначально опубликована в Engli sh двумя крупные издатели, Bloomsbury в Великобритании и Scholasti c Press в Соединенных Штатах. Спектакль «Гарри Поттер и проклятое дитя», основанный на истории, написанной в соавторстве с Роулинг, был впервые показан в Лондоне 30 июля 2016 года в театре Palace, а его сценарий был опубликован Литтлом Брауном. Оригинальные семь книг были преобразованы в одноименный сериал из восьми частей фильма Warner Bros. Pictures, который является третьей серией самых кассовых фильмов за все время по состоянию на февраль 2018 года. В 2016 году была оценена общая стоимость франшизы «Гарри Поттер» на 25 миллиардов долларов, [4] делая Гарри Поттера одним из самых кассовых медиа-франшиз всех времен. Серия из множества жанров, включая фэнтези, драму, совершеннолетие и школьную историю Брити sh (которая включает в себя элементы Тайна, триллер, приключения, ужасы и романтика), мир Гарри Поттера исследует многочисленные темы и включает в себя множество культурных значений и ссылок. [5] По словам Роулинг, главная тема - смерть. [6] Другие главные темы в серии включают предрассудки, коррупцию и безумие. [7] Успех книг и фильмов позволил расширить франшизу Гарри Поттера многочисленными производными работами, передвижной выставкой, премьера которой состоялась в Чика go в 2009 году, тур по студии в Лондоне, который открылся в 2012 году, цифровая платформа, на которой Дж. К. Роулинг обновляет сериал новой информацией и знаниями, а также пенталогия побочных фильмов, премьера которых состоится в ноябре 2016 года с «Фантастическими зверями» и «Где их найти», среди многих других разработки. Совсем недавно тематические достопримечательности, известные под общим названием «Волшебный мир Гарри Поттера», были построены в нескольких парках развлечений «Универсальные парки и курорты» по всему миру.

Как я могу решить эту проблему? Есть ли способ реализовать BERT с более чем 120 символами?

...