テキスト分類を行うバニラフィードフォワードニューラルネットワーク(2つの隠れレイヤーとソフトマックス出力レイヤー)があります。これはtflearnで実装されています。softmax出力レイヤーを持たないニューラルネットワークを使用したTflearnランキングドキュメント
softmaxの機能は、出力インスタンスを密度確率分布に変換して、入力インスタンスのうち最も確からしいクラスがどれであるかを判断することです。
分類の代わりに、ドキュメントをランク付けしたい(各クラスは確率ではなく「スコア」を持つ)。ですから、私のアプローチは出力レイヤーを正規化するのではなく、通常のレイヤー(シグモイド活性化機能付き)のみを使用しています。これにより、各文書のこのスコア(0と1の間)が得られます。
tf.reset_default_graph()
# Build neural network
net = tflearn.input_data(shape=[None, x_size])
net = tflearn.fully_connected(net, self.HIDDEN_LAYER_SIZE)
net = tflearn.fully_connected(net, self.HIDDEN_LAYER_SIZE)
net = tflearn.fully_connected(net, y_size, activation='sigmoid')
net = tflearn.regression(net)
# Define model and setup tensorboard
model = tflearn.DNN(net)
return model
私はソフトマックスの出力でモデルを訓練した場合、モデルはかなり正確である:
私が定義されたモデルは、このようなものです。しかし、私がS字状の出力活性化関数を変更した場合、私の得点は私が期待するほど正確ではありません(正しいクラスの得点が最高です)。場合によっては、スコアは完全に間違っています。
私の質問です:このアプローチは、ニューラルネットワークでテキストのランキングを行うには正しいですか? (なぜ、トレーニング中に何かが欠落しているか、いくつかのハイパーパラメータにチューニングが必要なのでしょうか、この方法でさらにトレーニングデータが必要なのですか?または、tflearnで何かがありますか?)
ありがとうございます! Ivan