![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 07.07.2017
Сообщений: 8
|
![]()
Я делаю нейронную сеть для классификации текста на русском языке по этим примерам -
https://github.com/jiegzhan/multi-cl...cation-cnn-rnn https://machinelearningmastery.com/s...-python-keras/ В учебном наборе у меня используется русский язык, однако в тексте много специфичских терминов, так что использовать заранее обученную модель word2vec не особо будет полезным. Следующие параметры Максимальная длина статьи - 969 слов (в среднем значительно меньше), но мы добавляем PAD вместо пустых слов. размер получающегося словаря - 53886 Колилчество классов - 12 ( и они к сожалению распределены очень неравномерно, например первый класс содержит 5000 записий, а второй только 1500) Также самая главная проблема - это размер учебного набора - Всего 9876 записей И увеличить его к сожалению никак нельзя. Вот мой код x, x_test, y, y_test = train_test_split(x_, y_, test_size=0.1) x_train, x_dev, y_train, y_dev = train_test_split(x, y, test_size=0.1) embedding_vecor_length = 100 model = Sequential() model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length)) model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(Conv1D(filters=32, kernel_size=4, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(Conv1D(filters=32, kernel_size=5, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(Conv1D(filters=32, kernel_size=7, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(Conv1D(filters=32, kernel_size=9, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(Conv1D(filters=32, kernel_size=12, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(Conv1D(filters=32, kernel_size=15, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2) ) model.add(keras.layers.Dropout(0.3) ) model.add(LSTM(200,dropout=0.3, recurrent_dropout=0.3)) model.add(Dense(labels_count, activation='softmax')) model.compile(loss='categorical_cro ssentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) model.fit(x_train, y_train, epochs=25, batch_size=30) scores = model.evaluate(x_tеst, y_test) Я пробовал разные параметры, и сеть вроде работает. Во время обучения получается очень большая тоночть (до 98%) Но если проводить оценку - то максимум что я смог взять это было 74 процента (это были маленькие знаничения embedding_vecor_length, и batch_size) Ну это явно оферфитинг.. Вопросы у меня такие 1) Правильно ли я построил модель в приципе? Я просто не совсем понимаю как текстовые данные сохраняются при конволюции (все примеры в интернете про картинки) Может мне нужно использовать одновременную конволюцию с разными размерами фильтров и потом их мержить? Вообще расскажите как правильно делать конволюцию для текста и какие размеры фильтров выбирать? (мне кажется что в первом слое filters=32, kernel_size=3 конволюцию происходит только по 96 слловам? Или я не прав? и он берет весь текст?) 2) Как Решить проблему с оверффитингом? У меня нет возможности увеличить дата сет.. Я уже добавил Dropout (кстати правильно ли?) 3) Может нужна совсем другая структура сети? Например - читсая RNN? Буду рад любым советам. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.01.2011
Сообщений: 774
|
![]()
1) У тебя странные данные. Каким образом статьи перегоняются в вектора?
Попробуй перевести данные в векторы с помощью tf-idf. 2) Попробуй для начала воспользоваться простой линейной регрессией. Она, внезапно, очень хорошо работает с текстом. 3) Есть ли какая-нибудь ещё информация о текстах? А какие классы выделяются?
a.k.a. Angelicos Phosphoros
Мой сайт |
![]() |
![]() |
![]() |
#3 |
Регистрация: 07.07.2017
Сообщений: 8
|
![]()
Текст перегоняется в эмбединги при помощи вот этого кода -
https://github.com/jiegzhan/multi-cl...data_helper.py tf-id- не пробовал Текст профессионального плана, очень много сокращений и специфических терминов. 12 классов. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
deeplearning4j классификация текста | glorsh66 | Общие вопросы по Java, Java SE, Kotlin | 0 | 06.10.2017 20:51 |
Как улучшить код?! | xEk | Помощь студентам | 6 | 08.05.2012 18:08 |
Как улучшить форум. | Гриха | О форуме и сайтах клуба | 2798 | 30.11.2011 03:03 |
Как улучшить память?:-) | Kudryavtsev | Свободное общение | 38 | 09.05.2011 20:27 |
Как улучшить макрос? | Highlander | Microsoft Office Excel | 1 | 23.01.2010 12:15 |