TensorflowハブとKerasによるNLPにおける転送学習


TensorFlow 2.0はモデルを構築するためのデフォルトのハイレベルAPIとしてKerasを導入しました.TensorFlowハブから事前に訓練されたモデルと組み合わせて、それはボックスから良いモデルを作成するNLPの転送学習のための死んだ簡単な方法を提供します.

その過程を説明するために、記事のタイトルがクリックされた場合に分類する例を挙げてみましょう.

データ作成


我々は、紙からデータセットを使用します'Stop Clickbait: Detecting and Preventing Clickbaits in Online News Media' 利用可能here .
この記事の目的は転送学習を説明することですので、我々は直接前処理されたデータセットをPandas DataFrameに直接ロードします.
import pandas as pd
df = pd.read_csv('http://bit.ly/clickbait-data')
データセットはページタイトルとラベルから成ります.タイトルがClickbaitならば、ラベルは1です.

70 %のトレーニングデータと30 %の検証データにデータを分割しましょう.
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(df['title'], 
                                                    df['label'], 
                                                    test_size=0.3, 
                                                    stratify=df['label'], 
                                                    random_state=42)

モデルアーキテクチャ


ここでは、PinsorFlowとTensorFlowハブをPIPでインストールします.
pip install tensorflow-hub
pip install tensorflow==2.1.0
モデルの機能としてテキストデータを使用するには、数値形式に変換する必要があります.TusorFlowハブは様々なものを提供するmodules バート、NNLMとWikiwordsのような埋め込みに文を変換するために.
ユニバーサルセンテンスエンコーダは、センテンス埋め込みを生成するための一般的なモジュールの一つである.これは、テキストの512の固定サイズベクトルを返します.
以下はSetsorFlow Hubを使用して「Hello World」という文の埋め込みをキャプチャする方法の例です.

import tensorflow_hub as hub

encoder = hub.load('https://tfhub.dev/google/universal-sentence-encoder/4')
encoder(['Hello World'])

TensorFlow 2.0では、我々のモデルでこれらの埋込みを使用することは、新しいもののおかげでケーキですhub.KerasLayer モジュールです.TFを設計しましょう.Clickbait検出の2進分類タスクのためのKerasモデル
最初に必要なライブラリをインポートします.
import tensorflow as tf
import tensorflow_hub as hub
それから、我々は我々の層をカプセル化するシーケンシャルモデルをつくります.
model = tf.keras.models.Sequential()
第1層はハブである.我々が利用できるモデルをロードすることができるところから、Keraslayertfhub.dev . 我々は、ロードされますUniversal Sentence Encoder .
model.add(hub.KerasLayer('https://tfhub.dev/google/universal-sentence-encoder/4', 
                        input_shape=[], 
                        dtype=tf.string, 
                        trainable=True))
ここで使用されるパラメータの違いは以下の通りです.
  • /4 : それはハブのユニバーサルセンテンスエンコーダのバリアントを表します.私たちはDeep Averaging Network (DAN) バリアント.我々もTransformer architecture などvariants .
  • input_shape=[] : 私たちのデータは、機能自体がないので、機能の次元が空です.
  • dtype=tf.string : 生のテキスト自体をモデルに渡すので
  • trainable=True : 我々が使用をfinetuneしたいかどうかを示します.我々はそれをtrueに設定すると、使用中に存在する埋め込みは、私たちの川下タスクに基づいてfinetunedされています.
  • 次に,0と1の間のclickbaitの確率を出力するために,単一ノードを持つ密層を追加した.
    model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
    
    要約すると、我々は、テキストデータを受け取り、512次元埋め込みにそれを投影し、シグモイドの活性化を持つフィードフォワード型ニューラルネットワークを通してそれを通過し、Clickbait確率を与えるモデルを有する.

    また、TFを用いて上記のアーキテクチャを実装することも可能である.Keras機能APIも.
    x = tf.keras.layers.Input(shape=[], dtype=tf.string)
    y = hub.KerasLayer('https://tfhub.dev/google/universal-sentence-encoder/4', 
                        trainable=True)(x)
    z = tf.keras.layers.Dense(1, activation='sigmoid')(y)
    model = tf.keras.models.Model(x, z)
    
    モデル概要の出力は
    model.summary()
    

    訓練可能なパラメータの数は256,798,337 私たちは普遍的なセンテンスエンコーダをfinetuningしているので.

    モデルのトレーニング


    我々はバイナリの分類タスクを実行しているので、我々はアダムオプティマイザと精度とメトリックとしてバイナリクロスエントロピー損失を使用します.
    model.compile(optimizer='adam', 
                  loss='binary_crossentropy', 
                  metrics=['accuracy'])
    
    さあ、モデルを訓練しましょう
    model.fit(x_train, 
              y_train, 
              epochs=2, 
              validation_data=(x_test, y_test))
    
    私たちは99.62 %のトレーニング精度と2エポックのみで98.46 %の検証精度に達する.

    推論


    いくつかの例でモデルをテストしましょう.
    # Clickbait
    >> model.predict(["21 Pictures That Will Make You Feel Like You're 99 Years Old"])
    array([[0.9997924]], dtype=float32)
    
    # Not Clickbait
    >> model.predict(['Google announces TensorFlow 2.0'])
    array([[0.00022611]], dtype=float32)
    

    結論


    したがって、TensorFlowハブとTFの組み合わせで.Keras、我々は簡単に転送学習を活用し、我々の下流のタスクのいずれかの高性能モデルを構築することができます.

    データクレジット

    Abhijnan Chakraborty, Bhargavi Paranjape, Sourya Kakarla, and Niloy Ganguly. "Stop Clickbait: Detecting and Preventing Clickbaits in Online News Media”. In Proceedings of the 2016 IEEE/ACM International Conference on Advances in Social Networks Analysis and Mining (ASONAM), San Fransisco, US, August 2016

    接続


    あなたがこのブログ記事を楽しんだならば、私が毎週新しいブログ記事を共有するところで、私と連絡をとってください.