Ответы пользователя по тегу Машинное обучение
  • Embedding Keras?

    @nasdi Автор вопроса
    Разобрался, оставляю решение.
    1) Токен = количество слов, с запасом брать нельзя!!!
    token = Tokenizer(7229)
    token.fit_on_texts(df.Message)
    text = token.texts_to_sequences(df.Message)

    2) стандартно для кeras дополняем предложения 0
    text = sequence.pad_sequences(text, maxlen=75)
    3)создаем мешок слов по первоначальным предложениям и даем word2vec
    mes = []
    for i in df['Message']:
        mes.append(i.split())
    model = Word2Vec(mes, size=300, window=3, min_count=1, workers=16)

    4) В качестве подаваемых данных сети даем токенизированные предложения дополненные 0. Конвертим в np.array
    x_train, x_test, y_train, y_test = train_test_split(text, y, test_size=0.2, stratify=y)

    5)Создаем слой embedding из gensim при помощи wv.get_keras_embedding.
    kmodel = Sequential()
    kmodel.add(model.wv.get_keras_embedding(train_embeddings=True))
    kmodel.add(Dropout(0.2))
    
    kmodel.add(Conv1D(50,
                     3,
                     padding='valid',
                     activation='relu',
                     strides=1))
    kmodel.add(GlobalMaxPooling1D())
    
    kmodel.add(Dense(250))
    kmodel.add(Dropout(0.2))
    kmodel.add(Activation('relu'))
    
    kmodel.add(Dense(1))
    kmodel.add(Activation('sigmoid'))
    
    kmodel.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
    kmodel.fit(x_train, y_train,
              batch_size=32,
              epochs=5,
              validation_data=(x_test, y_test)

    train_embeddings=True
    Заметно увеличивает точность, как и время обучения.
    Ответ написан
    Комментировать