タグ

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

  • Graph of Word、TW-IDFとTFのnormalizationメモ - Negative/Positive Thinking

    はじめに 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表

    Graph of Word、TW-IDFとTFのnormalizationメモ - Negative/Positive Thinking
  • 単語の数学的表現メモ - Negative/Positive Thinking

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

    単語の数学的表現メモ - Negative/Positive Thinking
  • 日猫/猫日翻訳を試す - Negative/Positive Thinking

    はじめに 先日北海道で行われたNLP2014(Neko Language Processing 2014)で最優秀賞だった「ビットペア法を用いた日語-語翻訳アルゴリズム」を試してみました。 ネコ氏の鳴き声を分析したところ特徴的なパターンが見られ、日語とネコ語間の変換ルールを明らかにした事で話題になりました。 アルゴリズムは簡単だったので、これを用いて日ニャー/ニャー日翻訳機を作ってみました。 アルゴリズム 論文によると、日語をビット列にして隣り合うビットのペアを4パターン(ニャ、ニャッ、ニャン、ニャー)の鳴き方にする事で、意思疎通できたそうです。 コード 日語からネコ語へ変換 #!/usr/bin/perl use strict; use warnings; use Encode; use utf8; binmode STDIN, ":utf8"; binmode STDOUT,

    日猫/猫日翻訳を試す - Negative/Positive Thinking
    tnal
    tnal 2014/04/09
  • EntityLinkingメモ - Negative/Positive Thinking

    はじめに WSDM2014(WWW2013,YSS2013,SIGIR2013)のチュートリアルで「EntityLinking」といタスクが紹介されていたので、ちょっと調べてメモしておく。 次元圧縮! Entity Linkingとは テキストに出てくるエンティティ(実体)を識別・決定するタスク 固有名詞抽出は「固有名詞を識別して取り出す」タスクなので、異なる 雑にいうと、KnowledgeBaseと呼ばれる(識別された)エンティティ集合からテキストにでてくるエンティティを決定すること KBにない新しい固有名詞を発見することも含まれたりする(「NIL」として取り扱う) 実際の例 テキスト「東京タワーに行った」 固有名詞抽出 「東京タワー」を取り出す Entity Linking 「東京タワー」が以下のreference(ここではWikipediaのページ)と対応することを決定する http

    EntityLinkingメモ - Negative/Positive Thinking
  • SdAで遊ぶ - Negative/Positive Thinking

    はじめに Deepな話で、簡単に試せそうだったStacked Denoising AutoEncoderを試しに遊んでみる。 あんまり詳しく調べていないので、お遊びレベルという感じで・・・ 注意:下記では「特徴抽出器」として利用する方法を試しています。通常は事前学習として行い、それを初期値に使い、普通にニューラルネットの学習を行うことを指すと思いますが、下記のような特徴抽出器的使い方もありみたいですね(ref.機械学習プロフェッショナルシリーズ「深層学習」pp.72-74)。 Stacked AutoEncoderとは BengioやVinsentによって提案や紹介 AutoEncoderを何層も重ねたもの 各層の学習は、一つ前の隠れ層を入力にAutoEncoderを学習し、出力部分を捨てて次の層を学習する Unsupervised layer-wise pre-training 層の最後

    SdAで遊ぶ - Negative/Positive Thinking
  • ロジスティック回帰で分類を試す - Negative/Positive Thinking

    はじめに そういえばliblinearよく使うのにロジスティック回帰自分で書いた事ないなぁと思ったので、ちょっと書いてみた。 詳しい解説記事 とてもいい感じの連載がされている。 http://gihyo.jp/dev/serial/01/machine-learning L1/L2正則化については以下も参照。 http://www.slideshare.net/guo_dong/logistic-regressionpptx 使用したデータ LIBSVMのページにあるUCIデータセットのa9aを用いた http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/ 学習データ : a9a テストデータ : a9a.t コード 結果でてるのでたぶん合ってる。 #include <iostream> #include <fstream> #inc

    ロジスティック回帰で分類を試す - 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
  • AutoEncoderで遊ぶ - Negative/Positive Thinking

    はじめに 次元圧縮がマイブーム化しているので、最近はやりのAutoEncoderで遊んでみる。 べ、別に深い何かのためにやろうとしてるわけじゃn AutoEncoderとは 入力と出力が近くなるように学習するニューラルネットワーク (枠組みをさすだけでニューラルネットワークに限らないのかも?) 基は、入力層、隠れ層、出力層の3層で構成し、教師信号は入力信号と同じにして学習させる 特徴や内部表現の構成を学習することができる 入力&出力の次元より隠れ層の次元を小さくして構成する 入力セットの圧縮された表現を学習する意味で、(非線形な)次元圧縮器とみなせる AutoEncoderの種類 いくつか種類があるぽい。名前だけメモしておく。 Basic AutoEncoder Regularized AutoEncoder Sparse AutoEncoder Denoising AutoEncode

    AutoEncoderで遊ぶ - Negative/Positive Thinking
  • 逐次確率比検定を試す - Negative/Positive Thinking

    はじめに あらかじめ標サイズを決めるのではなく、十分と判断されるまでダイナミックに判断を繰り返す逐次確率比検定を参考に、 チョコボールの銀のエンジェルの出現確率について判断するとどうなるか試してみる。 逐次確率比検定とは ベイズ統計学の枠組みで、ベイズ更新の機能を通して1つずつ標抽出していきながら同時に検定にも用いる事ができる 逐次決定過程 : 標抽出をするたびに判断を行い、結論がでたと認められるタイミングで停止する過程 行動 action0 : 結論を保留し、標抽出を再度行う action1 : 帰無仮説H1を採択 action2 : 対立仮説H2を採択 尤度比検定(Likelihood Ratio Test) 「尤度比」を検定統計量として行う統計学的検定の総称 尤度比λ=(Π^n_{i=1}{f(Xi|θ1}) / (Π^n_{i=1}{f(Xi|θ2}) 帰無仮説H1 : θ

    逐次確率比検定を試す - Negative/Positive Thinking
  • 標本抽出メモ - Negative/Positive Thinking

    はじめに 大量(または無限)のデータがあっても、人が確認するだとか、1つのデータあたりのなんらかのコストが高い場合、少量のデータを選んで利用する事が多い。(大量に収集されたログデータの分析をするとか、あるプログラムのパフォーマンスを見るために速度を測るとか) しかし、「少量のデータ」の選び方やその妥当性の判断はかなり難しい。用語などメモしておく。 統計的推測 母集団から標を抽出して、その標に対して分析し、母集団について推測すること 統計学や統計的手法を適用する事で、妥当性の判断などが行えるが、適用を間違えると間違った判断を下しかねない 測定量、適用方法、適用手順が適切でないと、母集団と標が大きく異なってしまう 母集団 対象となるデータすべての集まり 有限母集団 : データ数が有限の場合 ログデータ、など 無限母集団 : データ数が無限の場合 プログラムの速度測定結果、など パラメトリ

    標本抽出メモ - Negative/Positive Thinking
  • 語義曖昧性解消メモ - Negative/Positive Thinking

    はじめに 意味を捉えた解析を行うためには、曖昧性のある語の意味を明確にする必要がある。 語義曖昧性解消周りをちょっと調べたので、メモ。 語義曖昧性解消(Word Sense Disambiguation)とは 複数の意味を持つ語(例えば、plantは「植物」「工場」など)が存在する。 語義曖昧性解消は、その語の周辺情報(コンテキストなど)から正しい意味を見つけるタスク。 アプローチ 知識ベース(Knowledge-Based) 辞書やシソーラスデータ、WordNetなどが使える場合 語に関する情報・リソースを使うアプローチ リソース 構造化 シソーラス 辞書(機械処理しやすい、Machine-readable) オントロジー 非構造化 コーパス(タグ付き/タグなし) 連語リソース 語の頻度リスト ストップワード ドメインラベル Leskアルゴリズム 初期の有名なアルゴリズム 注目している単

    語義曖昧性解消メモ - Negative/Positive Thinking
    tnal
    tnal 2013/09/24
  • Random Projectionを試す - Negative/Positive Thinking

    はじめに 言語処理を行う場合、単語数を考えると高次元スパースなベクトルを扱うことが多い。 次元削減を行える手法の一つである、Random Projectionを試してみる。 Random Projectionとは 乱数を要素に持ち、各列ベクトルの大きさが1である行列Rを用意して、行列Xをかけることで次元を落とすことができる X_rp = R * X また、このRの各要素がN(0,1)の正規乱数の場合、各列ベクトル間のユークリッド距離をできるだけ保ったまま、次元削減できることが証明されている この乱数行列Rの作り方として、以下が提案されている Rの各要素r_ijについて、以下の近似を用いる 1/6の確率で、r_ij = sqrt(3) 2/3の確率で、r_ij = 0 1/6の確率で、r_ij = -sqrt(3) 準備 ドキュメント群からcos類似度の近い文書を検索するということを、次元削

    Random Projectionを試す - Negative/Positive Thinking
  • liblinearで文書分類を試す - Negative/Positive Thinking

    はじめに データ整形やスケール調整、パラメータの探索を行うことでどれだけ変わるか気になったので、liblinearを使って文書分類を試してみる。 liblinear http://www.csie.ntu.edu.tw/~cjlin/liblinear/ version 1.93を利用 使用するデータ http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html 「news20」を使用する 20クラス 学習:15935データ、テスト:3993データ 素性数:学習62061、テスト62060 news20.bz2とnews20.t.bz2は、単語IDとTF値のペアっぽい #学習データの各クラスのドキュメント数 $ cut -f1 -d" " news20 | sort |uniq -c | sort -k2 -n

    liblinearで文書分類を試す - Negative/Positive Thinking
  • 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
  • KWICを試す - Negative/Positive Thinking

    はじめに 形態素解析辞書の登録単語の単位や品詞/活用などを考える時は、対象コーパスでその単語がどのような文脈で用いられているか調べたいことが多い。 単純にgrepコマンドやエディタの検索とかで調べればよいけど、検索速度や見やすさの問題があったりする。 KWICという用語索引の共通フォーマットがあり、見やすいのでこれを試しに作ってみる。 KWICとは KeyWord In Contextの略語 普通、辞書の後ろにある索引のような「単語」と「ページ番号」だけのでなく、「単語の前後の文章」を含むような索引のこと KWIC indexは、単語についてソート&アラインメントされた索引リストのことを指す permuted indexとも呼ばれるらしい 1960年にLuhnによってconcordancerが作られたときにできた造語 アプローチ やりたいのは、任意のコーパスについて、 http://cha

    KWICを試す - Negative/Positive Thinking
  • トピックモデルメモ - Negative/Positive Thinking

    はじめに トピックモデルについてメモ。 トピックモデルとは 文書は、何らかの話題について書かれていたりする 「ある文書内に一緒にでてくる単語は、意味的な関連性が強い」など考えられる トピックモデルは、文書から「何らかの話題(=トピック)」を発見するための統計的なモデルのこと トピックモデルのいろいろ Unigram Mixtures ナイーブベイズでクラス数kと各パラメータをEMで繰り返し推定していく http://www.kamalnigam.com/papers/emcat-mlj99.pdf Probabilistic Latent Semantic Indexing(PLSI) 検索技術であった潜在意味解析(LSI,1990年)を確率的に解析、開発された生成モデル(1999年) 各単語ごとに別なトピックから生成されたと仮定する http://cs.brown.edu/~th/pap

    トピックモデルメモ - Negative/Positive Thinking
  • SCWを試す - Negative/Positive Thinking

    はじめに 分類器の決定版(?)的なSoft Confidence Weighted Learningを試してみた。 Soft Confidence Weighted Learningとは 2012年に提案された、各重みを正規分布と考え更新時にその分布が変わるようにしたConfidence Weighted(CW)関係のノイズに強くなった版 オンライン学習 http://icml.cc/2012/papers/86.pdf 詳しい解説記事 http://d.hatena.ne.jp/kisa12012/20120625/1340616659 使用したデータ LIBSVMのページにあるUCIデータセットのa9aを用いた http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/ 学習データ : a9a テストデータ : a9a.t コード 毎

    SCWを試す - Negative/Positive Thinking
  • Locality Sensitive Hashによる類似ベクトル検索を試す - Negative/Positive Thinking

    はじめに 類似性が高いベクトルのハッシュ値が近い値になるようなハッシュ関数を使って、 類似するものを高速に検索することができるので、それを試してみた。 Locality Sensitive Hash 類似するデータが高確率で近い値になる(Locality-Sensitive)ハッシュ関数のこと 高次元データの次元圧縮を行える (P1,P2,r,cr)-sensitiveなHash族とは、 2つの特徴ベクトルp,qについて(P1>P2) ||p-q||P1 ||p-q||>crならPr[h(p)=h(q)] を満たすハッシュ関数h:R^d->U コサイン類似度に対するLSH 2つのk次元ベクトルu,vについて コサイン類似度: u*v / sqrt(|u|*|v|) d個のk次元のランダムベクトルr_iを考え、ハッシュ関数h_i(u)を h_i(u) = 1 (r*u >=0) h_i(u)

    Locality Sensitive Hashによる類似ベクトル検索を試す - Negative/Positive Thinking
  • 時系列解析メモ - Negative/Positive Thinking

    はじめに 時系列解析について、簡単にメモ。 時系列(time series)とは 時間の経過で変動する何かの数値の列 例:気象データ、株価、など 時系列解析は、このデータを統計解析すること 時系列の分類 連続時間・離散時間 時間間隔が連続的か、離散的(1時間おき、とか)か 1変量・多変量 1つの情報だけか、同じ時間の2つ以上の情報が与えられるか 定常・非定常 時間的に変化しない確率モデルの実現値とみなせる(定常)か、そうでないか 弱定常: 分布がl時間(シフト)後と同じになるようなもの 強定常: 分布が時間(シフト)に対して不変になるようなもの ガウス型・非ガウス型 時系列の分布が正規分布に従うか、そうでないか 線形・非線形 線形なモデルの出力として表現できるか、そうでないか 時系列解析の目的 以下のようなことをやりたい。 description 図示や時系列の特徴を簡潔に表現 model

    時系列解析メモ - Negative/Positive Thinking
  • 構文解析メモ - Negative/Positive Thinking

    はじめに 「構文解析」まわりについてちょっと調べたのでメモ。 ただ、資料が少なくて内容が怪しい部分が多い。 構文解析とは 入力された文に対して、文を構成しているそれらの構文構造を同定すること 文法規則が定められたプログラミング言語、正規表現、HTML/XMLなどを解析するために使われている 自然言語では、複数の単語で1つの句を形成したりある単語が別の単語を修飾するなどの現象があるので、文法を考え構文解析することで自然文を解析する 構文解析器(Parser) 構文解析を行う機構・プログラム 文の構造 構造とは、要素同士がなんらかの相互作用によって結びついている集合と見れる 「要素」と「それらがどのように関係しあっているか」が重要 構文木(parse tree) 文の構成要素・修飾関係を表現する木構造 一般に、構文解析は「文を入力」に「構文木を出力」する 直接構成要素分析(immediate

    構文解析メモ - Negative/Positive Thinking
    tnal
    tnal 2012/10/01