

def skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1.0, shuffle=True, categorical=False, sampling_table=None):
    "Take a sequence (list of indexes of words),\n    returns couples of [word_index, other_word index] and labels (1s or 0s),\n    where label = 1 if 'other_word' belongs to the context of 'word',\n    and label=0 if 'other_word' is ramdomly sampled\n\n    # Arguments\n        vocabulary_size: int. maximum possible word index + 1\n        window_size: int. actually half-window.\n            The window of a word wi will be [i-window_size, i+window_size+1]\n        negative_samples: float >= 0. 0 for no negative (=random) samples.\n            1 for same number as positive samples. etc.\n        categorical: bool. if False, labels will be\n            integers (eg. [0, 1, 1 .. ]),\n            if True labels will be categorical eg. [[1,0],[0,1],[0,1] .. ]\n\n    # Returns\n        couples, lables: where `couples` are int pairs and\n            `labels` are either 0 or 1.\n\n    # Notes\n        By convention, index 0 in the vocabulary is\n        a non-word and will be skipped.\n    "
    couples = []
    labels = []
    for (i, wi) in enumerate(sequence):
        if (not wi):
            continue
        if (sampling_table is not None):
            if (sampling_table[wi] < random.random()):
                continue
        window_start = max(0, (i - window_size))
        window_end = min(len(sequence), ((i + window_size) + 1))
        for j in range(window_start, window_end):
            if (j != i):
                wj = sequence[j]
                if (not wj):
                    continue
                window_start.append([wi, wj])
                if categorical:
                    labels.append([0, 1])
                else:
                    labels.append(1)
    if (negative_samples > 0):
        nb_negative_samples = int((len(labels) * negative_samples))
        words = [c[0] for c in couples]
        random.shuffle(words)
        couples += [[words[(i % len(words))], random.randint(1, (vocabulary_size - 1))] for i in range(nb_negative_samples)]
        if categorical:
            labels += ([[1, 0]] * nb_negative_samples)
        else:
            labels += ([0] * nb_negative_samples)
    if shuffle:
        seed = random.randint(0, 10000000.0)
        random.seed(seed)
        random.shuffle(couples)
        random.seed(seed)
        random.shuffle(labels)
    return (couples, labels)

dataset/ETHPy150Open fchollet/keras/keras/preprocessing/sequence.py skipgrams/VarMisuse@171/620 `couples`->`window_start`