我们今天要学习的东西叫做采样,使用到的是numpy里面的np.random.choice这个函数。进行y<t-1>的随机采样。
np.random.choice()函数讲解https://blog.csdn.net/u013733326/article/details/80890454
然后就像之前我们所讲到的那样,把前一个采样到的,放到后一个作为输入,注意的是,y<t-1>是一个概率值,通过softmax输出之后,得到的是一个准确的值。比如说第一个得到的概率是the最大,那么在这里就会选择the这个词作为y<t-1>,并且把这个词放到下一个输入里。
我们刚刚说的是关于单词自动生成序列,也就是生成单位是一个词,那么使用的one-hot编码里的集合也是词。
但是我们也可以换成另外一种方式,比如说用字符生成序列,我们把26个字母大小写都放进集合,再放入一些常用的符号比如(,./:';空格)等等,同时放入数字,这个时候也可以通过一个个字符来生成语句。
在这种情境下,y就会变成一个字符,而不是一个词。
这种情况下的优点是:不会出现那种字典里没有出现过的单词而变成UNK标记。
同时问题是,由于一个英语句子会包含很长的一个字符串,整个模型的长度也会变得很长,导致不能很好地找到句子前后的相关关联关系,而且计算成本会很高昂,因此生成序列的效果不如使用整个单词作为生成单位的时候。
现在使用单个字符作为生成单位的应用比较少,只有在有很多未知单词或者文本的时候才会使用这个方法,同时需要有很强的算力。
在最后,吴恩达展示了两种使用了不同训练集的生成训练模型的效果,左边是新闻体,右边是莎士比亚体。
网友评论