タグ

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

  • 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

    はじめに ちょっと、高次元特徴空間での2つの文字列の像の内積である文字列カーネルで遊んでみる。 文字列カーネルを類似度として使いたい。遊びなので、数式はちゃんと追ってない、、、 文字列カーネル 文字列に対するカーネル カーネルKは、入力空間Xから特徴空間Fへの写像φについて、x,y∈Xに対してK(x,y)=<φ(x),φ(y)>を満たす関数のこと 2つの文字列の距離的なものを考えるのに、共通する部分列や部分文字列を考えたもの いろんな考え方ができるので、いろんなものが存在する 部分列と部分文字列の違い 部分列(Subsequence) 記号列に対して、「並び」だけを保持した部分的な記号列 「abcde」に対して、「abd」や「be」や「bcde」など 長さがkの部分列は「k-merの部分列」という 部分文字列(Substring) 記号列に対して、「隣接性」と「並び」を保持した部分的な記号

    文字列カーネルで遊ぶ - Negative/Positive Thinking
    KinjouJ
    KinjouJ 2013/04/07
  • ウェーブレット木を試す - Negative/Positive Thinking

    はじめに 巨大な文字列でも高速にクエリ処理できる噂の木を、挙動を確認するため作ってみた。 コード アルファベット(a〜z)の文字列を扱う場合 完備辞書の操作が愚直、ビット列がvector を参考にしたけど、2か所間違ってる? #include <iostream> #include <vector> #include <queue> #include <cmath> //top_kのためのタプル struct ST { int t; size_t st, en; ST(int t, size_t st, size_t en):t(t),st(st),en(en){} }; bool operator<(const ST& a, const ST& b){ return (a.en-a.st) < (b.en-b.st); } //アルファベット([a-z]+)用のウェーブレット木 cla

    ウェーブレット木を試す - Negative/Positive Thinking
  • CRFを試す - Negative/Positive Thinking

    はじめに 条件付き確率場(Conditional Random Fields)を実装してみた。 の式導出がわからなくて、夜な夜なmac book airを涙で濡らしながら書いたので、あやしい。 説明 基的に「言語処理のための機械学習入門」のの通りに書いた(つもり、、、) すごく自信ない、勉強用 ダミーラベルのB、EはそれぞれBOS、EOS φ(x,yt,yt-1)ってなってるけど、とりあえずφ_i(xt,yt,yt-1)を素性として利用(「単語」と「その品詞」と「その一つ前の単語の品詞」) 最急勾配法 L2正則化 forward-backwardの部分は何もやってない ちなみに式導出は、上記ののP.155の真ん中あたり 補足説明 : http://www.lr.pi.titech.ac.jp/~takamura/pukiwiki/index.php?%CA%E4%C2%AD%C0%

    CRFを試す - Negative/Positive Thinking
  • Predictive Search - Negative/Positive Thinking

    はじめに 先日作ったDouble ArrayにPredictive Searchを追加してみた。 Predictive Searchとは Common Prefix Searchは、入力文の長さまでで共通の接頭辞を持つ部分文字列を列挙した 入力文が「今日は晴れ」なら「今」「今日」「今日は」...が登録されているかを探す Predictive Searchは、入力文を接頭辞に持つ登録されている文字列を列挙する 入力文が「今日は」なら「今日は晴れ」「今日は終わり」など登録されているものを探す Trieで入力文の最後までたどったら、そのノードの子ノードを巡って登録されている文字列を探す 幅優先探索 深さ優先探索 など コード 以下のコードをdouble_arrayクラスに追加 double_arrayクラス:http://d.hatena.ne.jp/jetbead/20111019/13190

    Predictive Search - Negative/Positive Thinking
    KinjouJ
    KinjouJ 2011/10/28
  • 1