自然言語学習

6059 ワード

スパムの検出


自然言語を数値に変換


"I ate the cake"
順序atecakeIteアルファベット0123単語順序2031

たんねつベクトルうめこみ

  • 全ての内容物がゼロの白地を作る.
  • ベクトルのn乗数のみを1に変更します.
  • ex) "I ate an apple cake"
  • (6,3,1,2,5)
  • (0,0,0,0,0,0,1,0,0,0),
    (0,0,0,1,0,0,0,0,0,0),
    (0,1,0,0,0,0,1,0,0,0),
    (0,0,1,0,0,0,1,0,0,0),
    (0,0,0,0,0,1,0,0,0,0)
  • ニューラルネットワーク構造


    層数タイプサイズ活性化関数1層Embedding 8983128--グローバル平均放熱1 D-2層FNN 32 Relu-DRoputate=0.1-3層FNN 1 sigmoid

    はめ込む

  • 左記載の8983は右クリックベクトルを生成するための単語総数を示す
  • 128はエナメル層から出力されるデータのサイズを示す.
  • Global Pooling

  • データのサイズを縮小するだけでなく、次元を縮小する解凍方法です.
  • グローバル冷却1 Dを1次元に減算する演算

  • 深さ学習モデル符号化

    """
    Author : Byunghyun Ban
    """
    from tensorflow import keras
    import data_reader
    
    # 몇 에포크 만큼 학습을 시킬 것인지 결정합니다.
    EPOCHS = 50  # 예제 기본값은 50입니다.
    
    # 데이터를 읽어옵니다.
    dr = data_reader.DataReader()
    
    # 인공신경망을 제작합니다.
    model = keras.Sequential([
        keras.layers.Embedding(8983, 128),
        keras.layers.GlobalAveragePooling1D(),
        keras.layers.Dense(32, activation='relu'),
        keras.layers.Dropout(0.1),
        keras.layers.Dense(1, activation='sigmoid')
    ])
    
    # 인공신경망을 컴파일합니다.
    model.compile(optimizer="adam", metrics=['accuracy'],
                  loss="binary_crossentropy")
    
    # 인공신경망을 학습시킵니다.
    print("\n\n************ TRAINING START ************ ")
    early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
    history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
                        validation_data=(dr.test_X, dr.test_Y),
                        callbacks=[early_stop])
    
    # 학습 결과를 그래프로 출력합니다.
    data_reader.draw_graph(history)