假设我们有一个RNN模型,它输出在语料库上训练的给定上下文(或没有上下文)的单词的概率。 我们可以将序列中每个单词的概率链接起来,以获得句子本身的整体概率。但是,因为我们正在进行链接,所以句子的概率(或可能性)随着长度的增加而下降。即使我们使用日志概率,情况也是如此。
无论如何我们可以将这些概率标准化吗?这是我在构建语言模型时面临的一个有趣的子问题。我有一个900万句话的语料库,长度从2-30不等。但是所有的句子都是有效的,我用它们作为训练LM的语料库。
现在,我正在获取一部分数据并对其进行更改,例如将句子改组或缩减为一半,预先添加或附加随机单词等等。这是为了创造一个无效的“假句子”。我想做的是获得所有有效句子的可能性的某种阈值,然后当我使用RNN来计算假句子的概率时,它应该相当小或不同于计算的阈值。
tldr; 像
这样的句子"the cat sat on the red mat"
"the cat sat on a mat"
"a cat sat on the red mat with brown coffee stains"
应该都具有可比较的概率/分数/指标 而像
这样的句子"cat cat mat on the brown red sat is"
"not mat in door on cat"
得分较低。
答案 0 :(得分:0)
您可以引入一个特殊单词 END-OF-SENTENCE ,并预测其概率以及其余单词。在这种情况下,您将能够正确地模拟句子长度的分布。 Jurafsky在NLP book的练习4中有一个很好的例子。
实际上,句子“一只猫坐在红色的垫子上,棕色的咖啡渍END”更有可能是“一只猫坐在红色的垫子上用END”,只是因为那些很少以“with”结束。如果您的RNN足够好,它将反映出这一点。如果您仍想对句子概率进行标准化,则可以计算困惑(每个单词的平均对数概率),例如在this question中,其中概念用简单的1克模型显示