BLUE*アルゴリズム2. 論文紹介
• Marc Sebban, et. al. “BLUE*: a Blue-Fringe
Procedure for Learning DFA with Noisy Data”
• http://labh-curien.univ-st-etienne.fr/~janodet/
pub/tjs04.pdf
• ノイズを含む信号列から状態遷移図を推定
→それが何の役に立つの?
13年4月14日日曜日
3. 論文紹介
• Thomas Arts and Simon Thompson, “From Test Cases
to FSMs: Augmented Test-driven Development and
Property Inference”
• http://www.cs.kent.ac.uk/pubs/2010/3041/content.pdf
• ユニットテストの結果からシステム内部の状態遷
移図を推定し、シナリオテストの自動生成&テス
トの不足の指摘をする
13年4月14日日曜日
4. FSM?DFA?
• FSM: Finite-State Machine: 有限状態機械
• DFA: Deterministic Finite Automaton:
決定性有限オートマトン
• 前のスライドでは「状態遷移図」と呼んだ
13年4月14日日曜日
5. DFAの推定
• 入力:
受理される信号列の集合
受理されない信号列の集合
• 出力:
DFA
13年4月14日日曜日
6.
BLUE*の流れ
• まずイメージを共有するために
BLUE*の流れを追って見る
13年4月14日日曜日
7.
BLUE*の流れ
入力データ
• e_plus = ['ac', 'abc', 'abbc']
• e_minus = ['b', 'c']
13年4月14日日曜日
8.
BLUE*の流れ
PTA(Prefix Tree Acceptor)
• e_plus = ['ac', 'abc', 'abbc']
• e_minus = ['b', 'c']
13年4月14日日曜日
9.
BLUE*の流れ
端から徐々に
赤い部分が
広がる
13年4月14日日曜日
11.
BLUE*の流れ
2と5をマージ!
2と6をマージ!
できあがり!
13年4月14日日曜日
12.
DFAの推定
既存手法
• RPNI(Oncina&Garcia, 1992)
• EDSM(Lang et al., 1998)
• 多項式時間でDFAを構築できる
• 入力列にノイズが入ることを想定してい
ない→むりやりフィット→過学習
13年4月14日日曜日
13.
DFAの推定
RPNI*
• Sebban & Janodet, 2003
• RPNIに確率を持ち込む
• 分類を間違える確率が状態のマージの前
(p1)と後(p2)で変わらないことを検定
• p1, p2の真の値はわからない。
教師データから推定: p1^, p2^
13年4月14日日曜日
14.
DFAの推定: RPNI*
正規分布で近似
• p2^ - p1^の分布を正規分布で近似
• N(p2 - p1, sqrt(2 * p^ q^ / N))
where p^ = (p1^ + p2^) / 2, q^ = 1 - p^
Nは教師データの総数
• T = p2^ - p1^がこの分布の(1 - α)-percentile Zαを
超えるなら、危険率αで仮説p1 = p2は棄却される
13年4月14日日曜日
15.
DFAの推定: RPNI*
RPNI*の改良
• RPNI*はRPNIよりもノイズのあるデータからの学
習がよくなった。
• しかし、大きなDFAを少ないデータから学習する
ことは不得手。
• そういうデータでの最近の勝者がとった戦略:
・マージを可能な限り遅延させる
・複数の選択肢の中で一番よいものを行う
→これを真似してみよう!
13年4月14日日曜日
16.
DFAの推定: BLUE*
PTA(Prefix Tree Acceptor)
• e_plus = ['ac', 'abc', 'abbc']
• e_minus = ['b', 'c']
13年4月14日日曜日
17.
DFAの推定: BLUE*
BLUE*の1ステップ
• promotion: blueをredに変える どちらかをやる
• merging: blueをredに合成する
13年4月14日日曜日
18.
DFAの推定: BLUE*
BLUE*の1ステップ
• すべてのblueとredの組み合わせについて
「マージ可能かどうか」を判断(前述の検定)
• mergeできないblueがあるならその中から
「一番良いpromotion」を行う
• なければ「一番良いマージ」を行う
「一番良い」の定義は?
13年4月14日日曜日
19. 一番よいpromotion
• blueは他のどのredとmergeしても
有意にエラー率が増える場合に
「mergeできない」と考えてpromoteされる。
• しかし「本当はmergeすべきなのにされな
い」が起こりうる(第一種の過誤)
• この確率が最も小さいものを選ぶ
13年4月14日日曜日
20. 一番よいmerging
• 「本当はmergeすべきでないのにする」
確率が最も小さいもの(第二種の過誤)
• P(マージ | p2 - p1 > 0)
• これを直接計算するのは大変、そこで
δ > 0を導入して P(マージ | p2 - p1 = δ)
を計算する。Pを最小とするようなred-
blue対はδに関係なく決まる
13年4月14日日曜日
21. tweak
• この尺度でマージ対象を選ぶと頂点数の
あまり減らないマージが多くなる傾向
• 安全だが、面白くない
• そこで「マージによって減る頂点の数」
で割ったものを代わりに使う
それをやっても結果がδに影響されないとは言い切れない…
13年4月14日日曜日
22.
abを負例に追加
2と3のマージ
→abはマージ前は
非受理だったが
マージ後は受理
↓abは教師データに
含まれていない
• e_plus = ['ac', 'abc', 'abbc']
• e_minus = ['b', 'c']
13年4月14日日曜日
23.
abを負例に追加
abを負例に追加
2,3がマージ
されなくなる
13年4月14日日曜日
24.
abを負例に追加
1と5をマージ
4と6がマージ
注: promotionの図を省略しているため青同士でマージされたように見える
13年4月14日日曜日
25. シナリオテストとの対応
• e_plus = ['ac', 'abc', 'abbc']
• e_minus = ['b', 'c']
• 例えば
a: ファイルオープン b: 書き込み c: クローズ
と読み替えてみる
• e_minus = ['b', 'c'] # いきなり書き込みやク
ローズをしたらエラー、というテスト
13年4月14日日曜日
27. 形式的仕様記述との比較
形式的仕様記述 BLUE*
モデルの表現力 高い FSMだけ
人間が テストケース
記述コスト
全部記述 から学習
学習コスト 高い 低い
13年4月14日日曜日