Nlp 生成语言模型在自然语言处理中是如何工作的?

Nlp 生成语言模型在自然语言处理中是如何工作的?,nlp,nltk,probability,probability-theory,Nlp,Nltk,Probability,Probability Theory,好吧,生成语言模型只是一些词汇的概率分布。我想知道如何使用这个概率分布来生成一个词流,即语言 如果我总是选择概率最大的单词,它总是同一个单词,因为分布是固定的 我不确定我是否理解正确。有谁能提供一个具体的操作示例吗?首先,你不可能选择概率最高的词。你选择一个随机的词,但不是统一的——概率在模型中 因此,如果模型中有两个单词:“是”和“否”,并且概率分布为2/3“是”,1/3“否”,那么生成的文本可能如下所示: yes no no yes yes no yes yes yes no yes yes

好吧,生成语言模型只是一些词汇的概率分布。我想知道如何使用这个概率分布来生成一个词流,即语言

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


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

首先,你不可能选择概率最高的词。你选择一个随机的词,但不是统一的——概率在模型中

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

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

编辑

以下是一种从分布中取样的简单方法:

  • 生成一个从0到1的随机数
  • 迭代模型中的所有单词,求其概率权重之和。一旦总和大于生成的数字,就发出当前字
  • 下面是一个例子:

    假设您生成了
    0.8
    。您从
    yes
    开始,累积概率权重将为
    0.67
    ,因此您取下一个单词
    no
    ,得到大于
    0.8
    的累积权重
    1.0
    ,因此您发出
    no


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

    谢谢。但我知道理论上结果应该是这样的。但我的问题是如何在实践中生成它?我知道了,我已经用一个变量更新了答案,如何做到这一点。因此,按照你的例子,假设在我得到0.67的“是”之后,我得到0.5的“否”。所以它们都不超过0.8,我该怎么办?我是否应该继续迭代该模型,并不断求和概率权重,直到其超过0.8?在我发出一个单词后,我是否应该重复步骤1以获得一个介于0和1之间的新随机数?还是继续使用0.8?是的,为每个样本生成一个新的随机数。至于第一个问题:你把它倒过来了。在这种情况下,如果生成的数字低于
    0.67
    ,则会得到
    yes
    ,否则会得到
    no
    。如果你有三个词:
    yes
    no
    可能
    ,概率相等,那么你需要选择
    yes
    ,如果生成的数字是从
    0
    1/3
    no
    如果它是从
    1/3
    2/3
    ,如果它在
    2/3
    之上,那么
    可能
    。您可以将其视为将单词放在
    [0,1]
    部分,每个单词的大小与概率成比例。FWIW,听起来您的问题是关于从单语言模型生成单词。高阶语言模型将包括一些历史概念(例如,先前的单词和/或句法上下文)。一般来说,高阶语言模型将生成更连贯的词流。