Проблема с тензором семантической ролевой маркировки

У меня есть кадр данных в столбце df.sentence с длинными предложениями. Я пытаюсь извлечь arg0 с помощью маркировки семантической роли и сохранить arg0 в отдельном столбце.

Я продолжаю получать эту ошибку:

      RuntimeError: The size of tensor a (1212) must match the size of tensor b (512) at non-singleton dimension 1

вот мой код:

      !pip install allennlp==2.1.0 allennlp-models==2.1.0
from allennlp.predictors.predictor import Predictor
import allennlp_models.tagging
import pandas as pd, csv
 

def extract_arg0(sentence):
  result = []
  output = predictor.predict(sentence)
  for verb in output['verbs']:
    desc = verb['description']
    arg0_start = desc.find('ARG0: ')
    if arg0_start > -1:
      arg0_end = arg0_start + len('ARG0: ')
      arg0 = desc[arg0_end: desc.find(']')]
      result.append((verb['verb'], arg0))
  return result

# How to loop over all sentences
from tqdm.notebook import tqdm
tqdm.pandas()

df['Arg0'] = df.sentence.progress_apply(extract_arg0)

Я думаю, что мне следует создать здесь новую строку кода, которую можно было бы пропустить, вместо того, чтобы выдавать ошибку, и добавить df.arg0 'failed' ... и т. д. правильный ли мой подход? если да, то есть идеи, как я могу добавить эту строку в свой код? если нет, то любое предложение будет оценено.

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

Я также пробовал с

      '!pip install allennlp==2.1.0 allennlp-models==2.9.0'

1 ответ

Вы не показываете, какой predictorвы загружаете, но я подозреваю, что модель может обрабатывать только 512 слов. Возможно, Longformer будет решением, но тогда вам придется сначала обучить SRL-модель с помощью Longformer.

Однако подумайте о том, чего вы на самом деле хотите достичь. Ваше примерное предложение на самом деле состоит из нескольких предложений с маркированным списком других предложений в конце. Модель AllenNLP SRL никогда не обучалась на таких входных данных и в любом случае не будет работать хорошо. Я предлагаю вам разделить ввод на предложения и вводить по одному предложению за раз. Это будет ближе к тому типу данных, которые модель видела во время обучения, поэтому вы получите лучшие результаты.

Другие вопросы по тегам