0

我有一个字符串列表的语料库:

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

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

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

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

谢谢!

4

1 回答 1

0

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

非常琐碎的例子供您参考。

假设您要分析 1-gram。

分析文本:

monkey eats banana

dog eats bone

一元组:monkey, eats, banana, dog, bone, BEGIN, END.

每个句子都从开头开始。

可以进行两种转换:

BEGIN->monkey

BEGIN->dog

这意味着该句子有 50% 的机会以monkey.

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

现在之后eats有 50% 的机会banana和 50% 的机会bone

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

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

每一个都有 25% 要生产

请注意,骨头和香蕉总是转换为END

使用 digrams,您只需将其拆分为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)
...
于 2018-11-28T15:00:50.520 回答