タグ

algorithmとnlpに関するmoozのブックマーク (15)

  • エイホ–コラシック法 - Wikipedia

    エイホ–コラシック法(英: Aho–Corasick algorithm)とは、1975年にアルフレッド・エイホと Margaret J. Corasick が発見した文字列探索アルゴリズムである[1]。 エイホ–コラシック法は、入力テキストについて有限の文字列群(辞書)の各要素を探す辞書式マッチングアルゴリズムの一種である。全パターンのマッチングを一斉に探索するため、そのアルゴリズムの計算量はパターン群の長さに対しても対象テキストの長さに対しても線形であり、さらに見つかったマッチングの数に対しても線形である。全てのマッチングを検出するため、パターン群にサブ文字列があれば、重複して検出される点に注意されたい(つまり、辞書が a, aa, aaa, aaaa で、入力テキストが aaaa の場合など)。 大まかに言えば、このアルゴリズムはトライ木を構築し、サフィックス木的に文字列(例えばab

    エイホ–コラシック法 - Wikipedia
    mooz
    mooz 2010/10/17
    文字列を一度スキャンするだけで, 辞書中にある全ての単語を抜き出せる.
  • スペル修正プログラムはどう書くか

    Peter Norvig / 青木靖 訳 先週、2人の友人(ディーンとビル)がそれぞれ別個にGoogleが極めて早く正確にスペル修正できるのには驚くばかりだと私に言った。たとえば speling のような語でGoogleを検索すると、0.1秒くらいで答えが返ってきて、もしかして: spelling じゃないかと言ってくる(YahooMicrosoftのものにも同様の機能がある)。ディーンとビルが高い実績を持ったエンジニアであり数学者であることを思えば、スペル修正のような統計的言語処理についてもっと知っていて良さそうなものなのにと私は驚いた。しかし彼らは知らなかった。よく考えてみれば、 別に彼らが知っているべき理由はないのだった。 間違っていたのは彼らの知識ではなく、私の仮定の方だ。 このことについてちゃんとした説明を書いておけば、彼らばかりでなく多くの人に有益かもしれない。Google

    mooz
    mooz 2010/07/12
    スペル修正プログラム. 編集距離.
  • 動的計画法は再帰で表せ

    動的計画法の説明は常に再帰関数で書き表すことにしています.いやゆるメモ化再帰です.参照透過な関数は,同じ引数に対して同じ値を返すので,保存しておけばいいという感覚です.計算量の見積もりも簡単で,引数の異なり数に関数中のループの上限をかければおしまいです.特に再帰で書くことに慣れていれば自明に書けますし,テーブルを使ったDPと違って,ループの順番を意識する必要がありません.このテクニックは学部時代に@ohkuraに教えてもらいました.関数型言語に触れた今でこそ当たり前に見えますが,当時は目から鱗だったのを覚えています. メモ化再帰と不動点に関する@kinabaさんの日記や,プログラミングコンテスト的には@chokudaiさんの記事が参考になります. 今更ですが,ちょっと例で説明します.フィボナッチ数を計算する関数fib(x)は再帰式で,fib(x) = fib(x - 1) + fib(x

  • suffix array

    更新履歴 2004/01/07  O(N) 構築アルゴリズム三種追加(Ko &Alulu, Kim & al., Karkkainen & Sanders) Suffix Arrayは、最近注目を集めているデータ構造です。その理由として、 (1)大規模なデータに対して、高速に検索、情報抽出を行うことができる (2)BWTとしてデータ圧縮に用いることができる。 ことが挙げられます。(1)に関しては自然言語処理において、膨大な量のコーパスから情報(例えば、単語の出現回数など)を調べるときににSuffix Arrayを用いると非常に高速に求めることができます。 膨大な量のコーパスに基づいた自然言語処理が盛んになってきている今、Suffix Arrayが注目を集めています。 また、ゲノム情報を調べるバイオインフォマティクスにおいても、ここの配列と似ている部分(例えばCCAG)を調べるといった場合

  • Top-k文書列挙問題 - DO++

    いろいろとありまして去年読んだ論文で面白かったものランキングとか書けなかったのが残念ですが、もしあげるとしたら次の論文は入れると思います(知ったのは年明けだったけど)。 "Space-Efficient Framework for Top-k String Retrieval Problems", FOCS 2009, Wing Kai Hon, Rahul Shah and Jeffrey Scott Vitter (pdf) 扱っているのは次のような問題です(説明のため来のと言い換えています) n個の葉からなる木が入力として与えられ,各葉には色(1以上d以下の整数とします)が与えられています. この時、木中の任意の節点と正整数kがクエリとして与えられたときに、その節点の子孫の中で出現回数が大きい色を順にk個答えよという問題です。 簡単に思いつくのは,各節点に適当な個数(d)の答えをあ

    Top-k文書列挙問題 - DO++
  • NLP2010 言語処理学会チュートリアル - DO++

    今日から開催されている言語処理学会のチュートリアルで ”超高速テキスト処理のためのアルゴリズムとデータ構造” というタイトルで発表させていただきました。 チュートリアル資料はこちら(pdf)です。(出典などは適宜追加します) 今までいろいろなところで話してきた、オンライン学習、文字列、疎ベクトルデータ構造を最新の話を追加して、さらに乱択化(Hash Kernel, 乱択化SVD)を解説しています。 発表自体は途中でブルースクリーンが出るということもありましたが、なんとか終えられてよかったです。 これに付随していろいろツールを公開する予定だったがまにあわなかった。そのうち公開します

    NLP2010 言語処理学会チュートリアル - DO++
    mooz
    mooz 2010/03/09
    ”超高速テキスト処理のためのアルゴリズムとデータ構造
  • tf–idf - Wikipedia

    情報検索の分野において、tf–idf (または、 TF*IDF、TFIDF、TF–IDF、Tf–idf)は、term frequency–inverse document frequencyの略であり、コーパスや収集された文書群において、ある単語がいかに重要なのかを反映させることを意図した統計量(数値)である[1]。また、tf-idfは情報検索や、テキストマイニング、ユーザーモデリング(英語版)における重み係数(英語版)にもよく用いられる。ある単語のtf-idfの値は文書内におけるその単語の出現回数に比例して増加し、また、その単語を含むコーパス内の文書数によってその増加が相殺される。この性質は、一般にいくつかの単語はより出現しやすいという事実をうまく調整することに役立っている。今日、tf-idfはもっとも有名な語の重みづけ(term-weighting)手法である。2015年に行われた研究

    mooz
    mooz 2010/02/28
    文章中の特徴的な単語(重要とみなされる単語)を抽出するためのアルゴリズム
  • Alcor の Abbreviation Scoring - steps to phantasien(2009-09-12)

    同僚の生産性ツール愛好家が熱に浮かされて言った. "QuickSilver の検索がすごいんだよ!" どう凄いのかというと, たとえば "Skype を検索するのに <sp> でいい!" らしい. それは凄いのかも. 私もいちおう QuickSilver を使っているけれど, 素敵機能の類はまったく活用していない. だいたい私の使うアプリケーションはどれも一文字で特定できる. Firefox, Emacs, iTerm, Activity Monitor... そういえば iTunes は iTerm と被ってる. ためしに <iu> と打ってみたら iTunes にマッチする. なんとなく凄い気がしてきた. 同僚はこのアルゴリズムが気になるらしい. 編集距離の仲間かとも思ったけれど, 違う気がする. とりあえずぐぐってみたところ, QuickSilver は 2007 年に オープンソー

    mooz
    mooz 2009/11/30
    Quick Silver の素敵マッチャアルゴリズム。
  • Scheme で Alcor の Abbreviation Scoring - 月の塵

    Schemevia Alcor の Abbreviation Scoring - steps to phantasienQuickSilver は使ったことがないのだけれどアルゴリズムが気になったので実装してみた。 Ruby 版からの翻訳で、原版は読んでいない。 アルゴリズムコードだけだとよくわからなかったので、自然言語で書き出してみた。文字列 str = c0 c1 ... cn に対するパターン pat = p0 p1 ... pm のスコア score(str, pat) を次のように定義する。n m のとき score(str, pat) = 0m = 0 のとき score(str, pat) = 0.9 それ以外の場合、 0 ≤ l ≤ m なる l について、 初期値 l := m として l を減少させながらスコアを求める l = 0 のとき、 score(str, pat

    mooz
    mooz 2009/11/30
    Quick Silver のマッチャアルゴリズム。
  • Double-Array

    ダブル配列( Double-Array )は, トライ( Trie )のデータ構造の一種であり, 小さい辞書で高速に検索できるという特長を持っています. 実際に,茶筌( ChaSen )や 和布蕪( MeCab )などの 形態素解析器で利用されているという実績があります. ダブル配列では,配列を使ってトライを表現します. 配列の各要素が BASE, CHECK という二つの整数を持つので,頭文字をとって配列 BC と呼ぶことにします. 以降の説明では,配列 BC の要素 x の BASE, CHECK を それぞれ BC[x].BASE, BC[x].CHECK と記述します. 通常,BASE, CHECK は個別の配列として紹介されますが, 特に分割して考える必要がないので,このような説明にしました. 基的に,配列 BC の各要素は トライの節と一対一で対応します. そのため,対応する

    mooz
    mooz 2009/10/23
    こいつをがんばって実装してみるか。
  • 編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー

    昨日 最長共通部分列問題 (LCS) について触れました。ついでなので編集距離のアルゴリズムについても整理してみます。 編集距離 (レーベンシュタイン距離, Levenshtein Distance) は二つの文字列の類似度 (異なり具合) を定量化するための数値です。文字の挿入/削除/置換で一方を他方に変形するための最小手順回数を数えたものが編集距離です。 例えば 伊藤直哉と伊藤直也 … 編集距離 1 伊藤直と伊藤直也 … 編集距離 1 佐藤直哉と伊藤直也 … 編集距離 2 佐藤B作と伊藤直也 … 編集距離 3 という具合です。 編集距離はスペルミスを修正するプログラムや、近似文字列照合 (検索対象の文書から入力文字にある程度近い部分文字列を探し出す全文検索) などで利用されます。 編集距離算出は動的計画法 (Dynamic Programming, DP) で計算することができることが

    編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー
    mooz
    mooz 2009/10/19
    Levenshtein 距離。
  • はてなブログ | 無料ブログを作成しよう

    分断された世界 湯西川ダムの堤頂から下流の眺めを、注意深く撮影してみた。すると、まったく異なる二枚の写真を横に並べたように見えるではないか。水面と地面の対比に加えて、同流壁に沿ってスパッと切られた施設の屋根が、不可思議さを伴ってその印象を強化している。近年は世界中…

    はてなブログ | 無料ブログを作成しよう
  • トライ (データ構造) - Wikipedia

    "A", "to", "tea", "ted", "ten", "i", "in", "inn" というキー群によるトライ木 トライ木(英: trie)やプレフィックス木(英: prefix tree)とは、順序付き木の一種。あるノードの配下の全ノードは、自身に対応する文字列に共通するプレフィックス(接頭部)があり、ルート(根)には空の文字列が対応している。値は一般に全ノードに対応して存在するわけではなく、末端ノードや一部の中間ノードだけがキーに対応した値を格納している。2分探索木と異なり、各ノードに個々のキーが格納されるのではなく、木構造上のノードの位置とキーが対応している。 キーが文字列である連想配列の実装構造としても使われる。右図の例では、ノードを表す丸の中にキーが書かれ、連想される値がその下に書かれている。値が書かれていないノードはキー文字列の途中までにしか対応していない。各英単語

    トライ (データ構造) - Wikipedia
  • Latent semantic analysis - Wikipedia

    Latent semantic analysis (LSA) is a technique in natural language processing, in particular distributional semantics, of analyzing relationships between a set of documents and the terms they contain by producing a set of concepts related to the documents and terms. LSA assumes that words that are close in meaning will occur in similar pieces of text (the distributional hypothesis). A matrix contai

    mooz
    mooz 2009/06/08
    キーワードの空間を低次元に変換
  • ベイズを学びたい人におすすめのサイト - download_takeshi’s diary

    ベイジアンフィルタとかベイズ理論とかを勉強するにあたって、最初はなんだかよくわからないと思うので、 そんな人にお勧めのサイトを書き残しておきます。 @IT スパム対策の基技術解説(前編)綱引きに蛇口当てゲーム?!楽しく学ぶベイズフィルターの仕組み http://www.atmarkit.co.jp/fsecurity/special/107bayes/bayes01.html いくつかの絵でわかりやすく解説してあります。 自分がしるかぎり、最もわかりやすく親切に解説してる記事です。数学とかさっぱりわからない人はまずここから読み始めるといいでしょう。 茨城大学情報工学科の教授のページから http://jubilo.cis.ibaraki.ac.jp/~isemba/KAKURITU/221.pdf PDFですが、これもわかりやすくまとまってます。 初心者でも理解しやすいし例題がいくつかあ

    ベイズを学びたい人におすすめのサイト - download_takeshi’s diary
  • 1