【问题标题】:How does generative language model work in the natural language processing?生成语言模型在自然语言处理中是如何工作的?
【发布时间】:2014-02-06 13:30:23
【问题描述】:

AFAIK,生成语言模型只不过是某些词汇的概率分布。我想知道如何使用这种概率分布来生成单词流,即语言?

如果我总是选择概率最大的词,它总是同一个词,因为分布是固定的。

我不确定我是否理解正确。谁能提供一个具体的操作示例?

【问题讨论】:

  • FWIW,听起来你的问题是关于从一元语言模型生成单词。高阶语言模型将包括一些历史概念(例如,先前的单词和/或句法上下文)。一般来说,高阶语言模型会生成更连贯的词流。

标签: nlp nltk probability probability-theory


【解决方案1】:

首先,你不要选择概率最高的词。您选择一个随机词,但不是统一的 - 与模型中的概率。

所以,如果模型中有 2 个词:“是”和“否”,概率分布为 2/3“是”,1/3“否”,那么生成的文本可能如下所示:

yes no no yes yes no yes yes yes no yes yes yes

也就是说,文本中大约有 2/3 的“是”和 1/3 的“否”。

编辑

这是从分布中抽样的一种简单方法:

  1. 生成一个从 0 到 1 的随机数。
  2. 遍历模型中的所有单词,将它们的概率权重相加。只要总和大于生成的数字,就发出当前单词。

这是一个例子:

假设您生成了0.8。你从yes开始,累积的概率权重是0.67,所以你取下一个词no,得到的累积权重1.0大于0.8,所以你发出no

假设下次你有0.5,那么你需要发出yes

【讨论】:

  • 谢谢。但我知道结果流理论上应该是这样的。但我的问题是如何在实践中生成它?
  • 我明白了,我已经用一种方法更新了答案。
  • 所以按照你的例子,假设在我得到 0.67 的“是”之后,我得到 0.5 的“否”。那么两者都没有高于0.8,我该怎么办?我应该继续迭代模型并继续对概率权重求和直到它高于 0.8 吗?在我发出一个单词后,我是否应该重复步骤 1 以获得一个介于 0 和 1 之间的新随机数?还是继续使用 0.8?
  • 是的,您为每个样本生成一个新的随机数。至于第一个问题:你把它弄反了。在这种情况下,您将得到yes 是生成的数字低于0.67no 否则。如果你有 3 个单词:yesnomaybe 的概率相等,如果生成的数字是从 01/3,则需要使用 yes,如果它是从1/32/3maybe,如果它高于2/3。您可以将其视为将您的单词放在[0,1] 部分,每个单词的大小与概率成正比。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多