自然言語処理-テキスト分類(4)CNN
CNN
CNNとは何ですか。
CNNはConvolutional Neural Networkの弱者であり,Denseニューラルネットワークの前に複数の階層の合成乗(Convolution)モデルを構築する.一般に画像データに用いられ、学習により入力データに対して最良の特徴を生成し、抽出した特徴を利用してデータを分類する方式が用いられる.
Yoon Kim博士が書いた"Convolutional Neural Network for Sentence Classification(2014)"によって、この方式がテキストにも効果的であることが証明された.
RNNが単語の入力順序を重要に反映している場合,CNNは文の地域情報を保存するとともに,各文成分の登場情報を学習を反映した構造と解釈する.学習の際,各フィルタの大きさを調整して言語の特徴値を抽出することは,従来のn-gram方式に類似しているといえる.
全体構造はRNNとあまり変わらない.モデル部分を変更すれば、CNNモデルで簡単に学ぶことができます.
前文を参照してファイルのロードが完了したとします.
モデルのスーパーパラメータを決定します.
model_name = 'cnn_classifier_en'
BATCH_SIZE = 512
NUM_EPOCHS = 2
VALID_SPLIT = 0.1
MAX_LEN = train_input.shape[1]
kargs = {'model_name': model_name,
'vocab_size': prepro_configs['vocab_size'],
'embedding_size': 128,
'num_filters': 100,
'dropout_rate': 0.5,
'hidden_dimension': 250,
'output_dimension':1}
CNNモデルを生成するためにクラスを生成します.埋め込みベクトルを生成した後,Conv 1 Dにおけるkernel sizeが3,4,5の3つの合成二層を用いた.また、合成乗算ニューラルネットワーク毎にmaxfulling層を適用し、最後に、オーバーマッチングを防止するためにDroputと完全接続(完全接続層)の2層を積層して最終出力を形成する.
class CNNClassifier(tf.keras.Model):
def __init__(self, **kargs):
super(CNNClassifier, self).__init__(name=kargs['model_name'])
self.embedding = layers.Embedding(input_dim=kargs['vocab_size'],
output_dim=kargs['embedding_size'])
self.conv_list = [layers.Conv1D(filters=kargs['num_filters'],
kernel_size=kernel_size,
padding='valid',
activation=tf.keras.activations.relu,
kernel_constraint=tf.keras.constraints.MaxNorm(max_value=3.))
for kernel_size in [3,4,5]]
self.pooling = layers.GlobalMaxPooling1D()
self.dropout = layers.Dropout(kargs['dropout_rate'])
self.fc1 = layers.Dense(units=kargs['hidden_dimension'],
activation=tf.keras.activations.relu,
kernel_constraint=tf.keras.constraints.MaxNorm(max_value=3.))
self.fc2 = layers.Dense(units=kargs['output_dimension'],
activation=tf.keras.activations.sigmoid,
kernel_constraint=tf.keras.constraints.MaxNorm(max_value=3.))
def call(self, x):
x = self.embedding(x)
x = self.dropout(x)
x = tf.concat([self.pooling(conv(x)) for conv in self.conv_list], axis=-1)
x = self.fc1(x)
x = self.fc2(x)
return x
ここまで進めば,後の部分も前の文章のようにモデルコンパイルやCalback宣言,学習を行うことができる.学習が完了したら、ビジュアル化チェックを行い、結果を表示し、キャッシュにコミットします.スコアはRNNよりやや低かったが,性能が高いことが分かった.
ここまで,機械学習/深さ学習モードを用いたテキスト分類実習を行った.ここで行った実験は簡単な実施形態であるので,多様な方法で性能を改善することを試みることができる.
Reference
この問題について(自然言語処理-テキスト分類(4)CNN), 我々は、より多くの情報をここで見つけました https://velog.io/@dayday/자연어처리-텍스트-분류4-CNNテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol