Showing posts with label misc. Show all posts
Showing posts with label misc. Show all posts

April 2, 2013

語/語の組み合わせの大人らしさ

検索エンジンにクエリを投げて,セーフサーチのオン/オフを切り替えたときに返ってきた件数をうまいことして,語/語の組み合わせの大人度合いが測れないかと思ったけどあんまりうまくいかなかった.


イメージ


すっごく単純にすると

  • 大人な語
    • 語がどれほど大人か
    • $$大人(眼球) = \log \frac{n(眼球, off)}{n(眼球, strict)}$$
    • ただしn(q,a)はクエリqのセーフサーチの設定aのoff/moderate/strictのとき結果件数.検索結果が0件の場合もあるだろうから分母には1足しておいてもいい.
  • 大人な組み合わせ
    • 語を組み合わせることでどれくらい大人っぽくなるか
    • $$大人組(目玉, 玉子) = \log \frac{n(目玉 and 玉子, off)}{n(目玉 and 玉子, strict)} - 大人(目玉) - 大人(玉子)$$

みたいな感じ.あんま考えてないのでこれで比較ができるかわかんないけど.大人がゲシュタルト崩壊…


でも


普通に考えてセーフサーチが強いほうが検索結果少ないだろ,と思ってたら,
眼球 - Google 検索
セーフサーチ: オフ
約 57,800,000 件 (0.20 秒) 
眼球 - Google 検索
セーフサーチ: 強
約 71,800,000 件 (0.19 秒) 
セーフサーチ強のほうが多いこともある…どういうことだってばよ



Bingもあんま変わらん.そういうもんなのかな.


ちなみにWebの検索結果件数を使って人間関係を抽出している論文(件数だけじゃないけど)→Web 上の情報からの人間関係ネットワークの抽出


May 1, 2011

Googleの検索結果のイメージ


Googleの検索結果の"Google"の画像を保存すると…


こんなかんじ。

July 29, 2010

Pythonで隠れマルコフモデルのSmoothingの例

Pythonで隠れマルコフモデルのFilteringの例のSmoothingバージョン.

スムージング
  • 現在まで(0~T)のすべての観測があるときに,過去の状態(t;0<t<T)を推定する.
  • i.e. P(Xt|Y0:T)を求める.
Filtering同様,P(Xt|Y0:T)を変形する.

cは正規化項.P(Xt|Y0:t)はフィルタリング(Forward Algorithm)で求められる.P(Yt+1|Xt+1)は出力確率.P(Xt+1|Xt)は遷移確率.で,再帰的にP(Yt+1:T|Xt)を求められる.以下実装.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 状態変数
states = ['Rainy', 'Sunny']

# 観測列
observations = ['walk', 'shop', 'clean', 'shop', 'walk']

# 初期確率
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
 
# 遷移確率
transition_probability = {
   'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
   'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
   }

# 出力確率 
emission_probability = {
   'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
   'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
   }

# Forward
def forward(y1, prior, states, trans_p, emit_p):
    post = {}
    for x1 in states:
        post[x1] = emit_p[x1][y1] * sum([ trans_p[x][x1] * prior[x] for x in states ])
    s = sum(post.values())
    for k,v in post.items():
        post[k] = v/s
    return post

# Filtering
def filtering(observations, states, start_p, trans_p, emit_p):
    prior = start_p
    T = len(observations)
    for t in range(T):
        post = forward( observations[t], prior, states, trans_p, emit_p )
        prior = post
    return post

# Backward
def backward(y1, prior, states, trans_p, emit_p):
    post = {}
    for x in states:
        post[x] = sum([ emit_p[x1][y1] * prior[x1] * trans_p[x][x1] for x1 in states ])
    s = sum(post.values())
    for k,v in post.items():
        post[k] = v/s
    return post

# Smoothing
def smoothing(observations, t, states, start_p, trans_p, emit_p):
    T = len(observations)
    # forward
    f = filtering(observations[:t], states, start_p, trans_p, emit_p)
    # backward
    b = {}
    for x in states:
        b[x] = 1.0 / len(states)
    for i in range(T-1, t-1,-1):
        b = backward(observations[i], b, states, trans_p, emit_p) 
    # product
    results = {}
    for x in states:
        results[x] = f[x] * b[x]
    # normalization
    s = sum(results.values())
    for k,v in results.items():
        results[k] = v/s
    return results

print "Smoothing", smoothing(observations, 3, states, start_probability, transition_probability, emission_probability)
print "Filtering", filtering(observations[:3], states, start_probability, transition_probability, emission_probability)
実行結果は
Smoothing {'Rainy': 0.85679684480228568, 'Sunny': 0.14320315519771437}
Filtering {'Rainy': 0.86342066067036916, 'Sunny': 0.1365793393296309}
['walk', 'shop', 'clean', 'shop', 'walk']という観測列があったときの3日目(cleanをした日)のスムージングの結果とフィルタリングの結果を表している.フィルタリングでは4日目にshopして5日目にwalkしたという情報も使っているので若干Rainyの確率が下がっている.

ちなみに,4日目も5日目もcleanだった場合(観測列が['walk', 'shop', 'clean', 'clean', 'clean'])の3日目の推定結果は
Smoothing {'Rainy': 0.90669272213214924, 'Sunny': 0.093307277867850785}
Filtering {'Rainy': 0.86342066067036916, 'Sunny': 0.1365793393296309}
となり雨の確率が上がる.

4日目も5日目もwalkだった場合は(観測列が['walk', 'shop', 'clean', 'walk', 'walk'])の3日目の推定結果は
Smoothing {'Rainy': 0.78605072114831254, 'Sunny': 0.21394927885168744}
Filtering {'Rainy': 0.86342066067036916, 'Sunny': 0.1365793393296309}
となり雨の確率は下がる.

July 27, 2010

Pythonで隠れマルコフモデルのFilteringの例

http://en.wikipedia.org/wiki/Viterbi_algorithm
の天気の例で使えるFiltering。

隠れマルコフモデルの例
隠れマルコフモデルの例 その2

フィルタリング
  • 現在までのすべての観測があるときに,現在の状態を推定する.
  • i.e. P(Xt|Y0:t)を求める.
P(Xt|Y0:t)をガリガリ式変形する(マルコフ性,ベイズ,周辺化でごにょごにょする)と,
が得られる.P(Xt|Xt-1)は遷移確率.P(Yt|Xt)は出力確率.cは正規化項.で,再帰的にP(Xt|Y0:t)を求める.以下実装.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 状態変数
states = ('Rainy', 'Sunny')

# 観測列
observations = ['walk', 'shop', 'clean']

# 初期確率
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
 
# 遷移確率
transition_probability = {
   'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
   'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
   }

# 出力確率 
emission_probability = {
   'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
   'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
   }

# Forward Algorithm
def forward(y1, prior, states, trans_p, emit_p):
    post = {}
    for x1 in states:
        post[x1] = emit_p[x1][y1] * sum([ trans_p[x][x1] * prior[x] for x in states ])
    s = sum(post.values())
    for k,v in post.items():
        post[k] = v/s
    return post

# Filtering
def filtering(observations, states, start_p, trans_p, emit_p):
    prior = start_p
    T = len(observations)
    for t in range(T):
        post = forward( observations[t], prior, states, trans_p, emit_p )
        prior = post
    return post

print filtering(observations, states, start_probability, transition_probability, emission_probability)

上記の実行結果は

{'Rainy': 0.86342066067036916, 'Sunny': 0.1365793393296309}

つまり, walk→shop→clean という観測列があったら3日目の天気は雨が86%,晴れが14%だよっ,ということ.

March 15, 2009

PCでもラジオ講座が聴ける!

2009年度からほとんどのNHKラジオ講座がPCで聞けるらしい。

PCでもラジオ講座が聴ける!
4月6日(月)午前10時から、ほとんどのラジオ講座(新作)がPCでも聴くことができるようになります。
今、音声配信が行われている入門ビジネス英語や実践ビジネス英語と同じく、放送の1週遅れで1週間掲載されます。
詳細はこちら


