language pair dateset
主要是LanguagePairDateset和collate
transaltion
核心是加载数据集即:load_langpair_dataset
先加载数据集的路径
然后source和target dataset都是通过load_indexed_dataset实现
data_utils
load_indexed_dataset是通过indexed_dataset来进一步的实现
get_indexed_dataset_to_local函数删除了最后的bin后缀
然后调用indexed_dataset.make_dataset
indexed_dataset
默认的dataset是mmap模式,即调用了MMapIndexedDataset(path)实例化
MMapIndexedDataset(path)实现了一个numpy 的buffer以及idx,在get_item的时候先获取idx,然后根据idx得到buffer指针以及读取长度来读取具体的数据
def __getitem__(self, i):
ptr, size = self._index[i]
np_array = np.frombuffer(
self._bin_buffer, dtype=self._index.dtype, count=size, offset=ptr
)
if self._index.dtype != np.int64:
np_array = np_array.astype(np.int64)
return torch.from_numpy(np_array)