Вероятность биграммы - PullRequest
       30

Вероятность биграммы

2 голосов
/ 13 июля 2020

У меня есть корпус Moby Dick Corpus, и мне нужно вычислить вероятность биграммы «нога из слоновой кости». Я знаю, что эта команда дает мне список всех биграмм

bigrams = [w1+" "+w2 for w1,w2 in zip(words[:-1], words[1:])]

Но как мне получить вероятность только двух слов?

1 Ответ

1 голос
/ 13 июля 2020

Вы можете сосчитать все биграммы и подсчитать указанные c биграммы, которые вы ищете. Вероятность того, что биграмма встречается P (биграмма), равна их частному. Условная вероятность слова [1] дать слово [0] P (w [1] | w [0]) является частным от количества вхождений биграммы по счету w [0]. Например, глядя на биграмму ('some', 'text'):

s = 'this is some text about some text but not some other stuff'.split()

bigrams = [(s1, s2) for s1, s2 in zip(s, s[1:])]

# [('this', 'is'),
#  ('is', 'some'),
# ('some', 'text'),
# ('text', 'about'),
# ...

number_of_bigrams = len(bigrams)
# 11

# how many times 'some' occurs 
some_count = s.count('some')
# 3

# how many times bigram occurs
bg_count = bigrams.count(('some', 'text'))
# 2

# probabily of 'text' given 'some' P(bigram | some)
# i.e. you found `some`, what's the probability that its' makes the bigram:
bg_count/some_count
# 0.666

# probabilty of bigram in text P(some text)
# i.e. pick a bigram at random, what's the probability it's your bigram:
bg_count/number_of_bigrams
# 0.181818
...