为什么当我更改csv文件中数据的位置时,torchtext.legecy.text中相同数据集的结果不同



我正在学习PyTorch NLP基本文本分类,并遵循Lazy Programmer的教程,我得到了与教程不同的结果,当我试图更改数据时,我在输出中遇到了一个奇怪的变化。


import torchtext.legacy.data as ttd
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

data = {
'label':[0, 1,1 ],
'data':[   'ham and eggs or just  morning',
'I like eggs and ham.',
'Eggs I like!',


]
}
df = pd.DataFrame(data)
df.to_csv('thedata.csv', index=False)
TEXT = ttd.Field(
sequential =True,
batch_first =True,
lower = True,
tokenize ='spacy',
pad_first = True
)
LABEL = ttd.Field(
sequential=False,
use_vocab=False,
is_target  =True
)
dataset = ttd.TabularDataset(
path = 'thedata.csv',
format ='csv',
skip_header=True,
fields = [
('label', LABEL),
('data',TEXT)
]
)
train_dataset, test_dataset = dataset.split()
TEXT.build_vocab(train_dataset,)
vocab = TEXT.vocab
vocab.stoi

这是我的第一种代码类型,在数据中,如果你看到我使用了"火腿和鸡蛋或只是早上";在索引1中。因此,在运行完代码后,最后当我运行vocab.stoi时,我得到了以下输出。代码的输出。


import torchtext.legacy.data as ttd
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

data = {
'label':[0, 1,1 ],
'data':[   
'I like eggs and ham.',
'Eggs I like!',
'ham and eggs or just  morning',


]
}
df = pd.DataFrame(data)
df.to_csv('thedata.csv', index=False)
TEXT = ttd.Field(
sequential =True,
batch_first =True,
lower = True,
tokenize ='spacy',
pad_first = True
)
LABEL = ttd.Field(
sequential=False,
use_vocab=False,
is_target  =True
)
dataset = ttd.TabularDataset(
path = 'thedata.csv',
format ='csv',
skip_header=True,
fields = [
('label', LABEL),
('data',TEXT)
]
)
train_dataset, test_dataset = dataset.split()
TEXT.build_vocab(train_dataset,)
vocab = TEXT.vocab
vocab.stoi

现在,在第二个代码中,我已经更改了数据的索引"火腿和鸡蛋或只是早上";在第三个索引中,如果我运行代码,那么我会得到vocab.stoi的不同输出第二个代码的输出。我想知道这是什么原因,以及vocab_build是如何在PyTorch中工作的。另外,这是我的第一个问题,如果问题不清楚,请告诉我。

我认为您应该使用随机种子来获得所有运行的相同结果(以及比较模型中所做更改的结果(。代码中应该获得种子的部分是数据集分割函数。正如文件所说,类似于这样的东西:

_seed = 2021
train_dataset, test_dataset = dataset.split(random_state=_seed)

最新更新