0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

隠れマルコフモデル(Hidden Markov Model, HMM)の解説:不確実性に対処するAIの仕組み

Posted at

隠れマルコフモデル(Hidden Markov Model, HMM)の解説:不確実性に対処するAIの仕組み

現実世界の多くの問題では、AIは「真の状態(hidden state)」を直接観測できず、その結果として得られる「観測(observation)」だけを頼りに推論を行う必要があります。隠れマルコフモデル(HMM)は、こうした状況をモデル化し、不確実性を扱うための有力な手法です。本記事では、HMMの仕組みや、その活用法についてわかりやすく説明します。


1. 隠れた状態と観測の関係

HMMは以下の要素で構成されます:

  • 隠れた状態(Hidden State)
    実際には存在するが直接観測できない変数(例:天気、ユーザーの意図)。

  • 観測(Observation)
    隠れた状態に基づいて得られるデータ(例:傘を持参したかどうか、音声波形)。

  • 状態遷移(State Transition)
    時間に伴う隠れた状態の変化(例:晴れ→雨の確率)。

  • センサー・モデル(Sensor Model, Emission Probabilities)
    各隠れた状態から観測が生成される確率(例:雨なら傘を持参する確率が高い)。


2. HMMの仕組みを理解する例:天気と傘の観測

2.1 シナリオ

ある建物に設置されたAIが、社員が持参する「傘」の観測データを基に、外の「天気」を予測するシステムを考えます。以下が前提です:

  • 隠れた状態(天気): 晴れ (Sunny) または 雨 (Rainy)
  • 観測(傘の持参): 傘あり (Umbrella) または 傘なし (No Umbrella)

2.2 状態遷移モデル

天気が時間経過で変化する確率:

  • 晴れの翌日は晴れ: 80%
  • 晴れの翌日は雨: 20%
  • 雨の翌日は雨: 70%
  • 雨の翌日は晴れ: 30%

2.3 センサー・モデル

各天気における観測の確率:

  • 晴れの日の傘持参確率: 20%
  • 晴れの日の傘未持参確率: 80%
  • 雨の日の傘持参確率: 90%
  • 雨の日の傘未持参確率: 10%

3. HMMのPython実装

HMMをPythonで実装してみます。

3.1 必要なライブラリの準備

pomegranateライブラリを使用します。

from pomegranate import *

# 状態遷移モデルの定義
transitions = [[0.8, 0.2],  # 晴れから晴れ・雨
               [0.3, 0.7]]  # 雨から晴れ・雨

# 観測モデルの定義
emissions = [[0.8, 0.2],  # 晴れの日の観測(No Umbrella, Umbrella)
             [0.1, 0.9]]  # 雨の日の観測(No Umbrella, Umbrella)

# 開始確率
starts = [0.5, 0.5]  # 初日が晴れ・雨の確率

# HMMモデルの構築
model = HiddenMarkovModel.from_matrix(transitions, emissions, starts, 
                                      states=["Sunny", "Rainy"],
                                      symbols=["No Umbrella", "Umbrella"])
model.bake()

4. 推論の実行

4.1 観測データから最も可能性の高い状態列を推定

観測データ(例:["Umbrella", "Umbrella", "No Umbrella", "Umbrella"])を基に、最も可能性の高い天気のシーケンスを予測します。

observations = ["Umbrella", "Umbrella", "No Umbrella", "Umbrella"]

# 最適な状態列を推定
predicted_states = model.predict(observations, algorithm="viterbi")
state_names = [model.states[state].name for state in predicted_states]

print(f"観測: {observations}")
print(f"推定された天気: {state_names}")

出力例:

観測: ['Umbrella', 'Umbrella', 'No Umbrella', 'Umbrella']
推定された天気: ['Rainy', 'Rainy', 'Sunny', 'Rainy']

この結果から、以下のことが推測されます:

  • 最初の2日間は雨。
  • 3日目は晴れ。
  • 4日目に再び雨が降った。

5. HMMの応用例

5.1 音声認識

観測:音声波形
隠れた状態:発話された単語
HMMを用いて、音声波形から単語列を推定できます。

5.2 ユーザー行動の推測

観測:クリックデータやページ閲覧時間
隠れた状態:ユーザーの興味や意図
ウェブサイトのUX改善に活用可能です。


6. HMMの限界と拡張

HMMは非常に強力ですが、以下の限界があります:

  • 過去の履歴の影響: 状態は直前の状態にしか依存しないという仮定(マルコフ性)。
  • 高次元データへの適用: 観測や状態が多くなると計算が複雑化。

6.1 拡張モデル

  • 条件付き確率場(CRF): より柔軟な依存関係をモデル化。
  • 長短期記憶(LSTM): 深層学習を用いた時系列データの解析。

7. まとめ

隠れマルコフモデル(HMM)は、不確実なデータから隠れた情報を推論するための基本的かつ重要なフレームワークです。Pythonライブラリを用いることで、複雑な計算を簡潔に実行可能です。本記事を基に、さまざまな現実問題への応用を試みてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?