了解TypeError:“示例”和“示例”的实例之间不支持“ <”

时间:2019-10-04 18:07:41

标签: python nlp pytorch torchtext

我正在使用多头注意力转换模型来简化文本的项目。同样,我正在使用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>")

然后我将其转换为torchtext的TabularDataset对象。

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)

但是,这样做的时候我得到了这个错误:

  

TypeError:“示例”和“实例”之间不支持“ <”   “示例”

在搜索时,我遇到了此解决方案here,错误消失了。但是,我不明白这是否会使模型仅采用一个实例还是要采用所有数据集? 我想知道索引[0]的重要性,以便为我的模型有效地操作它。

2 个答案:

答案 0 :(得分:1)

就我而言,我解决了将 sort_keysort_within_batch arg 传递给 True 的问题,如下所示:

BATCH_SIZE = 64
train_iterator, valid_iterator, test_iterator = data.BucketIterator.splits(
    (train_data, valid_data, test_data),
    device = device,
    batch_size = BATCH_SIZE,
    sort_key = lambda x: len(x.src),
    sort_within_batch=True
)

祝你好运

答案 1 :(得分:0)

在声明中:

integrated

索引train = torchtext.data.TabularDataset.splits(path='./', train = "df.csv", format='csv', fields=data_fields, skip_header = True) 用于解压缩数据集,该数据集以定制的TabularDataset类型(元组)返回。 在上述语句的末尾添加索引,我们可以访问元组中的单个元素。

但是在声明中

[0]

解包是通过train,val = torchtext.data.TabularDataset.splits(path='./', train = "df.csv", validation = “val.csv”, format='csv', fields=data_fields, skip_header = True) 中元组的第一个元素和train中的第二个元素自动完成的。