我以前使用过神经网络,但只是为了好玩,主要将它们与标准化的类别(enum)、数值和位(bool)值一起使用。我知道NN很难理解字符,但我想知道他们是否能理解如何转换文本。
例如,是否可以训练NN执行以下操作:
- 13/20=20
- aa/bb=bb
- 20/10=10
或(用f代替d)
- abcde=abcfe
- tdfg=tffg
- ddhj=ffhj
如果是,可靠性如何?或者可能有更适合这份工作的东西?
这个问题与实现无关,但由于我刚刚完成了一个类似主题的实验室,这里有一些实用提示:
使用RNN网络以这种方式转换文本是非常可能和容易的。克隆此(https://github.com/karpathy/char-rnn)存储库,并用一个放在data/folder/input.txt中的文件对其进行训练,该文件的大小与您想要的输出格式相同:
abcde = abcfe
tdfg = tffg
ddhj = ffhj
使用该命令进行训练:
th train.lua -data_dir data/folder
当测试网络时,它应该能够根据您提供的种子文本产生正确的输出:
th sample.lua cv/[latest_sample] -primetext "abcd" -length 7
应该能够产生输出:
abcd = abcf
一切都取决于转换的复杂性。如果你对这些例子感兴趣,那么,肯定是的,这是可行和可靠的。第二个例子很简单,您只需一次向NN呈现一个字符,将输入和输出编码为一个热向量(每个字符一个神经元),它就能完成任务。第一个例子可以通过将左部分和右部分转换为一个热输入向量来解决,该热输入向量表示两个符号的所有可能组合中的一个,并具有两个输出,要求NN选择应该选择第一部分还是第二部分(存在对输入进行编码的更好方法,尤其是对于长字符串)。如果你有足够的训练实例,一切都会很好。
一般来说,NNs难以处理文本的日子已经一去不复返了。现在,神经网络可以被训练进行机器翻译(比任何其他方法都好),甚至在某种程度上,可以被训练根据程序字符串预测简单计算机程序的输出(但这对神经网络来说仍然是一项艰巨的任务)。