使用神经网络转换文本
Transforming text with neural network
我之前使用过神经网络,但只是为了好玩,主要是将它们与归一化的分类(枚举)、数字和位(布尔)值一起使用。我知道 NN 很难理解字符,但我想知道他们是否能理解如何转换文本。
那么是否可以训练 NN 执行以下操作:
- 13/20 = 20
- aa/bb = bb
- 20/10 = 10
或(将 d 替换为 f)
- abcde = abcfe
- tdfg = tffg
- ddhj = ffhj
如果是,可靠性如何?或者也许有更适合这份工作的东西?
一切都取决于转换的复杂性。如果您对这些示例感兴趣,那么,当然可以,这是可行且可靠的。第二个例子是微不足道的,您只需一次向 NN 显示一个字符,将输入和输出编码为单热向量(每个字符一个神经元),它就可以完成工作。第一个例子可以通过将左右部分转换为表示两个符号的所有可能组合之一并具有两个输出的单热输入向量来解决,如果第一部分或第二部分应该是 [=14,则询问 NN select =]ed(存在更好的输入编码方式,尤其是对于长字符串)。如果您有足够的训练示例,一切都会正常进行。
一般来说,神经网络处理文本极其困难的日子已经一去不复返了。现在可以训练 NN 进行机器翻译(比任何其他方法都好),甚至在某种程度上,可以训练它根据程序字符串预测简单计算机程序的输出(但这对 NN 来说仍然是一项艰巨的任务)。
问题与实施无关,但由于我刚刚完成了类似主题的实验,这里有一些实用技巧:
使用 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 执行以下操作:
- 13/20 = 20
- aa/bb = bb
- 20/10 = 10
或(将 d 替换为 f)
- abcde = abcfe
- tdfg = tffg
- ddhj = ffhj
如果是,可靠性如何?或者也许有更适合这份工作的东西?
一切都取决于转换的复杂性。如果您对这些示例感兴趣,那么,当然可以,这是可行且可靠的。第二个例子是微不足道的,您只需一次向 NN 显示一个字符,将输入和输出编码为单热向量(每个字符一个神经元),它就可以完成工作。第一个例子可以通过将左右部分转换为表示两个符号的所有可能组合之一并具有两个输出的单热输入向量来解决,如果第一部分或第二部分应该是 [=14,则询问 NN select =]ed(存在更好的输入编码方式,尤其是对于长字符串)。如果您有足够的训练示例,一切都会正常进行。
一般来说,神经网络处理文本极其困难的日子已经一去不复返了。现在可以训练 NN 进行机器翻译(比任何其他方法都好),甚至在某种程度上,可以训练它根据程序字符串预测简单计算机程序的输出(但这对 NN 来说仍然是一项艰巨的任务)。
问题与实施无关,但由于我刚刚完成了类似主题的实验,这里有一些实用技巧:
使用 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