http://www.nhk.or.jp/gogaku/

January 14, 2009

隠れマルコフモデルの例 その2

隠れマルコフモデルの例のつづき。

さて、たとえば、友人が初日に「散歩」二日目に「買い物」三日目に「掃除」という順で行動したら、その観測結果が得られる確率はいくらでしょうか、そして、このような観測結果が得られたとき三日間の天気はどのようであったでしょうか。前の疑問に対しては前向きアルゴリズム、後の疑問についてはビタビアルゴリズムを利用できます。(観測された事象系列を結果として生じる隠された状態の最も尤もらしい並びをビタビ経路と呼びます。)これらは、同じコードで実装することができます。以前のエントリーと同様、状態遷移図は次のように書けるとします。


まずアルゴリズムを理解するために初日に「散歩」したという情報のみがある場合を考えます。
初日の状態確率は(添字は何日目かを表すとします)

Pr(雨0)=0.6, Pr(晴れ0)=0.4

初日「雨」で「散歩」する確率は

Pr(雨0,散歩)=Pr(雨0)*Pr(散歩|雨0)=0.6*0.1=0.06

このとき次の日「雨」の確率は

Pr(雨0,散歩,雨1)=Pr(雨0,散歩)*Pr(雨1|雨0)=0.06*0.7=0.042

同様に初日「晴れ」で「散歩」して次の日が「雨」の確率は

Pr(晴れ0,散歩,雨1)=0.4*0.6*0.4=0.096

つまり初日に「散歩」して次の日が「雨」であるとき

Pr(散歩,雨1)=Pr(雨0,散歩,雨1)+Pr(晴れ0,散歩,雨1)=0.042+0.096=0.138

となります。Pr(雨0,散歩,雨1)<Pr(晴れ0,散歩,雨1) であることから、「晴れ→雨」であった可能性が高い、ということがわかります。

二日目が「晴れ」である場合についても計算すると「雨」「散歩」「晴れ」は

Pr(雨0,散歩,晴れ1)=0.6*0.1*0.3=0.018

「晴れ」「散歩」「晴れ」は

Pr(晴れ0,散歩,晴れ1)=0.4*0.6*0.6=0.144

つまり「散歩」して次の日が「晴れ」になるとき

Pr(散歩,晴れ1)=0.018+0.144=0.162

となり、また「晴れ→晴れ」でありそうだということがわかります。

これらを併せて考えれば、「散歩」をする全体確率は

Pr(散歩)=0.138+0.162=0.3

このときビタビ経路は「晴れ→晴れ」となります。

では初日に「散歩」、二日目に「買い物」した場合はどうなるでしょう。全体確率とビタビ経路を求めます。
初日に「散歩」したとき、二日目の「雨」である確率は0.138、「晴れ」である確率は0.162であるとわかっています。
また、「雨」に至るまでの尤もな経路は「晴れ→雨」、「晴れ」に至るまでの尤もな経路は「晴れ→晴れ」だとわかっています。


(つづく?)

Viterbi algorithm わかりやすくなってる!!!
→ 実装(コピペ)

December 23, 2008

Sansa C240をMSCモードでつなぐ

  1. 電源をオフ(電源ボタン長押し)
  2. HOLDをオン
  3. 巻き戻しボタン(|<<)を押しながらUSB接続

ファームウェアは03.02.05。
ファームウェアのダウンロードは http://forums.sandisk.com/sansa/board?board.id=c200 のc200 version2 Latest Firmware Installation Instructionsから「AMERICAS & PACIFIC REGION - 3.02.05a for Americas」。MSCモードでつないで解凍したC200PA.BINを突っ込んで再起動。

ファームウェアアップデータを利用する場合にもMSCモードでPCに接続する。
ファームウェアアップデータ http://www.sandisk.com/Retail/Default.aspx?CatID=1376

マニュアル http://www.sandisk.com/Retail/Default.aspx?CatID=1446

RockBoxにも対応!

October 11, 2008

docomoからsoftbank、auへ絵文字変換の対応

