タグ

ブックマーク / jetbead.hatenablog.com (9)

  • Inside-Outsideアルゴリズムを試す - Negative/Positive Thinking

    はじめに 確率文脈自由文法での生成規則の適用確率の推定アルゴリズムで紹介されている「Inside-Outsideアルゴリズム」について、Webで検索してみても、最尤導出の構文木や内側確率の計算例などはあっても、外側確率や生成確率の推定などまで計算例を書いてくれているのはなさそうだったので、手計算確認用にプログラムを書いた。 Inside-Outsideアルゴリズムとは 内側・外側アルゴリズム 確率文脈自由文法の生成規則(チョムスキー標準形)の確率値をコーパスを求める際に、内側確率βと外側確率αを導入することで効率よく求められる 隠れマルコフモデルにおける前向き・後ろ向きアルゴリズムに似た感じ 内側確率 : 非終端記号Aから終端記号列w_i^jが生成される確率 外側確率 : 導出中に出現するAについて、Aが支配しているw_i^j以外の両側の終端記号列w_1^{i-1}とw_{j+1}^Nが現

    Inside-Outsideアルゴリズムを試す - Negative/Positive Thinking
  • AdaDeltaを試す - Negative/Positive Thinking

    はじめに 勉強会で、学習率を改善(自動調整)する事で学習時間を短縮し、ファンタジスタドールを見る時間を多く確保できる事が示されていた。 AdaGrad等をさらに改良したらしいAdaDeltaがあるようなので、ロジスティック回帰に適用してみた。 AdaDeltaとは M. D. Zeiler, ADADELTA: AN ADAPTIVE LEARNING RATE METHOD http://www.matthewzeiler.com/pubs/googleTR2012/googleTR2012.pdf 学習率を自動調整する方法の一つ 他の関連手法の問題点等を改良 過去すべての勾配を考慮→直近の勾配だけを考慮したいので、指数関数的に減衰するように考慮 グローバルな学習率を指定→second order methodsの特性を持つように、パラメータの変化について直近のパラメータの変化から計算し

    AdaDeltaを試す - Negative/Positive Thinking
  • NBSVMを試す - Negative/Positive Thinking

    はじめに S. Wang & C. D. Manning, Baselines and Bigrams: Simple, Good Sentiment and Topic Classificatioin Naive Bayes素性を利用したSVM(NBSVM)なるものを試してみる。 SVM with NB features(NBSVM) Log-count ratio r = log( (p / ||p||_1) / (q / ||q||_1) ) 正例カウントベクトル p = α + Σ_{i:y_i=1} f_i 負例カウントベクトル q = α + Σ_{i:y_i=-1} f_i f_i : 各事例iにおける素性ベクトル α : スムージング用パラメータ モデル w' = (1-β) * w~ + β * w w~ : ||w||_1 / |V| β : 補間パラメータ(0〜1)

    NBSVMを試す - Negative/Positive Thinking
  • 編集距離で遊ぶ - Negative/Positive Thinking

    はじめに 簡単な例としてよく出てくる「編集距離」を使って、英単語の修正を試してみる。(編集距離が小さいものを列挙するまで) dpができなすぎるので、「dpやるだけ」って言えるようになりたい。 編集距離とは ある文字列sからある文字列tへ、文字の削除、挿入、置換などの操作をするとき、最小の操作回数(または最小操作コスト) dp[i][j] := s[0..i-1]からt[0..j-1]にするのにかかる最小操作回数(または最小操作コスト) さまざまな変形や拡張が研究されてる 近似文字列照合 許可する操作による違い 編集距離(Levenshtein distance) 挿入、削除、置換 Damerau distance 挿入、削除、置換、隣接文字同士の入替 Longest common subsequence distance 挿入、削除 ハミング距離(Hamming distance) 置換の

    編集距離で遊ぶ - Negative/Positive Thinking
  • 単語の数学的表現メモ - Negative/Positive Thinking

    はじめに 単語をベクトルや確率分布などの数学的表現で扱いたい場合があったりする。 しかし、「どのようなベクトル・確率分布にすべきか?」などはタスクに依存したりして、自明じゃない。 たくさんあって、派生や新しいものもどんどんでていると思うので、どんなものがあるか調べたかぎりメモ。 One hot表現 各次元が「その単語か否か」を表すベクトルで表現 次元の大きさ=ボキャブラリ数 例: スカイツリー = (「船」か否か, 「スカイツリー」か否か, ... ) = (0,1,0,...) 素性のどれか1つしか1にならなくてスパースネスの問題がでる 未知語はゼロベクトルになってしまう 文字nグラムによる表現 単語の表層から得られる情報を利用 単語に出現している文字nグラムを利用 カタカナ語とか有効そう 例: スカイツリー = (「スカ」の出現回数, 「カイ」の出現回数, 「イツ」の出現回数, 「アア

    単語の数学的表現メモ - Negative/Positive Thinking
  • ナップサック問題として複数文書要約を解くを試す - Negative/Positive Thinking

    はじめに 複数文書要約をナップサック問題として解く、という話を聴いて、簡単に試せそうなのでやってみる。 手法 西川ら「冗長性制約付きナップサック問題に基づく複数文書要約モデル」 https://www.jstage.jst.go.jp/article/jnlp/20/4/20_585/_pdf 上記の論文中で紹介されている「動的計画ナップサックアルゴリズム」を参考に。 (論文で提案されている手法ではないことに注意) コード #include <iostream> #include <vector> #include <map> #include <sstream> class KPSummary { // T[i][k] := 文iまでで最大要約長がkのときの最適解値 // U[i][k] := 経路復元用(文iを利用したかどうか) std::vector< std::vector<int

    ナップサック問題として複数文書要約を解くを試す - Negative/Positive Thinking
  • 疎行列の格納方式メモ - Negative/Positive Thinking

    はじめに 巨大だけどほとんどの要素がゼロであるような疎行列は、そのまま保持するより、要素がゼロじゃないところだけをうまく保持する事でメモリや計算量を減らせたりする。 扱う行列のタイプによって、効率のよい形式がいくつかあるようなので代表的なものをメモしておく。 Coodinate(COO) Format 非ゼロ要素の(row indices, column indices, value)を要素数分持たせる形式 非ゼロ要素が散らばっている場合に有利 0 4 0 0 2 0 0 0 1 を row 0 1 2 column 1 1 2 value 4 2 1 のように保持する。 compressed sparse row(CSR) Format / compressed sparse column(CSC) Format Coodinate Formatにおいて、左から右、上から下へ順番に要素を

    疎行列の格納方式メモ - Negative/Positive Thinking
    skozawa
    skozawa 2013/11/07
  • TWCNB分類器を試す - Negative/Positive Thinking

    はじめに テキスト分類でよく使われるNaive Bayesにはいくつかの厳しい仮定や条件があり、それによって性能が落ちてしまっている。 経験則をいれたりして性能を向上させたTWCNB分類器を試してみる。 多項モデルによるNaiveBayes l_MNB(d) = argmax_c{ log P(c) + Σ_w{f_w * log P(w|c) } } l_MNB(d) : 多項モデルでの文書dの予測クラスラベル P(c) : クラスcである確率 f_w : 文書での単語wの出現頻度 P(w|c) : クラスcでの単語wの出現確率 P(w|c)の推定値=(N_cw + α_w) / (Σ_w {N_cw} + 単語の種類数) N_cw : クラスcで単語wが出現する訓練文書数 α_w : パラメータ(=1) 【メモ】P(c)の推定値=(N_c + α_c) / (Σ_c {N_c} + ク

    TWCNB分類器を試す - Negative/Positive Thinking
  • くさいセリフ判定 - Negative/Positive Thinking

    はじめに くさいセリフを恋人につぶやいてドン引きされてしまう問題を自然言語処理の力で解決するため、くさいセリフかどうかを判定するプログラムを試してみる。 , -──- 、 /::::::::::::::    ::\ /:::::::::::        ::∨ト、        こいつはくせえッー! ::::::::::          :: レ'ノ ::::::::::::::   恋人   ::: レ'⌒ヽ     ゲロ以下のにおいが ヽ-───i===i─-}ァ'  ノ    プンプンするぜッ─────ッ!! 、` ー-===-゚---゚==‐' / 、`¨フ>;''ニニゞ,;アニニY´; )     こんな奴には出会ったことが _、;;)¨´,ニ=゚='" ,.ヘ=゚:く {ッリ'        ねえほどなァ────ッ i1(リ        r;:ドヽ K ヾ=、    

    くさいセリフ判定 - Negative/Positive Thinking
  • 1