2015-02-19 4 views
1

Я ранее работал с нейронными сетями, но только для удовольствия, в основном используя их с нормализованными категориальными (перечисляемыми), числовыми и битовыми (bool) значениями. Я знаю, что у NN есть проблемы с пониманием персонажей, но мне было интересно, смогут ли они понять, как преобразовать текст.Преобразование текста с нейронной сетью

Так это можно, например, готовить NN сделать следующее:

  • 13/20 = 20
  • аа/бб = бб
  • 20/10 = 10

Или (заменить d на f)

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

Если да, то насколько надежно? Или, может быть, что-то лучше подходит для работы?

ответ

1

вопрос не имеет отношения к реализации, но так как я только что закончил лабораторию на аналогичную тему, вот несколько практических советов:

Было бы вполне возможно и легко использовать сеть РНН для преобразования текст таким образом. Клонирование это (https://github.com/karpathy/char-rnn) хранилища и обучать его с помощью файла, помещенного в данном/папке/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 
+0

Очень хорошее доказательство концепции, я принимаю это как ответ. – formatc

1

Все зависит от сложности преобразования. Если вас интересуют эти примеры, то, конечно, да, это выполнимо и надёжно. Второй пример тривиален, вы просто представляете NN один символ в то время, кодируете ввод и вывод в виде одного горячего вектора (один нейрон на символ), и он будет выполнять эту работу. Первый пример может быть решен путем преобразования левой и правой частей в один горячий входной вектор, представляющий одну из всех возможных комбинаций двух символов и имеющих два выхода, с просьбой NN выбрать, будет ли выбрана первая часть или вторая часть (лучшие способы кодирования ввода существует, особенно для длинных строк). Если у вас достаточно примеров обучения, все должно работать нормально.

Как правило, дни, когда было непоправимо сложно, чтобы NN имели дело с текстами, давно прошли. Теперь NN можно обучить механическому переводу (лучше, чем любой другой метод) и даже, в некоторой степени, обученному прогнозированию вывода простых компьютерных программ на основе символьной строки программы (но это все еще сложная задача для NN).

+0

Спасибо, прошло некоторое время с тех пор, как я работал с NNs. Думаю, мне нужно будет запустить несколько тестов, чтобы узнать, какие ограничения существуют, но просто подтверждение того, что NN может справиться с этим, - это много.Я понимаю часть вашего ответа о первом примере, но дело в том, что я не знаю, как была изменена строка, у меня есть источник и результат, и мне пришлось бы обучать его, чтобы он получал тот же результат от моего ввода. Таким образом, у меня будет 36 входов 1/0 для каждого символа, вот как я себе это представлял. – formatc

+0

Обратите внимание, что если ваше преобразование зависит также от прошлой истории, то не только текущее значение, вы должны использовать повторяющиеся нейронные сети и произвольные долговременные зависимости, с которыми может быть трудно справиться. Если источник данных является сложным, вам может понадобиться генерировать некоторые синтетические данные с известным преобразованием и первым истечением срока с тем, чтобы получить некоторую уверенность. –

Смежные вопросы