au、ソフトバンク、ディズニー・モバイル、イー・モバイル、ウィルコム、Yahoo!メール、Gmail、au oneメールに絵文字入りのiモードメールを送ると、自動的に他社の類似した絵文字に変換されます。ウィルコム、Yahoo!メール、Gmail、au oneメールへは、ドコモの絵文字がそのまま表示されます。

http://www.nttdocomo.co.jp/service/mail/imode_mail/function/emoji_convert/

追記 2009/8/9
http://www.nttdocomo.co.jp/service/communication/imode_mail/function/emoji_convert/

追記 2010/12/26
auから
http://www.au.kddi.com/emoji/pdf/taiohyo.pdf

ソフトバンクから
http://broadband.mb.softbank.jp/service/3G/mail/pictogram/convert06.pdf

July 12, 2008

隠れマルコフモデルの例

隠れマルコフモデルの例 その2
Pythonで隠れマルコフモデルのFilteringの例
Pythonで隠れマルコフモデルのSmoothingの例

隠れマルコフモデルとは、システムがパラメータのわからないマルコフ性を持つとする確率モデルです。マルコフ性とはその過程の将来状態の条件付き確率分布が、現在の状態のみにより決まり、過去のどんな状態にもよらないという特性のことです。ここではこのモデルの例を記します。

ある友達が遠くに住んでいて、毎日何をしたかをあなたに電話で話します。友達は「散歩」「買物」「掃除」の3つのことにしか関心がありません。友達が何をするかはもっぱらその日の天気で決めます。あなたは友達が住んでいるところの天気の明確な情報は持っていません。でも、どんな傾向があるかは知っています。友達が日々電話で話す出来事に基づいて、友達が住んでいるところの天気を推定してみましょう。

天気は離散マルコフ連鎖に従うと考えます。たとえば今日雨だったら明日晴れの確率は30%、雨の確率は70%といったように。天気には「雨(Rainy)」「晴れ(Sunny)」の2つの状態があるとします。ただし、これらを直接観測することはできません。すなわち、これらの状態は『隠れ(hidden)』ています。友達はその日の天気に従って「散歩(walk)」「買い物(shopping)」「掃除(cleaning)」のいずれか1つだけ行動をとります。友達はその行動を教えてくれるので、これらは観測(observations)となります。この全体のシステムは隠れマルコフモデル(HMM; a hidden Markov model)的となります。

あなたはこのエリアの一般的な天気の傾向と友達は平均としてどのような行動をとるかということは知っています。言い換えれば、HMMの変数は分かっているということです。Pythonを用いてこれらは次のように表せるとします。
states = ('Rainy', 'Sunny')
observations = ('walk', 'shop', 'clean')
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
transition_probability = {
    'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
    'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
    }
emission_probability = {
    'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
    'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
    }

状態遷移図で表すと下図のようになります。


start_probability (初期確率)は友達が最初に話したときのHMMにおける信念(breif)を表します(知っているのはちょっと雨が降りやすいっていうことだけ)。ちなみにこの確率分布は定常状態ではありません。ここで与えられた遷移確率に従うとすれば、定常状態ではだいたい {'Rainy': 0.571, 'Sunny': 0.429}となります(→遷移行列の固有ベクトル)。

transition_probability (遷移確率)はマルコフ過程においてどのように天気が変化するかということを表します。この例では、もし今日「雨」だったら明日「晴れ」になる確率は30%しかないということを示します。

emission_probability (出力確率)は、ある天気のときに友達はどんな行動をとるかということを表します。もし「雨」だったら50%の確率で「掃除」をする、もし「晴れ」だったら60%の確率で「散歩」をするということを示します。

さて、たとえば、友人が初日に「散歩」二日目に「買い物」三日目に「掃除」という順で行動したら、その観測結果が得られる確率はいくらか、そして、このような観測結果がえられたとき三日間の天気はどのようであったか、ということが疑問になります。


http://en.wikipedia.org/wiki/Hidden_Markov_model
http://en.wikipedia.org/wiki/Viterbi_algorithm


(つづく)
隠れマルコフモデルの例 その2

(隠れマルコフモデルを用いた状態推定の例)