サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
jetbead.hatenablog.com
はじめに 確率文脈自由文法での生成規則の適用確率の推定アルゴリズムで紹介されている「Inside-Outsideアルゴリズム」について、Webで検索してみても、最尤導出の構文木や内側確率の計算例などはあっても、外側確率や生成確率の推定などまで計算例を書いてくれているのはなさそうだったので、手計算確認用にプログラムを書いた。 Inside-Outsideアルゴリズムとは 内側・外側アルゴリズム 確率文脈自由文法の生成規則(チョムスキー標準形)の確率値をコーパスを求める際に、内側確率βと外側確率αを導入することで効率よく求められる 隠れマルコフモデルにおける前向き・後ろ向きアルゴリズムに似た感じ 内側確率 : 非終端記号Aから終端記号列w_i^jが生成される確率 外側確率 : 導出中に出現するAについて、Aが支配しているw_i^j以外の両側の終端記号列w_1^{i-1}とw_{j+1}^Nが現
はじめに 勾配ブースティング木の高速化はどうすればいいだろうと調べていたら、arxivで流れているのを見かけたのでメモ。 FastBDT: A speed-optimized and cache-friendly implementation of stochastic gradient-boosted decision trees for multivariate classification https://arxiv.org/abs/1609.06119 https://github.com/thomaskeck/FastBDT Stochastic Gradient Boosted Decision Tree(SGBDT) 勾配ブースティングの各イテレーションで、学習データから非復元抽出でサンプリングしたデータを用いる https://statweb.stanford.edu/~j
はじめに 最近よく見かける「t-SNE」という非線形次元圧縮手法を試してみた。 t-SNEとは t-Distributed Stochastic Neighbor Embedding SNEと呼ばれる次元圧縮手法の問題点を改善した手法 SNEは、「各点間の"ユークリッド距離"を、類似度に相当する"条件付き確率"に変換して低次元にマッピングする手法」のこと 各点について、高次元での確率分布と低次元での確率分布が一致するように低次元での点を探している 確率分布の違いは「カルバックライブラー情報量」で、これを損失関数にして勾配法で低次元の点を求める 低次元での分布に「自由度1のt-分布」を利用する さらに、高速化を行った「Barnes-Hut t-SNE」という手法ではO(n log n)で計算できる http://arxiv.org/abs/1301.3342 詳しい説明は、元論文や紹介記事が
はじめに 検索エンジンのトークナイズ処理の部分で行われている基本処理や工夫を少し調べてみたのでメモ。 トークナイズ処理 「検索クエリ」に対してマッチする「ドキュメント」を高速に検索するためにインデクス(索引)を作成する 本の最後の方にある「用語 - ページ」のような感じで、速く目的の用語が書いてあるページを調べられる インデクスは、日本語の場合文字が連続しているため、「形態素」や「(文字)N-gram」などが使われる 文1「六本木ヒルズに行った」 文2「青山さんから電話があった」 【形態素でインデクスを作成する場合の例】 文1:「六本木ヒルズ」「に」「行く」「た」 文2:「青山」「さん」「から」「電話」「が」「あっ」「た」 【文字2-gram(bigram)でインデクスを作成する場合】 文1:「六本」「本木」「木ヒ」「ヒル」「ルズ」「ズに」「に行」「行っ」「った」 文2:「青山」「山さ」「
はじめに 形態素解析とかの解析時に使うラティス(形態素候補をグラフにしたもの)のうち、1番ベストな解だけが欲しい場合が多いが、2番目以降の解も欲しい場合がある。 N番目までの解を効率よく求める方法があり、使いたいケースが出てきたのに書いてみる。 Nbestとは 解析したときに、スコアが良い順に、第一候補(1best)の解だけでなく、第二候補、第三候補・・・の解が考えられるとき、第N候補までのことをNbestという Nbest解 前向きDP後ろ向きA*アルゴリズム http://ci.nii.ac.jp/naid/110002725063 ラティスにおいて、効率よくNbestを求める方法が提案されている 最初に、1bestを求める方法と同じようにスタートノードからあるノードまでの最小コストhをすべてのノードについて求めておく 1bestの時は、ゴールノードからスタートノードに向かって、最小コ
はじめに https://pycon.jp/2015/ja/proposals/vote/11/ Pycon2015で発表された「Pythonで作って学ぶ形態素解析」で紹介されていた辞書データ構造の「Minimal Acyclic Subsequential Transducer」について、勉強のために書いてみた。 Minimal Acyclic Subsequential Transducerとは Finite State Transducerの一種 Transducerにおいて、initial stateが一つで、同じ入力ラベルを共有する同じ状態からのの遷移が2つ以上なく、各最終状態での最終出力文字列が高々p個のとき、p-subsequentialで、pが整数ならfinitely subsequentialというらしい minimal(状態数が最少)、Acyclic(サイクルが無い)
はじめに プロフェッショナルな「深層学習」本で紹介されているRNNの一種のElman netを書いてみる。 Recurrent Neural Network(RNN)とは 再帰型ニューラルネット ネットワーク内部に内部有向閉路を持つようなニューラルネットの総称 Feedforwardの時は、入力層から出力層へ一方方向 この構造のおかげで、時系列や言語モデル、系列ラベリングなど前の状態を持つような問題に対して考慮できる いろんな種類がある(以下はwikipediaから) Fully Recurrent network Hopfield network Boltzmann machine Simple recurrent network Elman net Jordan net Echo state network Long short term memory(LSTM) network Bi
はじめに Sill et al., Feature-Weighted Linear Stacking, 2009 http://arxiv.org/abs/0911.0460 最近、コンペ上位者の手法としてよく見かける手法「Stacking」の一つについてメモ。 Stacking 複数の機械学習モデルの予測結果をブレンドすることで、さらによい予測結果を得る方法 アンサンブル学習やメタ学習の一種 「学習モデルを一つずつ積み重ねる=スタックする」 一般に2段階で構成され、1段階目は入力に対して各学習モデルが結果を出力、2段階目はその各出力をまとめあげ最終結果を出力 BlendingやStacked generalization、日本語だとスタック汎化、スタッキングと呼ばれたりする http://shindannin.hatenadiary.com/entry/2015/03/13/101945
はじめに 今年の目標にしていた係り受け解析関係の資料について雑多にメモしておく。リンク集。 拾いきれていない、最新の論文まで追えていないので、あとで追加・整理し直す。 Wikipedia http://en.wikipedia.org/wiki/Dependency_grammar 文節単位がよいか、単語単位がよいかの議論 http://togetter.com/li/164400 https://plus.google.com/107334123935896432800/posts/KHoDsDssycf http://plata.ar.media.kyoto-u.ac.jp/mori/research/public/flannery-NLP12.pdf 解析処理について説明している日本語資料 海野, 統計的係り受け解析入門 http://www.slideshare.net/unnon
エイプリルフールネタです:) 見ればわかりますが、30分ぐらいで作ったものなので、言ってることもコードもデータも結構適当です:p はじめに インターネット上で扱われる文書(Twitterや2ch、ニコニコ動画など)には、特殊な用語や言い回しをしているものがあり、ネットの文書を扱う多くの自然言語処理研究者を苦しめています。 一番問題となることは、「これらの特殊な用語や言い回しを含む文を形態素解析すると解析に失敗すること」で、これによってIDFの計算や統計的言語モデルがおかしくなったりしてしまいます。 そこで、「書き手が書きたいことが、ひねくれて、実際に書かれる」という仮説を考え、生成的な確率モデルである「Noisy Channel Model」を用いてモデル化し、書き手が本当に書きたかったきれいな文へ変換することで、自然言語処理に失敗しない文章にすることができるライブラリを作成しました。 今
はじめに 勉強会で、学習率を改善(自動調整)する事で学習時間を短縮し、ファンタジスタドールを見る時間を多く確保できる事が示されていた。 AdaGrad等をさらに改良したらしいAdaDeltaがあるようなので、ロジスティック回帰に適用してみた。 AdaDeltaとは M. D. Zeiler, ADADELTA: AN ADAPTIVE LEARNING RATE METHOD http://www.matthewzeiler.com/pubs/googleTR2012/googleTR2012.pdf 学習率を自動調整する方法の一つ 他の関連手法の問題点等を改良 過去すべての勾配を考慮→直近の勾配だけを考慮したいので、指数関数的に減衰するように考慮 グローバルな学習率を指定→second order methodsの特性を持つように、パラメータの変化について直近のパラメータの変化から計算し
はじめに 文書の数学的表現をするためによく用いられるものに「N-gram」というものがある。 最近ちょっと混乱ので、ちゃんとまとめてみる。 N-gramとは? 「文章などで隣り合うn個のこと」 文書を数学的に扱うために、普通に考え付くのが「その単語がでたかどうか」や「単語とその頻度」などだけど、 それだけじゃないのがn-gram。 n-gramを要素として考えることで、さまざまな文書のベクトル表現ができる(二値ベクトル、頻度ベクトルなど)。 単語n-gram 「this is a pen」という文書が与えられたとき、この文書を分解したい。 以下のように、隣り合うn個の単語を一塊として考えるのがn-gram。 1-gram(unigram) {this, is, a, pen} 2-gram(bigram) {this-is, is-a, a-pen} 3-gram(trigram) {th
はじめに Feature Hashingについて気になったことがあったので試してみた。 Feature Hashingとは Hashing trick ハッシュ関数を使って、素性群をM次元ベクトルにする 一種の次元圧縮 Bag of wordsなどの素性をそのままハッシュ値にすることで、素性とIDのペアの辞書などが必要なくなる スパムフィルタでは、新語やミススペルでフィルタ回避されてしまうと対応すべき語が増え続ける(辞書が大きくなる)問題などに使える ベクトルの作り方 いくつか提案されているが、各素性のhash値を計算してmod Mをとったインデクスの所に入れるものとしては主に2つがあるようなので、メモしておく。 Shiらの方法 Shiら(2009) 値をunsigned sumする φ_i (x) = Σ_{ j:h(j)=i } x_j h : ハッシュ関数 Weinbergerらの方
はじめに 複数のアルゴリズムの結果の有意差検定に使用されていたので、メモ。 より詳細に紹介されているのは以下の論文。 Demsar, Statistical Comparisons of Classifiers over Multiple Data Sets, 2006 http://jmlr.csail.mit.edu/papers/volume7/demsar06a/demsar06a.pdf 1999年から2003年のICMLの論文で使われた検定について調査して、アルゴリズムやデータセットの種類によって使うべき検定方法を紹介している。 Friedman test 対応のある順序尺度の3群以上の平均順位に有意差があるかどうかを検定(ノンパラメトリック検定) repeated-measures ANOVAのノンパラメトリックに相当 帰無仮説(H0) : μ_0=μ_1=…=μ_k (すべ
DSIRNLP#6 10/11にデンソーアイティーラボラトリさんで行われたDSIRNLP#6勉強会で発表させていただきました 聴いていただいた方、ありがとうございました。 勉強会のページ http://partake.in/events/38e416b0-5e64-4bd4-8388-4e19acd0ef97 発表資料 一部、発表時の資料を修正しています 主だって参考にした論文は以下になります Zheng&Webb, Semi-naive Bayesian Classification, 2008 http://www.csse.monash.edu.au/~webb/Files/ZhengWebb08a.pdf No Bayes No Life -Naive Bayesは今でも進化しているようです。- from phyllo 補足(2014/10/12追記修正しました) 質問への回答で、
はじめに 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)
はじめに G. Tsoumakas, I. Katakis, I. Vlahavas., Mining Multi-label Data http://lpis.csd.auth.gr/paper_details.asp?publicationID=290 マルチラベル分類問題について、メモ。 マルチラベル分類問題 1つの事例が、複数のラベル(ラベルの集合)に同時に分類されうる分類問題 例:「ダビンチコード」の記事のカテゴリ→宗教、映画 マルチラベルの教師あり学習では、主に以下のタスクがある マルチラベルクラス分類(multi label classification) ラベルランキング(label ranking) また、マルチラベル学習の方法は、主に2つのグループに分けられる Problem Transformation Algorithm Adaptation シングルラベル問題へ変
はじめに Rousseau et al., Graph-of-word and TW-IDF: New Approach to Ad Hoc IR http://www.lix.polytechnique.fr/~rousseau/papers/rousseau-cikm2013.pdf 文書dのグラフ的表現とそこから計算されるTW-IDFというTermの重み付けについて、メモ。 Graph of Word 文書を重みなし有向グラフで表現 頂点: 各(unique)term 辺: 固定幅(4ぐらい?)の窓内のtermとの共起 辺の向き: termの出現順序(前から後ろ方向のみ) 多重辺にはしない TW-IDF TW-IDF(t,d) = tw(t,d) / (1-b+b*|d|/avdl) * log( (N+1) / df(t) ) tw(t,d): 文書dのgraph of word表
はじめに 簡単な例としてよく出てくる「編集距離」を使って、英単語の修正を試してみる。(編集距離が小さいものを列挙するまで) 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) 置換の
はじめに 単語をベクトルや確率分布などの数学的表現で扱いたい場合があったりする。 しかし、「どのようなベクトル・確率分布にすべきか?」などはタスクに依存したりして、自明じゃない。 たくさんあって、派生や新しいものもどんどんでていると思うので、どんなものがあるか調べたかぎりメモ。 One hot表現 各次元が「その単語か否か」を表すベクトルで表現 次元の大きさ=ボキャブラリ数 例: スカイツリー = (「船」か否か, 「スカイツリー」か否か, ... ) = (0,1,0,...) 素性のどれか1つしか1にならなくてスパースネスの問題がでる 未知語はゼロベクトルになってしまう 文字nグラムによる表現 単語の表層から得られる情報を利用 単語に出現している文字nグラムを利用 カタカナ語とか有効そう 例: スカイツリー = (「スカ」の出現回数, 「カイ」の出現回数, 「イツ」の出現回数, 「アア
はじめに 複数文書要約をナップサック問題として解く、という話を聴いて、簡単に試せそうなのでやってみる。 手法 西川ら「冗長性制約付きナップサック問題に基づく複数文書要約モデル」 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
はじめに WSDM2014(WWW2013,YSS2013,SIGIR2013)のチュートリアルで「EntityLinking」といタスクが紹介されていたので、ちょっと調べてメモしておく。 次元圧縮! Entity Linkingとは テキストに出てくるエンティティ(実体)を識別・決定するタスク 固有名詞抽出は「固有名詞を識別して取り出す」タスクなので、異なる 雑にいうと、KnowledgeBaseと呼ばれる(識別された)エンティティ集合からテキストにでてくるエンティティを決定すること KBにない新しい固有名詞を発見することも含まれたりする(「NIL」として取り扱う) 実際の例 テキスト「東京タワーに行った」 固有名詞抽出 「東京タワー」を取り出す Entity Linking 「東京タワー」が以下のreference(ここではWikipediaのページ)と対応することを決定する http
はじめに 悩み多き年頃なので、進捗ダメです。 KVS見てるときに出てきた、次元圧縮っぽさがあるBloom Filterを試してみる。 Bloom Filterとは 「ある要素が集合に含まれるか否か?」を扱えるデータ構造 要素をそのまま保存せず、ハッシュ値にしたものを配列に保存する アルゴリズム サイズがMの配列A[]を用意し、すべて値を0にしておく 要素の追加 K個の独立なランダムハッシュ関数(0〜M-1を返す)を使い、要素をK個のハッシュ値にする 配列Aでハッシュ値のindexのところを1にする(値がなんであっても) 要素の検索 追加時と同様にハッシュ値にし、すべて1になっていれば、要素が含まれると判断する 他の組み合わせでも1となってしまう組み合わせがあるために、「間違って要素がある、と判断してしまう可能性」がある=偽陽性 MやKを調整する事で、記憶容量と偽陽性のトレードオフを実現でき
はじめに 次元削減せずにはいられない。 0の扱いがいまいちピンとこなかったので、ちょっと調べて試してみた。 Matrix Factorizationとは Netflix Prizeという推薦システム・協調フィルタリングのコンテストで良い結果を残した手法 行列Mを、2つの行列P,Qの掛け算で近似するもの 行列Mが与えられたとき、行列Pと行列Qをそれぞれ見つける ユーザー数m、アイテム数nとして、Mはm*n行列。Pはm*k行列。Qはn*k行列。 行列Mには欠損データが含まれている 行列PとQを求めるために次式を最小化する min Σ_{(u,i)∈κ} (M[u][i] - Q_vec[i]*P_vec[u])^2 + λ(|Q_vec[i]|^2 + |P_vec[u]|^2) κは、既知のM[u][i]が存在する(u,i)のペアの集合 SGDで解を探す場合は以下の反復式になる e_ui :
はじめに 読んでた本に出てきた法則が気になったので、試してみた。 大野の語彙法則 任意の3作品A,B,Cについて、品詞ごとの構成比を計算しておく 名詞の構成比をX_0, x, X_1とし、任意の品詞の構成比をY_0, y, Y_1とする 次の関係式が近似的に成り立つ (y-Y_0) / (Y_1-Y_0) ≒ (x-X_0) / (X_1-X_0) (X_0, Y_0)と(x,y)と(X_1, Y_1)が直線上に並ぶ 原版 もともとは古典作品(万葉集、徒然草、方丈記、枕草子、土佐日記、紫式部日記、讃岐典侍日記、竹取物語、源氏物語)の品詞の構成比に対する法則 名詞、動詞、形容詞、形容動詞、その他 試す 青空文庫から次の8作品について試してみる 注文の多い料理店 銀河鉄道の夜 グスコーブドリの伝記 セロ弾きのゴーシュ こころ 吾輩は猫である 坊ちゃん 風立ちぬ 作品の準備 青空文庫から該当の作
はじめに Deepな話で、簡単に試せそうだったStacked Denoising AutoEncoderを試しに遊んでみる。 あんまり詳しく調べていないので、お遊びレベルという感じで・・・ 注意:下記では「特徴抽出器」として利用する方法を試しています。通常は事前学習として行い、それを初期値に使い、普通にニューラルネットの学習を行うことを指すと思いますが、下記のような特徴抽出器的使い方もありみたいですね(ref.機械学習プロフェッショナルシリーズ「深層学習」pp.72-74)。 Stacked AutoEncoderとは BengioやVinsentによって提案や紹介 AutoEncoderを何層も重ねたもの 各層の学習は、一つ前の隠れ層を入力にAutoEncoderを学習し、出力部分を捨てて次の層を学習する Unsupervised layer-wise pre-training 層の最後
はじめに 日に日に日本語がわからなくなっていっているので、助詞についてメモしておく。 細かい部分は各文法・体系や、使うときの都合によると思うので、ここでは大雑把に。 助詞とは 品詞の一つ 単語の文法的な性質による分類が「品詞」 助詞は、述語について意味関係を表したり、名詞による名詞の修飾・対等関係表現、焦点を当てる、節の主従関係を表すなどする 単独ではほぼ使われず、名詞や動詞などに付いて使われる(助ける品詞) 活用しない付属語 助詞の種類 以下の分類は、いろんな軸がごっちゃになっているので注意。 格助詞 主に、名詞に付く その名詞と述語との意味関係を表す 主体、対象、相手、存在の場所、など 「格助詞+動詞テ形/連用形」「格助詞+名詞+格助詞」「の+名詞+格助詞」形を複合格助詞としたりもする 例 が、(の)、を、に、へ、と、から、より、で、(まで) にとって、について、に対して 連体助詞 主
この記事はCompetitive Programming Advent Calendar Div2013の9日目の記事です。 今年も、競技プログラミングでほとんど役に立たないネタをお送りします。 1:名無しのターゲットさん:2013/12/9(月) 00:25:07 id:jetbead ! | !l |! ! | ! | ! l | ! l |! | !ll |! l |!| !l | ! ! | !l |! ! | ! !ll |! l !| l !ll |! l !| | ! l il i (ヽ======== | |! ! | ! | ! l | l | !| ! l | ! l ノ ̄ノ ̄ノ ̄ノ ̄ノ ̄ノ ある日の競技プログラミング終了直前のやる夫家 |! l |! ノ
はじめに 簡単だけど性能がよく、様々な実装が公開されていてマジでパナいと噂の、ランダムフォレストで遊んでみる。 ランダムフォレストとは Breimanによって発展改良された、複数の相関の低い決定木を組み合わせる集団学習の一つ 詳細な紹介や内容は「参考」を参照 これ自体は、枠組み(フレームワーク)的な感じが強い 単純な場合、以下のようなパラメータがある 決定木の個数 決定木で使用する学習データの割合 決定木の種類 決定木の深さの制限 決定木の各ノードで使用する判別関数・基準 決定木で使用する素性の割合 など 各決定木間の相関が低くなるよう、いろんなところにランダム性を取り入れている 逆に相関が高い場合は、みんな同じような結果を出力しやすいので、みんな間違えてると意味がない また、各決定木は独立しているので、並列処理できる いろんな実装 本家Breimanによる実装(Fortran)、Open
次のページ
このページを最初にブックマークしてみませんか?
『Negative/Positive Thinking』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く