Понимание TypeError: «<» не поддерживается между экземплярами «Пример» и «Пример» - PullRequest
0 голосов
/ 04 октября 2019

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

Я читаю файлы так:

training_sentences = open(path + "train.en" , encoding = "utf-8").read().split("\n")
target_sentences = open(path + "train.sen" , encoding = "utf-8").read().split("\n")

Далее я размечал их как таковые:

complicated = spacy.load('en')
simple = spacy.load('en')

def tokenize_complicated(sentence):
   return [tok.text for tok in complicated.tokenizer(sentence)]

def tokenize_simple(sentence):
    return [tok.text for tok in simple.tokenizer(sentence)]

C_TEXT = Field(tokenize=tokenize_complicated, fix_length = 100)
S_TEXT = Field(tokenize=tokenize_simple, fix_length = 100, init_token = "<sos>", eos_token = "<eos>")

Затем я преобразовал объект TabularDataset в torchtext.

import pandas as pd
raw_data = {'Complicated' : [line for line in training_sentences], 
        'Simple': [line for line in target_sentences]}

df = pd.DataFrame(raw_data, columns=["Complicated", "Simple"])

df.to_csv("df.csv", index=False)
data_fields = [('Complicated', C_TEXT), ('Simple', S_TEXT)]

train = torchtext.data.TabularDataset.splits(path='./', train = "df.csv", format='csv', fields=data_fields, skip_header = True)

И затем создал словарь

C_TEXT.build_vocab(train)
S_TEXT.build_vocab(train)

Однако при этом я получил эту ошибку:

Ошибка типа: <<не поддерживается между экземплярами «Пример» и «Пример» </p>

При поиске я наткнулся на это решение здесь и ошибка исчезла. Однако я не понимаю, заставляет ли модель брать только один экземпляр или все наборы данных? Я хотел бы знать значение индекса [0], чтобы эффективно управлять им для моей модели.

1 Ответ

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

В операторе:

train = torchtext.data.TabularDataset.splits(path='./', train = "df.csv", format='csv', fields=data_fields, skip_header = True)

Индекс [0] используется для распаковки набора данных, который возвращается в настроенном типе TabularDataset (кортеж). Добавление индекса в конце вышеприведенногоВ операторе мы можем получить доступ к одному элементу внутри кортежа.

Однако в операторе

train,val = torchtext.data.TabularDataset.splits(path='./', train = "df.csv", validation = “val.csv”, format='csv', fields=data_fields, skip_header = True)

Распаковка выполняется автоматически с первым элементом кортежа в train и вторым в val

...