运用深度学习进行文本生成 (2)

下列函数将原分布加入 temperature 后通过\((1.1)\)式转换为新分布,再从新的多项式分布中随机抽样获得最有可能出现的字符索引。

def sample(preds, temperature=1.0): if not isinstance(temperature, float) and not isinstance(temperature, int): print("temperature must be a number") raise TypeError preds = np.asarray(preds).astype('float64') preds = np.log(preds) / temperature exp_preds = np.exp(preds) preds = exp_preds / np.sum(exp_preds) probas = np.random.multinomial(1, preds, 1) return np.argmax(probas)


最后定义一个文本生成函数:

def write(model, temperature, word_num, begin_sentence): gg = begin_sentence[:30] # 初始文本 print(gg, end='/// ') for _ in range(word_num): sampled = np.zeros((1, maxlen, len(chars))) for t, char in enumerate(gg): sampled[0, t, char_indices[char]] = 1.0 preds = model.predict(sampled, verbose=0)[0] if temperature is None: # 不加入temperature next_word = chars[np.argmax(preds)] else: next_index = sample(preds, temperature) # 加入temperature后抽样 next_word = chars[next_index] gg += next_word gg = gg[1:] sys.stdout.write(next_word) sys.stdout.flush()


初始文本是

begin_sentence = whole[50003: 50100] print(begin_sentence[:30]) # 一块的红布腰带来。“有这个,我就饿不着!”说完,他赶紧把小褂


不使用 temperature 生成:

write(model, None, 450, begin_sentence)

一块的红布腰带来。“有这个,我就饿不着!”说完,他赶紧把小褂/// 又扣好。

“可是,叫二毛子看见,叫官兵看见,不就……”“是呀!”十成爽朗地笑了一声。

“我这不是赶快系好了扣子吗?二哥,你是好人!官兵要都象你,我们就顺利多了!哼,
有朝一日,我们会叫皇上也得低头!”

“十成,”二哥掏出所有的几吊钱来,“拿着吧,不准不要!”“好!”十成接过 钱

去。“我数数!记上这笔账!等把洋人全赶走,我回家种地,打了粮食还给你!”他 一边

说,一边数钱。“四吊八!”他把钱塞在怀里。“再见啦!”他往东走去。二哥赶 上去,

“你认识路吗?”

十成指了指德胜门的城楼:“那不是城门?出了城再说!”

十成不见了,二哥还在那里立着。这里是比较凉爽的地方,有水,有树,有芦苇, 还

有座不很高的小土山。二哥可是觉得越来越热。他又坐在石头上。越想,越不对,越 怕;
头上又出了汗。不管怎样,一个旗兵不该支持造反的人!他觉得自己一点也不精明, 作了
极大的错事!假若十成被捉住,供出他来,他怎么办?不杀头,也得削除旗籍,发 到新疆
或云南去!


temperature = 0.5 生成:

write(model, 0.5, 450, begin_sentence)

一块的红布腰带来。“有这个,我就饿不着!”说完,他赶紧把小褂/// 又扣好。

“可是,叫二毛子看见,叫官兵看见,不就……”“是呀!”十成爽朗地笑了一声。

“我这不是赶快系好了扣子吗?二哥,你是好人!官兵要都象你,我们就顺利多了!哼,
有朝一日,我们会叫皇上也得低头!”

“十成,”二哥掏出所有的几吊钱来,“拿着吧,不准不要!”“好!”牛牧师 牧师左晃牧师那么一下,怎么样呢??在我,不去打听!”十成立了起,往往说了“启真!

“不忙?”

“怎么用不着?谁会白给你们老太太!我们这点?”牛牧师也觉得酒下,并且告诉过老妈子:“ 小弟子,什么急忙①来说,三上就一两大没儿!”

“那,您好!”父亲口中起这个“良心法儿的,而且有点吃好几份儿 吧 吧

—。他的身前和一二哥要是的土造。那么一风大的那些话亭。父亲高兴兴
来。“你们,就用点了给我压得你们省吃饭,我还没什么都 点不叫
您呀!”“这就是的气好!没有学问!您看见,我还是老白姥姥!我洗看,我是洋人吗?”

“那不好,我不懂你们老着儿!”我就回去!要说!”


不使用 temperature 的文本比较正统,使用 temperature 后随机性大增,行文跳跃,颇有意识流的风范。

《正红旗下》是老舍的遗作,没写完就投河自尽了,因而篇幅很短。但即使是这样,使用 one-hot 编码后依然维数很高,若使用更大的语料则很容易内存爆炸。所以下文我们使用word embedding将文本映射为低维词向量。





Embedding + 双向GRU (birdectional GRU)

第二个模型与上一个有3个不同点:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygsxp.html