Pythonでテキストデータを64次元ベクトルに埋め込む方法|Keras Functional APIの使い方
TensorFlowとKerasとは
TensorFlowはGoogleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装できます。研究用途から本番環境まで幅広く利用されています。
Kerasは、ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System)プロジェクトの研究の一環として開発された、Python製のディープラーニングAPIです。高水準APIであり、生産性の高いインターフェースを備えているため、機械学習の課題を効率的に解決できます。TensorFlowフレームワーク上で動作し、素早く実験できるよう設計されており、機械学習ソリューションの開発とカプセル化に不可欠な抽象化機能やビルディングブロックを提供します。
KerasはTensorFlowパッケージに同梱されているため、次のコードだけで利用を開始できます。
import tensorflow from tensorflow import keras from tensorflow.keras import layers
Functional APIの特徴
KerasのFunctional APIを使うと、Sequential APIで作るよりも柔軟なモデルを構築できます。非線形トポロジーを持つモデルの定義、レイヤーの共有、複数の入力と出力への対応が可能です。一般的にディープラーニングモデルは、複数のレイヤーからなる有向非巡回グラフ(DAG)として表現されます。Functional APIは、このレイヤーのグラフを組み立てるのに適した仕組みです。
実行環境:Google Colaboratory
以降のコードはGoogle Colaboratoryで実行しています。Google Colabを利用すれば、ブラウザ上でPythonコードを実行でき、面倒な環境構築は一切不要です。さらにGPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。
サンプルコード:タイトル内の各単語を64次元ベクトルに埋め込む
以下の例では、タイトル・本文・タグという3種類の入力を受け付け、優先度と部門クラスを予測するモデルを構築します。タイトルと本文に含まれる各単語は、Embedding層によって64次元ベクトルへ変換されます。
print("ユニークなissueタグの数")
num_tags = 12
print("テキストデータ前処理時の語彙サイズ")
num_words = 10000
print("予測対象のクラス数")
num_classes = 4
title_input = keras.Input(
shape=(None,), name="title"
)
print("可変長の整数系列")
body_input = keras.Input(shape=(None,), name="body")
tags_input = keras.Input(
shape=(num_tags,), name="tags"
)
print("タイトル内のすべての単語を64次元ベクトルに埋め込む")
title_features = layers.Embedding(num_words, 64)(title_input)
print("本文内のすべての単語を64次元ベクトルに埋め込む")
body_features = layers.Embedding(num_words, 64)(body_input)
print("埋め込み済み単語の系列を128次元の単一ベクトルに圧縮する")
title_features = layers.LSTM(128)(title_features)
print("埋め込み済み単語の系列を32次元の単一ベクトルに圧縮する")
body_features = layers.LSTM(32)(body_features)
print("利用可能な特徴量を連結して1つのベクトルに統合する")
x = layers.concatenate([title_features, body_features, tags_input])
print("ロジスティック回帰で特徴量を予測する")
priority_pred = layers.Dense(1, name="priority")(x)
department_pred = layers.Dense(num_classes, name="class")(x)
print("優先度とクラスを予測するモデルをインスタンス化する")
model = keras.Model(
inputs=[title_input, body_input, tags_input],
outputs=[priority_pred, department_pred],
)
コード出典:https://www.tensorflow.org/guide/keras/functional
出力
ユニークなissueタグの数 テキストデータ前処理時の語彙サイズ 予測対象のクラス数 可変長の整数系列 タイトル内のすべての単語を64次元ベクトルに埋め込む 本文内のすべての単語を64次元ベクトルに埋め込む 埋め込み済み単語の系列を128次元の単一ベクトルに圧縮する 埋め込み済み単語の系列を32次元の単一ベクトルに圧縮する 利用可能な特徴量を連結して1つのベクトルに統合する ロジスティック回帰で特徴量を予測する 優先度とクラスを予測するモデルをインスタンス化する
コードの解説
複数の入力と出力に対応:Functional APIを使えば、タイトル・本文・タグのように異なる形式の入力をまとめて処理し、優先度とクラスという2つの出力を同時に予測できます。これはSequential APIでは実現できません。
Embedding層:単語IDの系列を密な64次元ベクトル列に変換します。これにより、テキストデータをニューラルネットワークで扱える数値表現にできます。
LSTM層:可変長のベクトル系列を固定長の単一ベクトルに圧縮します(タイトルは128次元、本文は32次元)。
concatenate層:タイトル・本文・タグの各特徴量を連結し、1つのベクトルに統合します。
Dense層:統合された特徴量をもとに、優先度(1値)と部門クラス(4クラス)を予測します。
-
Pythonの「seaborn」ライブラリを使用してデータを視覚的に表現するにはどうすればよいですか?
機械学習とデータ可視化の関係機械学習とは、データからモデルを構築し、まだ見たことのないデータに対しても汎化できるようにすることを目的とした技術です。機械学習モデルに入力するデータは、システムが正しく理解できる形である必要があります。それによって、モデルはデータを適切に解釈し、精度の高い結果を生成できるようになります。Seabornとは何かSeabornは、データの可視化を支援するPythonライブラリです。あらかじめカスタマイズされた美しいテーマと高水準インターフェースを備えており、このインターフェースを活用することで、扱うデータの種類や、フィルタを適用した際の挙動を柔軟にカスタマイズ・制御す
-
Pythonの回帰モデルに非線形データを適合させる方法をわかりやすく解説
データの可視化には、Seabornライブラリを使用します。回帰モデルを構築する際には、必ず多重共線性(マルチコリニアリティ)の有無をチェックしましょう。これは、連続変数のあらゆる組み合わせ間に存在する相関関係を把握しておく必要があるためです。もし変数間に多重共線性が確認された場合は、データから除去する対策が求められます。 現実世界のデータは非線形であることが多い 実際のビジネスや研究の現場で扱うデータは、多くの場合非線形です。したがって、こうした非線形データをモデルへ適切に適合させる仕組みを見つけることが重要になります。本記事では、統計学で有名なAnscombe(アンスコム)のデータセットを用