我在python中编写了日志概率函数,它从句子中取2个单词作为输入,并返回日志概率。所以,对于例如:句子是:STOP to be or not to be STOP
,我将单次出现的单词转换为<unk>
得到:STOP to be <unk> <unk> to be STOP
,然后我得到它的双字母:
['STOP,to', 'to,be', 'be,<unk>', '<unk>,<unk>', '<unk>,to', 'to,be', 'be,STOP']
我的对数概率函数如下:
def logprob(self,context,event):
str = context + " " + event
list=[]
list.append(str)
c1 = self.m.count(str)
v=len(self.l2)
c2=self.trainfiles.count(context)
c3=(c1+1.0)/(c2+v)
self.prob=math.log(c3,2)
return self.prob
因此,如果我们logprob('STOP','to')
,我们会得到log(2/5)
现在,我想编写另一个函数来写入这样的文件:
STOP: STOP Log(1/5) to Log(2/5) be Log(1/5) <unk> Log(1/5)
to: STOP Log(1/6) to Log(1/6) be Log(3/6) <unk> Log(1/6)
be: STOP Log(2/6) to Log(1/6) be Log(1/6) <unk> Log(2/6)
<unk>: STOP Log(1/6) to Log(2/6) be Log(1/6) <unk> Log(2/6)
我最关心的是我无法弄清楚如何以及在何处调用logprob以传递其中的单词。如果我在main中调用那么它只会计算该特定单词的logprob值,但我想用所有可能事件的logprobs编写一个上下文。我该怎么做?