如何在我自己的语料库上训练ngram模型

时间:2018-11-28 13:51:55

标签: nlp nltk n-gram language-model trigram

我有一组字符串清单:​​

Sub test()
    Dim x As Long
    Dim firstRow As Long
    firstRow = 1
    Dim lastRow As Long
    With ActiveSheet
        lastRow = .Range("B2").End(xlDown).Row
        For x = lastRow To firstRow Step -1
            If .Range("B" & x).Value = "4-1/C" Then
                .Range("B" & x).Offset(0, 15).Value = "=INDIRECT(""'""&RC[-16]&""'!A22"")"
                .Range("B" & x).Offset(1, 15).Value = "=INDIRECT(""'""&R[-1]C[-16]&""'!A23"")"
                .Range("B" & x).Offset(2, 15).Value = "=INDIRECT(""'""&R[-2]C[-16]&""'!A24"")"
                .Range("B" & x).Offset(3, 15).Value = "=INDIRECT(""'""&R[-3]C[-16]&""'!A25"")"
                .Range("B" & x).Offset(0, 16).Value = "=INDIRECT(""'""&RC[-17]&""'!J22"")"
                .Range("B" & x).Offset(1, 16).Value = "=INDIRECT(""'""&R[-1]C[-17]&""'!J23"")"
                .Range("B" & x).Offset(2, 16).Value = "=INDIRECT(""'""&R[-2]C[-17]&""'!J24"")"
                .Range("B" & x).Offset(3, 16).Value = "=INDIRECT(""'""&R[-3]C[-17]&""'!J25"")"    
            End If
        Next
    End With
End Sub

我想在这个语料库上建立语言模型(最好使用nltk),以获得句子中单词的概率。 所以,我以后的用法将是

  

P(“山姆” |“我是”)

在这个语料库中。 我找不到-最好的方法是什么?如何训练ngram模型并在以后获得这样的概率?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议使用马尔可夫链https://en.wikipedia.org/wiki/Markov_chain

一个非常简单的例子供您参考。

假设您要分析1克。

已分析的文本:

monkey eats banana

dog eats bone

字母组合:monkeyeatsbananadogboneBEGINEND

每个句子都以开头开头。

可能有两个转换:

BEGIN->monkey

BEGIN->dog

这意味着句子以monkey开头的可能性为50%。

monkey之后,现在monkey->eats有100%的转换机会(因为在分析的文本中没有其他monkey->*的转换。

现在eats之后,banana的机会为50%,bone的机会为50%。

因此,通常使用此模型,我们可以生成以下句子:

monkey eats banana
monkey eats bone
dog eats bone
dog eats banana

每个产品中有25%要生产

请注意,骨头和香蕉总是会变成END

使用Digram,您只需将其拆分为monkey eats-> banana END

这只是简化的大图,希望对您有帮助

修改

关于注释中提到的平滑,请使用Laplace。

假设您确实比我们看到的每个单词都多。

例如,现在我们将有:

eats bone (2)
eats banana (2)
eats chocolate (1)
eats dog (1)

当然,在这种情况下,我们的数据集非常小,但是对于较大的数据集,您将得到类似的内容:

eats bone (104)
eats banana (1031)
eats chocolate (1)
eats dog (3)
...