Как сделать прогноз из поезда Pytorch и модель PytorchText? - PullRequest
0 голосов
/ 29 октября 2019

Вообще говоря, после того, как я успешно обучил текстовую модель RNN с помощью Pytorch, используя PytorchText, чтобы усилить загрузку данных в исходном источнике, я хотел бы протестировать другие наборы данных (своего рода тест моргания) из разных источников. но тот же текстовый формат.

Сначала я определил класс для обработки загрузки данных.

class Dataset(object):
    def __init__(self, config):
        # init what I need

    def load_data(self, df: pd.DataFrame, *args):
        # implementation below
        # Data format like `(LABEL, TEXT)`

    def load_data_but_error(self, df: pd.DataFrame):
        # implementation below
        # Data format like `(TEXT)`

Вот подробное описание load_data, которое я загружаю для данных, которые успешно прошли обучение.

TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=self.config.max_sen_len)
LABEL = data.Field(sequential=False, use_vocab=False)

datafields = [(label_col, LABEL), (data_col, TEXT)]

# split my data to train/test
train_df, test_df = train_test_split(df, test_size=0.33, random_state=random_state)

train_examples = [data.Example.fromlist(i, datafields) for i in train_df.values.tolist()]
train_data = data.Dataset(train_examples, datafields)

# split train to train/val
train_data, val_data = train_data.split(split_ratio=0.8)

# build vocab
TEXT.build_vocab(train_data, vectors=Vectors(w2v_file))
self.word_embeddings = TEXT.vocab.vectors
self.vocab = TEXT.vocab

test_examples = [data.Example.fromlist(i, datafields) for i in test_df.values.tolist()]
test_data = data.Dataset(test_examples, datafields)

self.train_iterator = data.BucketIterator(
            (train_data),
            batch_size=self.config.batch_size,
            sort_key=lambda x: len(x.title),
            repeat=False,
            shuffle=True)

self.val_iterator, self.test_iterator = data.BucketIterator.splits(
    (val_data, test_data),
    batch_size=self.config.batch_size,
    sort_key=lambda x: len(x.title),
    repeat=False,
    shuffle=False)

Следующий - мой код (load_data_but_error) для загрузки других источников, но вызывающий ошибку

TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=self.config.max_sen_len)
datafields = [('title', TEXT)]

examples = [data.Example.fromlist(i, datafields) for i in df.values.tolist()]
blink_test = data.Dataset(examples, datafields)

self.blink_test = data.BucketIterator(
    (blink_test),
    batch_size=self.config.batch_size,
    sort_key=lambda x: len(x.title),
    repeat=False,
    shuffle=True)

Когда я выполнял код, у меня была ошибка AttributeError: 'Field' object has no attribute 'vocab', которая имеетвопрос на здесь но мне не нравится моя ситуация, так как здесь у меня был Vocab от load_data, и я хочу использовать его для тестов моргания.

Мой вопрос, какой правильный способзагрузить и передать новые данные с помощью обученной модели PyTorch для тестирования текущей модели?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Не совсем уверен, но, учитывая, что вы изменили TEXT, вам придется явно создать словарь для вашего поля TEXT снова. Это можно сделать следующим образом:

TEXT.build_vocab(examples, min_freq = 2)

Это конкретное утверждение добавляет слово из ваших данных в словарь, только если оно встречается хотя бы два раза в вашем наборе данных examples, вы можете изменить его какпо вашему требованию.

Вы можете прочитать о build_vocab метод на https://torchtext.readthedocs.io/en/latest/data.html#torchtext.data.Field.build_vocab.

0 голосов
/ 29 октября 2019

Мне нужно

  1. , чтобы сохранить TEXT в load_data и повторно использовать в load_data_but_error, присвоив переменным класса
  2. add train=True для объекта data.BucketIterator вкл load_data_but_error функция
...