自然言語処理
はじめに 「日本」は、「にほん」と「にっぽん」どちらの読み方もできる。 しかし、読み分けが必要な場合も存在する。(東京の日本(にほん)橋と大阪の日本(にっぽん)橋、会社名、など)同型異音語や多義性解消だと、よく周辺文字を素性にして分類問題を解く、 …
はじめに ちょっと、高次元特徴空間での2つの文字列の像の内積である文字列カーネルで遊んでみる。 文字列カーネルを類似度として使いたい。遊びなので、数式はちゃんと追ってない、、、 文字列カーネル 文字列に対するカーネル カーネルKは、入力空間Xから…
はじめに 前から気になっててほっといてた自動要約についてメモ。 文短縮とか試してみたい。 テキスト要約 与えられたテキストをより短いテキストに簡潔にまとめること 要約率 = (要約後の文字数or文数) / (与えらえたテキストの文字数or文数) 要約の過程 以…
はじめに くさいセリフを恋人につぶやいてドン引きされてしまう問題を自然言語処理の力で解決するため、くさいセリフかどうかを判定するプログラムを試してみる。 , -──- 、 /:::::::::::::: ::\ /::::::::::: ::∨ト、 こいつはくせえッー! :::::::::: :: レ…
はじめに 「さぁ、お前の罪の異なり数を数えろ!」と言われたときに使えそうな「HyperLogLog」という異なり数をカウントする方法を教えてもらったので、遊んでみた。 いつもながら論文ちゃんと読んでないので、条件やコード間違ってるかも。。。 HyperLogLog…
はじめに 巨大な文字列でも高速にクエリ処理できる噂の木を、挙動を確認するため作ってみた。 コード アルファベット(a〜z)の文字列を扱う場合 完備辞書の操作が愚直、ビット列がvector 本を参考にしたけど、2か所間違ってる? #include <iostream> #include <vector> #include <queue></queue></vector></iostream>…
はじめに 「構文解析」まわりについてちょっと調べたのでメモ。 ただ、資料が少なくて内容が怪しい部分が多い。 構文解析とは 入力された文に対して、文を構成しているそれらの構文構造を同定すること 文法規則が定められたプログラミング言語、正規表現、HT…
はじめに 形態素解析するとき、最初に用意された辞書だけでは固有名詞などが少なく、うまくいかないことがある。 しかし、名詞は無数に存在し、どんどん新しい言葉がでてくるので、、形態素解析器の辞書に入れておくのが難しい。そこで、ネットにあるデータ…
はじめに オライリーの「入門自然言語処理」に、焼きなまし法を使った教師なし単語分割について書かれていたので、これを試す。 アプローチ 「出現単語数」+「のべ出現単語数」+「入力文の文字数(固定)」=目的関数を最小化 単語の区切り位置を温度によっ…
はじめに 単語の分類法としてよく利用されている「品詞」についてちょっとメモ。 【以下、「基礎日本語文法-改訂版-」(益岡・田窪共著)がベースの文、語、品詞について】 1.文 1-1.文とは 言語表現の基本的な単位 文章や会話は、複数の文の組み合わせにより…
はじめに 世の中には言語モデルを構築するToolkitはたくさんあるということで、簡単に探してみた。 言語モデルツールキット SRILM - The SRI Language Modeling Toolkit http://www.speech.sri.com/projects/srilm/ Palmkit - a statistical language modeli…
12/10にmixiさんで行われたDSIRNLP勉強会で発表させていただきました 聴きにきていただいた方ありがとうございました スライド資料 http://www.slideshare.net/phyllo/ngram-10539181 自然言語処理はじめました - Ngramを数え上げまくる View more presentat…
はじめに 形態素解析器のデコーダ部分を超簡単に書いてみた。 いつも通り速度などは考えずに流れを学ぶために書いているので遅い。。。 あと「辞書の構築(コスト計算)」と「未知語処理」ができればそれっぽいものができそうな予感。 速度の改善などは、doubl…
はじめに 現在よく使われていると思われる確率的言語モデルについて簡単に調べてみたのでメモ。 Ngram言語モデルとは 例えば、「お酒が飲みたい」と「バリウムが飲みたい」という文章があった時に、前者の方がよく聞く文章で、後者はほとんど聞かない文章 上…
はじめに 先日作ったDouble ArrayにPredictive Searchを追加してみた。 Predictive Searchとは Common Prefix Searchは、入力文の長さまでで共通の接頭辞を持つ部分文字列を列挙した 入力文が「今日は晴れ」なら「今」「今日」「今日は」...が登録されている…
はじめに 雑誌に簡単なラティス構築とビタビアルゴリズムについて書かれていたので、参考にしてc++で書いてみた。 実際のコスト値などはいれてない。。。 説明 入力文に対し、部分文字列に対し辞書引きをして、ノードとする エッジは文字列上で隣接している…
はじめに 先日作成したDoubleArrayに共通接頭辞検索機能を追加してみた。 共通接頭辞検索とは ある文字列の接頭辞(「今日のご飯」という文字列なら「今」「今日」「今日の」...)について、それが辞書に含まれるかどうかを検索すること Trie(DoubleArray)やAC…
はじめに MeCabを使うと言っても、辞書には気をつけてなくて、実際MeCabページにおいてある辞書しか使ったことがなかった。しかし、この辞書は更新履歴(2007年!!)が古かったりして保守されているわけではない。MeCabで使えるほかの辞書はないかと思って調…
はじめに 超大規模なテキストデータでのN-gram統計を取る場合、そもそもデータがメモリにのらなくてSuffixArrayを使ったカウントも無理だったりする。近似値でよい場合、効率的な方法があると知ったのでちょっとメモ&試してみた。 与えられるデータ 大量の…
はじめに 大規模なテキストデータでのN-gram統計を取る場合、特にNが大きい場合(N>=3)は、組み合わせの数が多くなり出てくるN-gramをすべてメモリに保持しながら個数をカウントするのが難しい。効率的な方法があるのを知ったのでちょっと試してみた。 大規模…
はじめに 形態素解析器が何たるかも知らずにいたのでメモ。 形態素とは? 意味を持つ最小の言語単位 形態素<単語<文<テキスト(ドキュメント) 例えば「今日は晴れ」という文は「今日」+「は」+「晴れ」のような形態素(単語)に分解できる 形態素解析とは…
計量文献学とは? 文献の特徴を数値化→統計的にその文献の分析・比較を行う方法または学問 「書き手によって文章に現れる言葉は違うのではないか?」に注目 文体(文章などのスタイル、和文・漢文、ですます・である調など)に注目=計量文体学 著者が同じ人か…
はじめに 索引データの保存に関する記事を読んだのでメモ。 索引データの効率的な保存 ドキュメント数やできた索引数が多くなるにつれ、効率的に索引データを保存することが重要になってくる 工夫して索引データを保存することで、いろんなメリットがある メ…
はじめに 言語処理するのに基となるデータ(言語データ、コーパス)についてまとめてみる。 データ・テキストマイニングなどに。必要に応じてダウンロードして試してみたい。 コーパス(corpus)とは 自然言語処理の研究に用いるために、自然言語の文章(用例)を…
エントロピー、パープレキシティ 言語Lにおいて、単語列の生起確率がのとき、1単語あたりのエントロピーは、 になる。 ある単語について、平均して個の単語が次につながりうることを表す。 このはパープレキシティと呼ばれる。なので、パープレキシティを見…
検索の種類 逐次検索(grep)型 すべてのドキュメントを順次探していく方法 ドキュメントの増加により検索速度が低下する 普通に探索、KMP法、BM法など 全部見るので、検索漏れがない 並列化しやすい Suffix型 事前に全てのドキュメントを検索可能な構造に変換…
はじめに 自然言語処理だけでなく、音声認識、スペルチェック、情報検索など多くの分野で使われている「(確率的)言語モデル」について、少しまとめてみる。 言語モデル 「今日/は/晴れ」や「明日/は/雨」などの文はよく使われるのに対し、「晴れ/は/今日」や…
はじめに 文書の数学的表現をするためによく用いられるものに「N-gram」というものがある。 最近ちょっと混乱ので、ちゃんとまとめてみる。 N-gramとは? 「文章などで隣り合うn個のこと」文書を数学的に扱うために、普通に考え付くのが「その単語がでたかど…
TF-IDFについて いくつかの文書が与えられたとき、文書中の単語の重みを決める手法の一つ。 TF(Term Frequency, 文書中の単語出現頻度) 「よくでてくる単語はその文書の主題を表しやすい」 ある文書dに単語tがでてきた個数をtf(t,d)と定める tfの定義として…
はじめに 「言語処理のための機械学習入門」の第4章のナイーブベイズを勉強のため実装してみた。 多変数ベルヌーイモデルについて、最尤推定のものと、最大事後確率推定のものをc++で動かしてみた。 ナイーブベイズ分類器とは? 古典的な分類器 事例dがどの…