用神经网络转换文本

时间:2015-02-19 16:39:35

标签: neural-network

我之前曾使用神经网络,但仅仅是为了好玩,主要是使用标准化的分类(enum),数字和位(bool)值。我知道NN很难理解角色,但我想知道他们是否能理解如何改变文本。

因此,例如可以训练NN做以下事情:

  • 13/20 = 20
  • aa / bb = bb
  • 20/10 = 10

或(用f代替d)

  • abcde = abcfe
  • tdfg = tffg
  • ddhj = ffhj

如果是,可靠性如何?或者也许有更适合这份工作的东西?

2 个答案:

答案 0 :(得分:1)

一切都取决于转型的复杂性。如果您对这些示例感兴趣,那么,肯定是的,这是可行和可靠的。第二个例子是微不足道的,你只需要在当时呈现NN个字符,将输入和输出编码为一个热矢量(每个字符一个神经元),它就能完成这项任务。第一个例子可以通过将左右部分转换为表示两个符号的所有可能组合之一并具有两个输出的单热输入向量来解决,要求NN选择是否应该选择第一部分或第二部分(更好的编码输入方式)存在,特别是对于长串)。如果你有足够的训练样例,一切都应该正常。

一般来说,NN难以处理文本的日子早已不复存在。现在可以训练NN进行机器翻译(比任何其他方法更好),甚至在某种程度上训练基于程序字符串预测简单计算机程序的输出(但这对于NN来说仍然是困难的任务)。

答案 1 :(得分:1)

这个问题与实施无关,但由于我刚刚完成了一个类似主题的实验室,这里有一些实用技巧:

使用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