NLP学习笔记八-RNN文本自动生成
RNN文本自动生成的原理:
结合下面一张图,我们讲一下RNN文本自动生成的原理,RNN文本自动生成其实从一种简单意义上来说,就是做的分类任务,为什么这门说呢?
如下图,我们输入一个句子,这个句子会被拆分成一个个的字符:
比如 I like oranges. 会被按字符进行拆分,空格标点符号也算作一个字符,然后呢,和之前的word embedind有区别,应为,此时我们的输入单位是按照字符来进行输入的,以英文字符加上各种标点符号,一共只有57个字符,所以在做英文文本自动生成的时候,是不需要在做embeding的,因为类别比较少,且各个字符是独立的,没有什么相关性,就不需要做embeding,我认为主要原因还是因为,字符之间是独立的,不像我们做词向量那样,单词之间是有相关性的,不能简单地用数字去标识,那样没法反映他们的相关性,如果输入单元不具有相关性,或者相关性很弱,那么可以不需要做嵌入向量处理。
另外我认为RNN模型主要还是它的神经网络矩阵,输入的数据经过其网络转化,信息被提取,或者过滤,或者保留,这个矩阵的特性,也会决定我们数据输入的特性,如果在这个矩阵当中,该矩阵因为对字符进行1-57的编码标记而不能提取有价值的信息,那么就要采取其他特征处理。不过RNN对于英文文本自动生成还是有一些效果的,说明,该神经网络还是具有很强的特征容错性的和识别性的,对于输入的数据可以有着较好的提取能力。这一部分知识其实应该跟矩阵里面的相关理论有关。
softmax(Wh)输出的就是各个字符可能被选择对应的概率。
那么我们这里提出一个猜想,是不是我们也可以用RNN进行中文本文生成。
对于这个猜想,博主目前有这样一些想法:
1.如果是中文文本生成,那么输入单元是什么,是词语,是一个字(英文文本输入是一个单词)?
2.那么问题其实很清晰了,无论输入单元是一个字还是一个词语,如果我们不进行embeding,只是对单词或者字进行简单的编码,我们知道,这都是一个极具挑战的任务,如果以字为单位,编码应该是1-100000+,汉字有十万个,而且我们的分类变成了十几万类,如果以词语为单位只会更多。
3.其实我们可以以拼音为单位进行处理,先对文本进行分词,在把分词的词语翻译成拼音,然后以拼音字符为单位进行输入,但是这个方法,得到的也会是拼音,最终,我们需要在将拼音翻译回来,这个方法是有很大问题的,因为不一定能翻译回来,生成的拼音必须要和汉语字尽可能对应,否则无法翻译成汉语。
4.对于汉语RNN文本生成方法,或许还需实验才能真正知道效果怎么样。但是目前来看,如果仅以简单文本生成,以字为单位是比较好的。