-1

我有一堆文本,我正在用 python 分析这些文本,以便生成一个能够详细说明人类文本的预测模型。

对于这个任务,我生成一个字典,其中包含输入中出现的每个单词,并将其指向另一个字典,其中包含后面的每个单词及其出现次数,因此我可以进行加权选择。

在伪代码中:

dict['foo']={'bar':3, 'barbar':1, 'baz':4}
prev_word=dict['foo']
nextword=random.choices(list(prev_word.keys()), weights=prev_word.values())

尽管该方法很简陋,但它的效果非常好,因此我尝试通过保存先前单词的预测以影响到下一个单词的预测来改进它:

dict[0]['foo']={'bar':3, 'barbar':1, 'baz':4}
while not word='///ending///':

     for n in range(len( dict)):
        remember=dict[n][prev_word]

     del remember[0]
     remember.append({})

     semantics=semantics/2 ###### Each turn every value gets reduced by half
     semantics=add_dict(remember,dict[word]) ####  And added to the predictions

     word=predict(semantics,word)
     output.append(word)
     remember=semantics
print(output)   





####so if I have the word cat and the next word can be jumps and the next can be to:
dict['cat']=[{'jumps':5},{'to':4}]
####and the next words to jumps are to and the:
dict['jumps']=[{'to':3},{'the':6}]
####the weights used to the prediction for jumps would be:

semantics=[{'to':7},{'the':6}]

但令人惊讶的是,这并不像只考虑下一个单词那样有效。在最后一种情况下,预期输出将是

"cat jumps to the"

但它经常产生

"cat jumps to at"

在以前的更基本的实施中没有经常发生的事情。那么我的新方法有什么不好的地方,还是我的代码有什么不好的地方?

我的意思是考虑超过下一个词进行预测是一种不好的方法?

4

1 回答 1

0

大部分已解决:问题是我包含了从倒数第二个单词到最后一个单词的所有预测并且增加了噪音,解决方案是只计算倒数第二个单词与最后一个单词共有的预测并添加所有剩余的预测从最后一句话。

next[1]['black']
{'jumps':3,'writes':2}
word
'cat'
next[0]['cat']
{'jumps':2, 'scratch':1}
add(next[1]['black'],next[0]['cat'])
{'jumps':5, 'scratch':1}
result
'black cat jumps'

代替 :

add(next[1]['black'],next[0]['cat'])
{'jumps':5, 'scratch':1, 'writes':1}
result
'black cat writes' ###Which has less sense but could have no sense at all
于 2021-11-19T21:26:47.470 回答