tensorflow와 UniversalSentenceEncoder를 사용하여 요구 판정 AI를 만들어 보았습니다.

소개



안녕하세요. 테리입니다.
한 문장이 「뭔가를 개선하고 싶다」라든가 「귀찮은」등, 요구 같은지 어떤지를 판정하는 AI 분류도 모델을 만들어 보았습니다.

왜 만들었는가



최근에 저는 엔지니어에서 컨설턴트로 전직했습니다.
그 컨설팅 업무 중 여러 업계의 사람과 이야기 할 기회가 있습니다.
그러나, 전직해 얼마 안되는 나는, 그 업계에서 「곤란하고 있는 것」이나 「유저가 갖고 싶은 것」을 별로 모르고, 고객과 깊은 이야기를 할 수 없는 상태입니다. .
그래서 이번에는 다양한 업계에서 필요 같은 데이터를 수집하기 위해 필요 판정 AI를 만들어 보았습니다! !

개발 개요



개발에 대해서는, 이하와 같은 느낌으로 실시했습니다.
  • 개발 환경 ⇒ google colaboratory
  • 벡터화 ⇒ UniversalSentenceENcoder
  • 학습 방법 ⇒ 심층 학습 (tensorflow)
  • 데이터 ⇒ 트위터의 문장 데이터 (현재 2235 건)

  • UniversalSentenceENcoder에 대한 자세한 내용은 여기

    코드


  • 라이브러리 로드
  • 
    # ドライブマウントやファイル操作のために必要なライブラリ
    import pandas as pd
    import numpy as np
    from sklearn.model_selection import train_test_split
    from google.colab import drive 
    import glob
    from google.colab import drive 
    
    drive.mount(r"/content/drive/")
    
    # universal sentence encoderを使うのに必要なやつ
    %pip install tensorflow_text
    import tensorflow_hub as hub
    import tensorflow_text
    
    embed = hub.load("https://tfhub.dev/google/universal-sentence-encoder-multilingual/3")
    
  • 파일로드
  • # 学習データファイルは"/content/drive/My Drive/get_needs/needs_data_add_label/"にある
    # 学習データの形式はtweet,needsの2列
    file_path_list = glob.glob('/content/drive/My Drive/get_needs/needs_data_add_label/*.csv')
    df_learn = pd.DataFrame()
    for file_path in file_path_list:
      df = pd.read_csv(file_path)
      df = df.rename(columns={'tweet': 'text'})
      df_learn = pd.concat([df_learn, df], axis=0)
    
    df_learn = df_learn.reset_index()[["text", "needs"]]
    
    # 空白のレコードは、USEのエンコーダーでエラーになる
    df_learn = df_learn.dropna()
    
    # tweetで重複を削除。削除するときは、最新をほう残す
    df_learn.drop_duplicates(subset='text', keep='last', inplace=True)
    df_learn
    

    데이터는 이런 느낌.

  • 학습 데이터와 테스트 데이터 분리
  • tweets = df_learn["text"].values
    X = embed(tweets).numpy()
    y = df_learn["needs"].values
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=123,  test_size=0.2)
    
  • 모델 정의 및 학습
  • import keras
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Input
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.layers import Dropout
    from tensorflow.keras.callbacks import EarlyStopping
    from sklearn.metrics import classification_report
    from sklearn.metrics import confusion_matrix
    
    num_classes = 2
    
    # tensorflowの学習の為にラベルデータを変換
    # y_train, y_testは将来的にアンサンブルにするために、他の機械学習でも形として残す。
    y_train_t = keras.utils.to_categorical(y_train, num_classes)
    y_test_t = keras.utils.to_categorical(y_test, num_classes)
    
    # モデルの作成
    model = Sequential()
    model.add(Dense(512, activation='relu', input_shape=(512, )))
    model.add(Dense(512, activation='relu'))
    model.add(Dense(num_classes, activation='softmax'))
    
    model.compile(
        loss="binary_crossentropy",
        optimizer="adam",
        metrics=['accuracy']
    )
    
    # 学習
    early_stopping = EarlyStopping(
                            monitor='val_loss',
                            min_delta=0.0,
                            patience=5,
                    )
    
    history = model.fit(X_train, y_train_t,
                        batch_size=1000,
                        epochs=100,
                        verbose=2,
                        validation_data=(X_test, y_test_t),
                        callbacks=[early_stopping],
                        )
    
    

    학습 과정은 이런 느낌이었습니다!

    그림으로하면,


    오 뭔가 좋은 느낌으로 보인다.

    놀아보기




    글쎄, 코로나가 끝나고 싶다는 정보를 알고도 컨설팅 업무에 영향을 미치지 않을 것 같고, 좋은 분류로 보이지 않는다. . 운용하면서, 추정해 갈까-!

    끝까지 읽어 주셔서 감사합니다!



    끝까지 읽어 주셔서 감사합니다! (소중한 일이므로 두 번 말했습니다.)
    다음 단계로서 여러 사이트의 문장을 요구 AI로 분류시켜 DB에 저장할 수 있는 자동 수집 시스템을 만들 예정입니다.
    최종적으로는 수집한 결과를 대시보드화하거나 해서 컨설팅 업무를 위한 정보 수집 툴을 만들어 가고 싶습니다-!

    참고문헌


  • htps // tf 후 b. v / go g / uni r r l-sentense-enko r-l l chengua l / 3
  • htps : // / 케라 s. 이오 / 자 / 그중 ls /
  • htps : // / 케라 s. 이오 / 그럼 / 껄껄 gs r d / 세쿠 엔 치아
  • htp://bcl. s. 야마구치. 아 c. jp/~준/노테보오 k/케라 s/ぉ s/
  • 좋은 웹페이지 즐겨찾기