我有一堆文本,我正在用 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"
在以前的更基本的实施中没有经常发生的事情。那么我的新方法有什么不好的地方,还是我的代码有什么不好的地方?
我的意思是考虑超过下一个词进行预测是一种不好的方法?