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指针以及读取长度来读取具体的数据

  1. def __getitem__(self, i):
  2. ptr, size = self._index[i]
  3. np_array = np.frombuffer(
  4. self._bin_buffer, dtype=self._index.dtype, count=size, offset=ptr
  5. )
  6. if self._index.dtype != np.int64:
  7. np_array = np_array.astype(np.int64)
  8. return torch.from_numpy(np_array)

image.png