代码之家  ›  专栏  ›  技术社区  ›  Cranjis

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

  •  0
  • Cranjis  · 技术社区  · 6 年前

    我有一系列字符串:

    corpus = ["Hello I am Sam", "This is a white desk","I ate cereals", ...]
    

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

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

    在这个语料库里。 我找不到-最好的办法是什么?如何训练一个ngram模型,然后得到这样的概率?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   dfens    6 年前

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

    非常小的例子供您参考。

    假设你要分析1克。

    分析文本:

    monkey eats banana

    dog eats bone

    单位: monkey , eats , banana , dog , bone , BEGIN , END .

    每句话以开头。

    有两种可能的转变:

    BEGIN->monkey

    BEGIN->dog

    这意味着有50%的可能性会以 猴子 .

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

    现在之后 有50%的可能性 香蕉 50%的几率 .

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

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

    每一个都有25%要生产

    注意,骨头和香蕉总是过渡到 结束

    有了数字你就可以把它分成 monkey eats -> banana END

    这只是一个简单的大局,希望能有所帮助

    编辑

    至于评论中提到的平滑,请使用拉普拉斯。

    假设你看到的每个字都比我们看到的多。

    例如,现在我们将有:

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

    当然,在这种情况下,我们有非常小的数据集,但对于较大的数据集,您将得到如下信息:

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