UniqueRandomizer:无替换的增量采样

unique-randomizer的Python项目详细描述


UniqueRandomizer

概述

UniqueRandomizer是一种用于随机抽样输出的数据结构 程序,例如神经序列模型,递增没有 更换。在

  • Incremental采样:而不是在 与beam search一样,UniqueRandomizer一次提供一个样本。 这使停止条件(如停止采样)具有灵活性 一旦发现满意的输出,立即进行处理。在
  • 采样而不替换:在许多应用中,使用神经模型 为某些搜索或优化问题产生候选解决方案。在 这类应用通常需要考虑unique候选 解决方案,因为重复通常没有用处。在

更多细节请参考我们的文章, Incremental Sampling Without Replacement for Sequence Models, 发表于ICML 2020。在

BibTeX入口:

@article{shi2020uniquerandomizer,
  title = {Incremental Sampling Without Replacement for Sequence Models},
  author = {Kensen Shi and David Bieber and Charles Sutton},
  booktitle = {Proceedings of the 37th International Conference on Machine Learning},
  year = {2020}
}

安装

^{pr2}$

这个包需要python3。上面的命令会自动安装 同时遵循以下依赖项:

  • 绝对值py>;=0.6.1
  • 数量=1.15.4
  • scipy>;=1.1.0

使用

要使用UniqueRandomizer,请首先标识要使用的程序或函数 从中提取唯一的示例,例如下面的draw_sample函数 示例:

def draw_sample(sequence_model, state):
  """Draws a sample (a sequence of token indices) from the sequence model."""
  tokens = []
  token = BOS
  for i in range(MAX_LEN):
    probs, state = sequence_model(token, state)
    token = np.random.choice(np.arange(len(probs)), p=probs)
    if token == EOS:
      break
    tokens.append(token)
  return tokens

注意,draw_sample可以接受输入并可以使用控制流,例如循环, 条件句和递归。对draw_sample只有两个约束 功能:

  1. 除了随机选择,它必须是确定性的 由np.random.choice提供(或其他一些随机选择的方法 给定离散概率分布的指数)。在
  2. 两个不同的随机选择序列必须导致draw_sample 返回不同的输出。在

接下来,添加一个UniqueRandomizer对象作为draw_sample的输入,并使用其 sample_distribution替换np.random.choice的函数:

- def draw_sample(sequence_model, state):+ def draw_sample(sequence_model, state, randomizer):
    """Draws a sample (a sequence of token indices) from the sequence model."""
    tokens = []
    token = BOS
    for i in range(MAX_LEN):
      probs, state = sequence_model(token, state)
-     token = np.random.choice(np.arange(len(probs)), p=probs)+     token = randomizer.sample_distribution(probs)
      if token == EOS:
        break
      tokens.append(token)
    return tokens

最后,围绕draw_sample的一个简单循环可以收集唯一的样本,如 以下内容:

def draw_unique_samples(model, state, num_samples):
  """Draws multiple unique samples from the sequence model."""
  samples = []
  randomizer = unique_randomizer.UniqueRandomizer()
  for _ in range(num_samples):
    samples.append(draw_sample(model, state, randomizer))
    randomizer.mark_sequence_complete()
  return samples

代码示例

我们提供了一些代码示例来演示如何使用UniqueRandomizer:

  • examples/weighted_coin_flips.py:这提供了一个非常简单的示例 使用UniqueRandomizer。函数flip_two_weighted_coins模拟 翻一对重硬币。sample_flips_without_replacement 函数然后使用UniqueRandomizer有效地采样 flip_two_weighted_coins没有替换。在

  • examples/expand_grammar.py:这定义了一个概率上下文无关 语法(PCFG),以及在没有 使用UniqueRandomizer、拒绝抽样和随机替换 波束搜索(SBS)。脚本examples/expand_grammar_main.py使 不同情景下不同抽样方法的比较。在

  • examples/sequence_example.py:这将实现采样而不进行替换 从序列模型中,使用UniqueRandomizer,批处理UniqueRandomizer, 拒收取样和SBS。脚本examples/sequence_example_main.py 允许在下的不同采样方法之间进行轻松比较 不同的场景。在

免责声明

这不是一个官方支持的Google产品。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将值插入sql表的选定列。使用c等参数#   IF语句的java JList数据添加   java在这种情况下有没有更好的方法来调整哈希值?   java@Valid不会触发@Repository中的验证   java如何在安卓中调整位图的大小   iTextJava。lang.NoClassDefFoundError:com/itextpdf/text/DocumentException   java使用ResourceBundleMessageSource加载一个ressource包(message.properties)的全部内容   java如何通过JasperReports 6动态设置Excel工作表名称。十、   java是编写这个程序的最佳方式   JAVA伊奥。FileNotFoundException:C:\Program Files\Apache软件基金会\Tomcat 8.0\。。\webapps\ROOT\\u cips\config。伊尼   java我正在尝试创建一个TictaToe程序,但是JOptionPane和绘图有问题   垃圾收集为什么java中的finalize()方法不在Finalizer类中?为什么它是在对象类中定义的?   java如何用括号编码替换url中的括号?   java web集成移动应用程序   在netbeans中运行MIDP2应用程序时出现java错误