I have a dataset with the following columns: `book`

, `char1`

, `char2`

, `span`

.

`book`

, `char1`

, and `char2`

are integers, whereas `span`

is a matrix Tensor of integers.

I would like to implement negative sampling so that, for each batch that I retrieve from my DataLoader that wraps the dataset, I also get a batch of negative samples.

For each individual data row retrieved (there may be multiple rows retrieved per batch, of course), I would like to have `N`

negative samples retrieved as well, so that a negative sample is a single row from *any* of the `span`

matrices in my dataset.

Naively, this is how I would retrieve a single negative sample (just to illustrate):

```
def getNegativeSamples(dataset, N):
ret = []
for i in range(N):
# Choose which row the data will be pulled from
dataset_row = dataset[random(0, len(dataset))]
span = dataset_row[3]
# Choose which row of the span matrix we will use
span_entry = span[random(0, len(span))]
ret.append(span_entry)
# ret has N samples in it
return ret
```

How can I implement this cleanly in PyTorch?