async function loadData(numWords, len, multihot = false) {
  const dataDir = await maybeDownloadAndExtract();

  const trainFeaturePath = path.join(dataDir, 'imdb_train_data.bin');
  const xTrain = loadFeatures(trainFeaturePath, numWords, len, multihot);
  const testFeaturePath = path.join(dataDir, 'imdb_test_data.bin');
  const xTest = loadFeatures(testFeaturePath, numWords, len, multihot);
  const trainTargetsPath = path.join(dataDir, 'imdb_train_targets.bin');
  const yTrain = loadTargets(trainTargetsPath);
  const testTargetsPath = path.join(dataDir, 'imdb_test_targets.bin');
  const yTest = loadTargets(testTargetsPath);

  tf.util.assert(
      xTrain.shape[0] === yTrain.shape[0],
      `Mismatch in number of examples between xTrain and yTrain`);
  tf.util.assert(
      xTest.shape[0] === yTest.shape[0],
      `Mismatch in number of examples between xTest and yTest`);
  return {xTrain, yTrain, xTest, yTest};
}
Load data by downloading and extracting files if necessary.

@param {number} numWords Number of words to in the vocabulary.
@param {number} len Length of each sequence. Longer sequences will
  be pre-truncated and shorter ones will be pre-padded.
@return
  xTrain: Training data as a `tf.Tensor` of shape
    `[numExamples, len]` and `int32` dtype.
  yTrain: Targets for the training data, as a `tf.Tensor` of
    `[numExamples, 1]` and `float32` dtype. The values are 0 or 1.
  xTest: The same as `xTrain`, but for the test dataset.
  yTest: The same as `yTrain`, but for the test dataset.