Open shidanila opened 6 years ago
Да, вообще говоря можно. Для этого текст нужно сначала разметить по частям речи и грамматическим значениям, например с помощью https://github.com/IlyaGusev/rnnmorph. Затем нужно обучить языковую модель, https://github.com/IlyaGusev/rupo/blob/master/rupo/generate/language_model/lstm.py Полученную модель и словарик нужно скормить генератору.
По поводу запуска на GPU - если стоит tensorflow-gpu, он автоматически и подхватится
В общем я тут хотел для этого ручку в API впилить, но возникли некоторые сложности. rnnmorph с недавних пор на последнем Keras'е. При этом модельки из 2.0.5 и из 2.0.6+ несовместимы из-за какого-то бага. Поэтому чтобы сделать обучение на произвольном корпусе, нужно обновить все старые модельки (читай: переобучить), а это займёт некоторое время. Я думаю к концу недели закончить.
При этом в dev ветке это будет уже сегодня, можно будет пользоваться :)
В train_rnn_model model_path что должно быть? engine.train_rnn_model(filenames=f_names, morph_filename='./new_markup_mod.txt', gram_vectorizer_path=GENERATOR_GRAM_VECTORS, word_form_vocabulary_path=GENERATOR_WORD_FORM_VOCAB_PATH, stress_vocabulary_path=GENERATOR_VOCAB_PATH, model_path=GENERATOR_LSTM_MODEL_PATH)
UPD: Сделал файл разметки, потом откатился снова на keras-2.0.5 и закомментил #Morph.get_morph_markup(filenames, morph_filename) вроде пошло, но выходит ошибка: ~/miniconda3/lib/python3.6/site-packages/rupo/generate/prepare/grammeme_vectorizer.py in get_index_by_name(self, name) 127 pos = name.split("#")[0] 128 grammemes = self.__process_tag(name.split("#")[1]) --> 129 return self.name_to_index[pos + "#" + grammemes] 130 131 def __build_vector(self, pos_tag: str, grammemes: List[str]) -> List[int]:
KeyError: 'VERB#Mood=Imp|Number=Sing|Person=2|VerbForm=Fin|Voice=Act'
UPD: А, так оставляем gram_vectorizer_path="" Модель начинает обучение,но выходит ошибка:
AttributeError Traceback (most recent call last)
Судя по issue в keras'е (https://github.com/keras-team/keras/issues/3657), такая ошибка возникает, если подаётся пустой массив в качестве обучающей выборки. По умолчанию, engine.train_rnn_model принимает на вход неразмеченные текстовые файлы и сам их размечает. Я бы посоветовал в таком режиме его и использовать. morph_filename (второй аргумент) - путь, куда будет сохранена разметка. keras выше 2.0.5 можно и нужно использовать, с ним не работает текущая модель, а вот новая должна прекрасно обучаться.
На keras выше 2.0.5 возникает ValueError при попытке запуска engine.train_rnn_model (при этом файл разметки создаётся): ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("embedding_1/random_uniform:0", shape=(35, 30), dtype=float32)'
А можно уточнить версию keras'а и tf? Я тестил на keras==2.1.6, tensorflow==1.8.0, всё ок.
Перезалил файлы c дропбокса, работает! Спасибо!
А не подскажите еще, в чем может быть причина:
new_markup.txt: 0%| | 0.00/1.35M [00:00<?, ?B/s]Traceback (most recent call last):
File "train_fyodor.py", line 22, in
имею то же самое, что и в предыдущем комментарии, не подскажете в чем может быть проблема?
Можно ли использовать свой текст для обучение? Если да, то где посмотреть информацию по этому поводу? И как запустить выполнение на gpu?