読者です 読者をやめる 読者になる 読者になる

コードネームは初話ユウ

自然言語処理でいろいろやってみる

システム稼働開始

まただいぶ間が空いてしまったが、以前記事に書いた「オブジェクト指向意味理解システム」をここしばらく作っていた。去年8月頃から始めて、仕様作成3か月、コーディング半年弱。諸事情により1か月強中断の後、デバッグを1か月程してきたところ。ようや…

小学1年の国語教科書でつつじのカバー率をみる

今作っているシステムで、機能表現については前回言及した「つつじ」をベースに文法を入れていこうと考えていた。つつじの機能表現には大きく分けて格補語系、文末表現系、接続関係系の3種があるが、私の作業上文末表現系、接続関係系の2つが当面気になっ…

文末表現のパターン・組合せ

4か月以上空いてしまった。今何をやってるかというと、前回書いた「オブジェクト指向自然言語理解システム」をちまちま作っている。仕様書を作り、コード半分くらい?書いたところ。動くまであと更に半年くらいかかりそうな気がする。仕様書といってもけっ…

オブジェクト指向的な文章理解

前記事で書いた「係り受け・WSD・照応・述語項を同時に処理するシステム」において、評価関数はどのように作るべきか、の話。当然、日本語として「もっともらしい文」が高い点数になるようにしたい。では、文のもっともらしさとは具体的にどう(プログラムに…

係り受けの次のステップ

いろいろ雑用に手を取られたりして間が空いてしまったが、その後も考えつづけている。 係り受けは現在(kakarotもcabochaも)正解率8割台。研究としてはそこそこいいものの、実用レベルから言うとまだ不十分だろう。97~98%程度にしたいところだが、それには…

単語数・出現頻度・カバー率

係り受けもまだ終わったわけではないが、そこそこ精度も出たし改善案も見えているしで一段落してはいるので、同じことをずっとやってるのも飽きるというのもあり、そろそろ次のステップのことを考えはじめている。 まだ明確にやることが決まっているわけでは…

比較があまり意味なかった(らしい)件

京大コーパスを試したと前回書いたが、比較のためにcabochaでも同条件で測定してみた。 ok ng 正答率kakarot 266014 54603 83.0%cabocha 291893 28724 91.0% (v0.64)cabocha 304930 15687 95.1% (v0.65)cabocha v0.65が(またしても)やたらいい。これももし…

ちょっと立ち止まって分析してみる

ツテをたどって、京大コーパスなるものにアクセスできたのでちょっとトライしてみた。正答率83.0%。KNBCとあまり変わらないレベル。元データがフリーでないので環境の公開はしないが、やってることとしてはcabOnKnbcと似たようなことをやっている。(IPA辞書…

徐々に改良中

KNBコーパスで正答率が出るようになると、やはり良い数字を出したくなる。というわけでここしばらくは正答率を上げるために係ろっとの改良作業をやっていた。誤答を出した対象文をログ付きで解析し、ログを見て誤答の原因を割り出して修正、という作業を繰り…

KNBコーパスで正答率を測る

せっかく係り受け解析器を作ったので、やはり精度がどうなってるか気になる。ということで、測ってみることにした。論文とか見るとだいたい皆さん京大コーパスというのを使ってるようだ。なのでこれを調べてみる。…えーと、毎日新聞CDROMてのがいるのか。こ…

【作ってみた】全域探索を行う日本語係り受け解析器「係ろっと」

できた。ソースはこちら。 網羅的なテストまではしていないが、ざっと動かしてみたところでは、cabochaとの結果比較で9割方一致する感じ。結果が異なるものを見てみると、だいたいこっちがおかしいのだけれど、cabochaの方が間違ってることもちらほらあるよ…

係り受け解析器を設計する

cabochaの係り受けは、短い文だとまあまあいいものの、ちょっと長い文になるとけっこう間違う。この理由は、おそらく次の2つがあるだろう: ・構文と辞書(品詞)情報のみに頼っており、意味を見ていない ・決定的動作で、全域探索をしていない このうち前…

cabochaソースを読む(4)係り受けレイヤ

いよいよ本丸の係り受け部分を見ていく。parse() は dep.cpp l.191から。 アルゴリズム自体は最初の回に紹介した論文に詳しく述べられている。parse()は100行に満たないので、論文と見比べながら読んでいけば大体わかると思うが、いくつかコメント: l.207 b…

cabochaソースを読む(3)各文節の素性

素性選択レイヤを見る。ソースはselector.cpp。l.117 parse()から行く。 l.121 の forループで(sentence中の)全chunkをなめる。 l.128 の forループで各chunkの中の全tokenをなめる。 各tokenに対して、 l.130 pat_kutouten_.match(token->normalized_surf…

cabochaソースを読む(2)入力データから情報抽出

前記事の続き。 tree->read() (tree.cpp l.406) が文字列入力からデータ構造を構築する。まずデータ構造の宣言をチェック。 cabocha.h に struct cabocha_chunk_t (l.75), struct cabocha_token_t (l.87) の宣言がある。chunk が文節、token が形態素。ちな…

cabochaソースを読む(1)処理の流れ概要

係り受けツールのcabochaをいじっているが、いろいろとひっかかってる。cabochaは係り受けをどうやって決めているのか?を知るため、ソースを少し読んでみた。以下そのメモ。 南瓜のページ http://code.google.com/p/cabocha/ からソースをDL。とったのは v0…