{ "
This is an implementation of nucleus sampling, introduced in the paper The Curious Case of Neural Text Degeneration.
\nThe paper discusses the problems with other sampling methods such as Beam Search, Pure sampling, Temperature sampling, and Top-k sampling. The paper introduces the idea of nucleus sampling, which practically performs better than other sampling methods for text generation.
\nNucleus sampling first picks a subset of the vocabulary _^_0_^_, where _^_1_^_ is smallest set of tokens such that
\n_^_2_^_
\nThat is, we pick the highest probable tokens until the sum of their probabilities is less that _^_3_^_.
\nThen we sample from the selected tokens.
\nHere's an experiment that uses these sampling techniques.
\n": "\u0db8\u0dd9\u0dba\u0db1\u0dca\u0dba\u0dc2\u0dca\u0da7\u0dd2\u0d9a \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8\u0dca \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0d9a\u0dca \u0dc0\u0db1 \u0d85\u0dad\u0dbb \u0d91\u0dba \u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0dc0\u0dbd\u0dd2\u0db1\u0dca \u0dc4\u0db3\u0dd4\u0db1\u0dca\u0dc0\u0dcf \u0daf\u0dd3 \u0d87\u0dad \u0dc3\u0dca\u0db1\u0dcf\u0dba\u0dd4 \u0db4\u0dd9\u0dc5 \u0db4\u0dbb\u0dd2\u0dc4\u0dcf\u0db1\u0dd2\u0dba \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3 \u0d9a\u0dd4\u0dad\u0dd4\u0dc4\u0dbd\u0dba.
\n\u0d9a\u0daf\u0db8\u0dca\u0db6\u0dc3\u0dd9\u0dc0\u0dd3\u0db8, \u0db4\u0dd2\u0dbb\u0dd2\u0dc3\u0dd2\u0daf\u0dd4 \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8, \u0d8b\u0dc2\u0dca\u0dab\u0dad\u0dca\u0dc0 \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8 \u0dc3\u0dc4 \u0d89\u0dc4\u0dc5 \u0d9a\u0dda\u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8\u0dc0\u0dd0\u0db1\u0dd2 \u0dc0\u0dd9\u0db1\u0dad\u0dca \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd2\u0d9a\u0dca\u0dbb\u0db8\u0dc0\u0dbd \u0d87\u0dad\u0dd2 \u0d9c\u0dd0\u0da7\u0dc5\u0dd4 \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0dc0 \u0d9a\u0da9\u0daf\u0dcf\u0dc3\u0dd2 \u0dc3\u0dcf\u0d9a\u0da0\u0dca\u0da1\u0dcf \u0d9a\u0dbb\u0dba\u0dd2. \u0db8\u0dd9\u0db8 \u0db4\u0dad\u0dca\u0dbb\u0dd2\u0d9a\u0dcf\u0dc0 \u0db1\u0dca\u0dba\u0dc2\u0dca\u0da7\u0dd2\u0d9a \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8\u0dca \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3 \u0d85\u0daf\u0dc4\u0dc3 \u0dc4\u0db3\u0dd4\u0db1\u0dca\u0dc0\u0dcf \u0daf\u0dd9\u0dba\u0dd2, \u0d91\u0dba \u0db4\u0dd9\u0dc5 \u0d8b\u0dad\u0dca\u0db4\u0dcf\u0daf\u0db1\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0dc0\u0dd9\u0db1\u0dad\u0dca \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd2 \u0d9a\u0dca\u0dbb\u0db8\u0dc0\u0dbd\u0da7 \u0dc0\u0da9\u0dcf \u0db4\u0dca\u0dbb\u0dcf\u0dba\u0ddd\u0d9c\u0dd2\u0d9a\u0dc0 \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf \u0d9a\u0dbb\u0dba\u0dd2.
\n\u0db1\u0dca\u0dba\u0dc2\u0dca\u0da7\u0dd2\u0d9a\u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8 \u0db4\u0dc5\u0db8\u0dd4\u0dc0 \u0dc0\u0da0\u0db1 \u0db8\u0dcf\u0dbd\u0dcf\u0dc0\u0dda \u0d8b\u0db4 \u0d9a\u0dd4\u0dbd\u0d9a\u0dba\u0d9a\u0dca \u0dad\u0ddd\u0dbb\u0dcf \u0d9c\u0db1\u0dd3 _^_0_^_, \u0d91\u0dc4\u0dd2\u0daf\u0dd3 _^_1_^_ \u0d9a\u0dd4\u0da9\u0dcf\u0db8 \u0da7\u0ddd\u0d9a\u0db1 \u0d9a\u0da7\u0dca\u0da7\u0dbd\u0dba\u0d9a\u0dca
\n_^_2_^_
\n\u0d91\u0db1\u0db8\u0dca, \u0d92\u0dc0\u0dcf\u0dba\u0dda \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0\u0db1\u0dca\u0d9c\u0dda \u0d91\u0d9a\u0dad\u0dd4\u0dc0 \u0d85\u0da9\u0dd4 \u0dc0\u0db1 \u0dad\u0dd9\u0d9a\u0dca \u0d85\u0db4\u0dd2 \u0d89\u0dc4\u0dc5\u0db8 \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0 \u0dc3\u0dc4\u0dd2\u0dad \u0da7\u0ddd\u0d9a\u0db1 \u0dad\u0ddd\u0dbb\u0dcf \u0d9c\u0db1\u0dd2\u0db8\u0dd4 _^_3_^_.
\n\u0d89\u0db1\u0dca\u0db4\u0dc3\u0dd4\u0d85\u0db4\u0dd2 \u0dad\u0ddd\u0dbb\u0dcf\u0d9c\u0dad\u0dca \u0da7\u0ddd\u0d9a\u0db1 \u0dc0\u0dbd\u0dd2\u0db1\u0dca \u0dc3\u0dcf\u0db8\u0dca\u0db4\u0dbd \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dd2\u0db8\u0dd4.
\n\u0db8\u0dd9\u0db1\u0dca\u0db1\u0db8\u0dd9\u0db8 \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd2 \u0dc1\u0dd2\u0dbd\u0dca\u0db4\u0dd3\u0dba \u0d9a\u0dca\u0dbb\u0db8 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1 \u0d85\u0dad\u0dca\u0dc4\u0daf\u0dcf \u0db6\u0dd0\u0dbd\u0dd3\u0db8\u0d9a\u0dca .
\n", "\n": "
\n", "
Sample from logits with Nucleus Sampling
\n": "\u0db1\u0dca\u0dba\u0dc2\u0dca\u0da7\u0dd2\u0d9a\u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd3\u0db8 \u0dc3\u0db8\u0d9f \u0db4\u0dd2\u0dc0\u0dd2\u0dc3\u0dd4\u0db8\u0dca \u0dc0\u0dbd\u0dd2\u0db1\u0dca \u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd2\u0dba
\n", "Find the cumulative sums less than _^_0_^_.
\n": "\u0dc0\u0da9\u0dcf\u0d85\u0da9\u0dd4 \u0dc3\u0db8\u0dd4\u0da0\u0dca\u0da0\u0dd2\u0dad \u0db8\u0dd4\u0daf\u0dbd\u0d9a\u0dca \u0dc3\u0ddc\u0dba\u0dcf \u0d9c\u0db1\u0dca\u0db1 _^_0_^_.
\n", "Get log probabilities and mask out the non-nucleus
\n": "\u0dbd\u0ddc\u0d9c\u0dca\u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0 \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1 \u0dc3\u0dc4 \u0db1\u0dca\u0dba\u0dc2\u0dca\u0da7\u0dd2\u0dba \u0db1\u0ddc\u0dc0\u0db1 \u0dc0\u0dc3\u0d82 \u0d9a\u0dbb\u0db1\u0dca\u0db1
\n", "Get probabilities _^_0_^_
\n": "\u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0\u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1 _^_0_^_
\n", "Get the actual indexes
\n": "\u0dc3\u0dad\u0dca\u0dba\u0daf\u0dbb\u0dca\u0dc1\u0d9a \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1
\n", "Get the cumulative sum of probabilities in the sorted order
\n": "\u0dc0\u0dbb\u0dca\u0d9c\u0d9a\u0dc5 \u0d85\u0db1\u0dd4\u0db4\u0dd2\u0dc5\u0dd2\u0dc0\u0dd9\u0dbd\u0dd9\u0dc4\u0dd2 \u0dc3\u0db8\u0dd4\u0da0\u0dca\u0da0\u0dd2\u0dad \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0\u0db1\u0dca\u0d9c\u0dda \u0d91\u0d9a\u0dad\u0dd4\u0dc0 \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1
\n", "Prepend ones so that we add one token after the minimum number of tokens with cumulative probability less that _^_0_^_.
\n": "\u0dc3\u0db8\u0dd4\u0da0\u0dca\u0da0\u0dd2\u0dad\u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0 \u0d85\u0da9\u0dd4 \u0d85\u0dc0\u0db8 \u0da7\u0ddd\u0d9a\u0db1 \u0dc3\u0d82\u0d9b\u0dca\u0dba\u0dcf\u0dc0\u0dd9\u0db1\u0dca \u0db4\u0dc3\u0dd4\u0dc0 \u0d85\u0db4\u0dd2 \u0d91\u0d9a\u0dca \u0da7\u0ddd\u0d9a\u0db1\u0dba\u0d9a\u0dca \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb\u0db1 \u0db4\u0dbb\u0dd2\u0daf\u0dd2 \u0d92\u0dc0\u0dcf \u0dc3\u0d9a\u0dc3\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_.
\n", "Sample from the sampler
\n": "\u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd2\u0dba\u0dd9\u0db1\u0dca\u0db1\u0dd2\u0dba\u0dd0\u0daf\u0dd2\u0dba
\n", "Softmax to compute _^_0_^_ from the logits
\n": "\u0db4\u0dd2\u0dc0\u0dd2\u0dc3\u0dd4\u0db8\u0dca _^_0_^_ \u0dc0\u0dbd\u0dd2\u0db1\u0dca \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0dc3\u0ddc\u0dc6\u0dca\u0da7\u0dca\u0db8\u0dd0\u0d9a\u0dca\u0dc3\u0dca
\n", "Sort probabilities in descending order
\n": "\u0db6\u0dd0\u0dc3\u0dd3\u0db8\u0dda\u0d85\u0db1\u0dd4\u0db4\u0dd2\u0dc5\u0dd2\u0dc0\u0dd9\u0dbd\u0dd9\u0dc4\u0dd2 \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0\u0db1\u0dca \u0dc0\u0dbb\u0dca\u0d9c \u0d9a\u0dbb\u0db1\u0dca\u0db1
\n", "