460 Views
October 28, 23
スライド概要
機械学習や音声認識に関する書籍を執筆しています。
13. 系列データの識別 遷移素性 I I 観測素性 German guy talked 13.1 ラベル系列に対する識別 13.2 系列ラベリング問題 13.3 系列識別問題 系列変換問題 時系列信号の予測 荒木雅弘: 『フリーソフトではじめる機械 学習入門(第2版)』 (森北出版,2018年) スライドとJupyter notebook サポートページ
13.1 ラベル系列に対する識別 ラベル系列に対する識別問題の分類 入力の系列長と出力の系列長が等しい 例)形態素解析、固有表現抽出 系列ラベリング問題 ⇒ CRF 入力の系列長に関わらず出力の系列長が1 例)動画像の分類、文書分類 系列識別問題 ⇒ HMM, RNN 入力の系列長と出力の系列長に対応関係がない 例)連続音声認識、機械翻訳 系列変換問題 ⇒ Seq2Seq+Attention, Transformer
13.2 系列ラベリング問題 ― CRF ― (1/7) 系列ラベリング問題とは 入力系列の個々の要素に対して出力ラベルを付与する 出力ラベルの出現確率は前後の出力ラベル系列に依存 1入力1出力の識別器を連続的に適用する方法では性能が低い ⇒ 入力や出力の系列としての特徴を使う 可能な出力ラベル系列の数は膨大 すべての出力ラベル系列をリストアップすることは現実的に不可能 ⇒ 探索によって(準)最適解を求める
13.2 系列ラベリング問題 ― CRF ― (2/7) 系列ラベリング問題の事例 形態素解析 ⼊⼒ 系列 で 出⼒ 名詞 助詞 名詞 動詞 接尾辞 接頭辞 名詞 ⼊⼒ さ れる 各 要素 固有表現抽出 B: begin, I: inside, O: outside ⼊⼒ Apple is looking at buying U.K. 出⼒ B-ORG O O O O startup for $1 B-GPE O O billion B-MONEY I-MONEY
13.2 系列ラベリング問題 ― CRF ― (3/7) 対数線型モデルによる系列ラベリング 素性関数の導入 入力系列 x と出力系列 y との間に定義される関数 ϕ(x, y) x, y のうち、ϕ の計算に関与しない要素は省略 ϕ で定義する関係が成立すれば1、不成立なら0を値とする 遷移素性 I I 観測素性 German guy talked
13.2 系列ラベリング問題 ― CRF ― (4/7) 対数線型モデル(多クラスロジスティック回帰) P (y∣x) = 1 Zx,w exp(w ⋅ ϕ(x, y)) Zx,w = ∑ exp(w ⋅ ϕ(x, y)) y 出力の決定 y ∗ = arg max P (y∣x) y = arg max 1 y Zx,w exp(w ⋅ ϕ(x, y)) = arg max w ⋅ ϕ(x, y) y
13.2 系列ラベリング問題 ― CRF ― (5/7) 素性関数の制限:出力系列を隣接するものに限定 ビタビアルゴリズムによって探索が可能 y ∗ = arg max ∑ w ⋅ ϕ(x, yt , yt−1 ) y t
13.2 系列ラベリング問題 ― CRF ― (6/7) ビタビアルゴリズム 1. すべての出力記号について先頭の要素(y1 )についてのスコアを計算 α(1, y1 ) = w ⋅ ϕ(x, y1 ) 2. t = 2 から始めて最後の出力要素に至るまで以下を繰り返し α(t, yt ) = max{w ⋅ ϕ(x, yt , yt−1 )} yt B(t, yt ) = arg max{w ⋅ ϕ(x, yt , yt−1 )} yt−1 3. 最終要素での最大値に対応するB を先頭まで遡る
13.2 系列ラベリング問題 ― CRF ― (7/7) CRFの学習 基本的には多クラスロジスティック回帰と同様の手順 勾配降下法などでクロスエントロピーを最小化する L1, L2 の正則化項も導入可能 系列に対する拡張 ある時点での重みの更新は、その前後の系列の出力確率に影響を与えるが、その計算を動的計画 法で行う(forward-backward アルゴリズム)
13.3 系列識別問題 ― HMM ― (1/4) 系列識別問題の事例 PC操作系列による熟練度の判定 k: キーボード、g: マウス、e: エラー 初心者の入力系列例 kekgkekggkgkkegeekeeege キーボード、マウスの操作が行き来し、後半になるほど疲労してエラーが多い 熟練者の入力系列例 kkekgkkkekgkgggegkg キーボード、マウスの操作が比較的集中して効率が良く、エラーが少ない 識別したい入力系列 kgekgkkgekgekeekegek これは初心者/熟練者のどちらか
13.3 系列識別問題 ― HMM ― (2/4) 生成モデルによるアプローチ 事後確率 P (y∣x) が最大となるクラスを識別結果とする 事後確率をデータから直接的に推定することは難しいので、ベイズの定理を用いて尤度と 事前確率の積に変形する 系列識別問題ではクラスの事前確率P (y)が得られることが多い y ∗ = arg max P (y∣x) y P (x, y) P (x) y P (x∣y)P (y) = arg max P (x) y = arg max = arg max P (x∣y)P (y) y
13.3 系列識別問題 ― HMM ― (3/4) 不定長入力に対する尤度計算法 自己遷移を持つ確率オートマトンを用いる I : 初期状態、E : 終了状態 尤度計算はビタビアルゴリズム I E
13.3 系列識別問題 ― HMM ― (4/4) HMMの学習:EMアルゴリズム Eステップ 現在のHMMのパラメータで、隠れ変数のすべての取り得る値について p(x) を計算 Mステップ 隠れ変数が取り得る値全てについてHMMのパラメータを最尤推定し、p(x) を重みとして加算
系列識別問題 ― RNN ― (1/2) RNNによる系列識別 隠れ層にはLSTMやGRUを使う 最終入力以外の出力は使わない 最終入力に対する出力を識別結果とする 欠点:入力前方の情報があまり反映されない positive/negative 出⼒層 … 隠れ層 ⼊⼒層 これ は … です 。
系列識別問題 ― RNN ― (2/2) bidirectional RNNによる系列識別 前向き・後向きそれぞれの最終状態を結合
系列変換問題 (1/2) 系列変換問題の定式化 x = x1 , … , xT 出力系列 y = y1 , … , yL 入力系列 系列処理と探索を組み合わせた複雑な処理が必要 End-to-Endアプローチ 入力から出力への変換をニューラルネットワークで学習 CTC Encoder-Decoderモデル(9章)
系列変換問題 (2/2) CTC (Connectionist Temporal Classification) 出力記号にblank記号_を加えて、入力長と出力長を合わせる 正解系列に変換可能な出力系列の確率の和を求める 例: /h/ /a/ /i/ という正解系列に対して、同じ音素またはblankからなる系列を1つの音素に置 き換える _h_____a_____i hhh__aaaa__iii hh_________a_i
時系列信号の予測 (1/7) 時系列信号を定常過程と仮定した場合 定常過程:平均値,分散が観測時刻によらず一定であるような時系列信号 y1 , … , yn AR (Auto Regressive) モデル 時刻 t の値 yt が p 個前までの値の重み付き和と誤差で表現されるとするモデル yt = ϕ1 yt−1 + ϕ2 yt−2 + ⋯ + ϕp yt−p + ϵt MA (Moving Average) モデル 時刻 t の値 yt が q 個前までの誤差の重み付き和と現在の誤差との差で表現されるとするモデル yt = ϵt − θ1 ϵt−1 − θ2 ϵt−2 − ⋯ − θq ϵt−q ARMAモデル ARモデルとMAモデルを組み合わせたもの yt = ϕ1 yt−1 + ϕ2 yt−2 + ⋯ + ϕp yt−p + ϵt − θ1 ϵt−1 − θ2 ϵt−2 − ⋯ − θq ϵt−q
時系列信号の予測 (2/7) 時系列信号を非定常過程と仮定した場合 平均値が時間的に変動する時系列信号 y1 , … , yn 変動をモデル化するために時系列の階差を計算する 1次階差 xt = yt − yt−1 2次階差 zt = xt − xt−1 ARIMA (Auto Regressive Integrated Moving Average) モデル d 次階差をとった時系列信号に対する p 次のAR, q 次のMAモデル 平均値の変動がなくなるまで d を上げてゆき、その時系列信号に対してARMAモデルを適用する ハイパーパラメータ d, p, q は自動調整可能
時系列信号の予測 (3/7) 時系列機械学習用ライブラリ sktime https://www.sktime.org/ scikit-learnと共通のインタフェース 時系列信号に対する予測・識別・回帰・クラスタリングをサポート
時系列信号の予測 (4/7) 例題:旅客機の乗客数の予測 Airline Passengersデータ:1949年から1960年までの月ごとの飛行機の乗客数 import numpy as np import pandas as pd from sktime.datasets import load_airline y = load_airline() y 1949-01 1949-02 1949-03 1949-04 1949-05 1960-08 1960-09 1960-10 1960-11 1960-12 112.0 118.0 132.0 129.0 121.0 ... 606.0 508.0 461.0 390.0 432.0
時系列信号の予測 (5/7) 問題の設定 直近36ヶ月のデータをテストデータ、それ以前を学習データとして予測問題を設定 from sktime.forecasting.model_selection import temporal_train_test_split from sktime.utils.plotting import plot_series y_train, y_test = temporal_train_test_split(y,test_size=36) plot_series(y_train, y_test, labels=["y_train", "y_test"])
時系列信号の予測 (6/7) 学習 周期を表すパラメータspを1年の月数である12にしてAutoARIMAのインスタンスを作成 し、学習 from sktime.forecasting.arima import AutoARIMA forecaster = AutoARIMA(sp=12, suppress_warnings=True) forecaster.fit(y_train)
時系列信号の予測 (7/7) 予測 テストデータと同じ系列長だけ予測を行い、結果をプロット y_pred = forecaster.predict(list(range(1, len(y_test)+1))) plot_series(y_train, y_test, y_pred, labels=["y_train", "y_test", "y_pred"])
13.4 まとめ ラベル系列に対する識別問題 入力の系列長と出力の系列長が等しい 識別モデルCRFが有効 入力の系列長に関わらず出力の系列長が1 HMMで可変長系列の処理が可能 RNNやTransformerも有効 入力の系列長と出力の系列長に対応関係がない RNNやTransformerが有効 時系列信号の予測 自己回帰計数や誤差のインパクトをパラメータとして回帰