2015-07-03 Fri

Word2Vec の Web API を作れる word-vector-web-api を公開しました

Word2Vec や GloVe などで構築済みな単語ベクトルのモデルを使った Web API を作ることができる word-vector-web-api を公開しました。🎉🍣🍻🍰🍖



これがあると docker コマンドと1.5 GByte 程度のメモリが使える環境なら、以下の 5 つのコマンドを実行することで(厳密にはもう少し手順がありますが)、以下のサンプルの様な結果(日本語 Wikipedia のダンプデータから word2vec コマンドで作ったモデルを使った Word2Vec の distance アプリケーションと同等の結果)を得られると思います。

$ git clone --depth 1 https://github.com/overlast/word-vector-web-api.git
(略)
$ cd word-vector-web-api
$ ./libexec/download-sample-jawiki-model.sh
(略)
$ ./libexec/create-docker-image-sample-word-vector-web-api-s1.sh
(略)
$ ./libexec/run-docker-container-of-sample-word-vector-web-api-s1.sh
(略)
$ curl "http://0.0.0.0:22670/distance?a1=タモリ"
{"format": "json", "items": [
{"term": "明石家さんま", "score": 0.81528389453887939}, {"term": "さんま", "score": 0.80035871267318726},
{"term": "ビートたけし", "score": 0.79251360893249512}, {"term": "所ジョージ", "score": 0.76938104629516602},
{"term": "とんねるず", "score": 0.7473946213722229}, {"term": "爆笑問題", "score": 0.73406845331192017},
{"term": "司会", "score": 0.72929728031158447}, {"term": "森田一義", "score": 0.72818166017532349},
{"term": "島田紳助", "score": 0.72627973556518555}, {"term": "中居正広", "score": 0.72301918268203735},
{"term": "山田邦子", "score": 0.71929085254669189}, {"term": "笑福亭鶴瓶", "score": 0.71266698837280273},
{"term": "ボキャブラ天国", "score": 0.70373982191085815}, {"term": "笑っていいとも!", "score": 0.70154005289077759},
{"term": "関根勤", "score": 0.70032232999801636}, {"term": "明石家マンション物語", "score": 0.70010024309158325},
{"term": "冠番組", "score": 0.69675129652023315}, {"term": "いいとも", "score": 0.69370967149734497},
{"term": "石橋貴明", "score": 0.68870562314987183}, {"term": "オレたちひょうきん族", "score": 0.68832921981811523},
{"term": "ものまね", "score": 0.68563121557235718}, {"term": "松村邦洋", "score": 0.68541419506072998},
{"term": "ボキャ天", "score": 0.68538647890090942}, {"term": "ウッチャンナンチャン", "score": 0.68278044462203979},
{"term": "テレフォンショッキング", "score": 0.68264764547348022}, {"term": "コーナー司会", "score": 0.68219667673110962},
{"term": "浅草キッド", "score": 0.68129265308380127}, {"term": "今夜は最高!", "score": 0.67805778980255127},
{"term": "今田耕司", "score": 0.67686200141906738}, {"term": "萩本欽一", "score": 0.67244911193847656},
{"term": "みのもんた", "score": 0.67096501588821411}, {"term": "北野ファンクラブ", "score": 0.66866558790206909},
{"term": "中居", "score": 0.66742992401123047}, {"term": "鶴瓶", "score": 0.66699719429016113},
{"term": "志村けん", "score": 0.66617244482040405}, {"term": "大橋巨泉", "score": 0.66485863924026489},
{"term": "上岡龍太郎", "score": 0.66450983285903931}, {"term": "ナインティナイン", "score": 0.66341793537139893},
{"term": "松本人志", "score": 0.66267943382263184}, {"term": "和田アキ子", "score": 0.66127783060073853}
], "query": "タモリ", "method": "distance", "sort": "cosine similarity", "status": "OK", "total_count": 40}


実はかなり前から GitHub 上には公開していたのですが、決して使いやすい状態とはいえませんでした。
なので、かなりシンプルにサンプル出力を試せる状態にしました。

どこがポイントなのか


今回、word-vector-web-api をまとめるに当たってのポイントは以下の3点でした。

- 構築済みの日本語 Wikipedia モデルを配布
- Dockerfile を配布
- インストール手順書を記述

簡単に説明してみます。

構築済みの日本語 Wikipedia モデルを配布

Word2Vec はすぐに試せる構築済みな日本語のモデルがあまり積極的に配布されていなかったので、使っていなかった人も多かったのでは無いでしょうか。

今回は、いろいろ試した結果、Google Drive さんを利用させて頂いてモデルを配布しています。

モデルをダウンロードして解凍するためのダウンローダーを作ってみて、意外と便利だったので今後も再利用していこうと思います。

配布しているモデルは限られた時間の中で複数の前処理を一応試してみて、構築後のモデルを使ってみた結果が一番良さそうなものをアップロードしました。

パラメタの探索とか、定期的なアップデートとか、いろいろな課題がありますがこれはmecab-ipadic-NEologdと同じで、ぼちぼち更新していこうと思います。

今後は日本語 Wikipedia 以外のコーパスを使ったモデルの構築や、Word2Vec より顕著に良い性能がでる手法が出てきたらそれを使っての構築を考えていますので、自前のモデルを構築しない派の方はご期待ください。

Dockerfile を配布

環境構築は Ansible の Playbook とか用意しとけば済むかなと思いましたけど、@chezou さんと @sowawa さんから「Dockerfile 書きましょう」と同日に言われたので、今の時代は Dockerfile が無いと駄目な時代なのだなと勉強になりました。ありがとうございました。

結果として docker build できる環境と 1.5GByte 程度のメモリがあれば、環境に依存するトラブルは少なくなったので良かったです。

実際に製品として使う場合は、Docker のままだと厳しいでしょうし、研究寄りのエンジニアさんは OS に直にインストールしたword2vec-msgpack-rpc-server に直にリクエストした方が無駄が無くてより良いでしょう。



そもそも word-vector-web-api を作ったのは、word2vec-msgpack-rpc-server と nginx-msgpack-rpc-module が個人的に便利なのでオススメしたいけど単体だと試すのが面倒で試してもらえ無さそうだから妥当なパッケージングをしてモデルも付けて配布してより便利な世の中にしよう、という考えがあってのことです。



word2vec-msgpack-rpc-server と nginx-msgpack-rpc-module を使って自分の実装を世に広めたり、または word-vector-web-api をカスタマイズして便利な機能を製品に組み込んで見たり、いろいろ試してみてください😊。

インストール手順書を記述

とても詳細な手順書を書きましたので、慎重に読み、コピペすることでつまづく確率が激減すると思います。

Docker 自体や Unix コマンドに関する知識は自分で調べなきゃいけませんけど、それは許してくださいね😓💦。

終わりに


word-vector-web-api は、僕が社内でコンテンツ管理ツール向けなどで作った Web API の OSS 版です。

割と簡単な作りですが、このくらいでもメモリを増やしてサーバプロセスを増やせばレスポンスに関する問題は減ります。

精度に関しては、距離関数よりはモデルの構築手法と検索クエリの作成手法に強く依存するので、word-vector-web-api の外側で解決すべき問題が山積みになっている状態だと思います。

モデルの構築の際には mecab-ipadic-NEologd を使うことで多くの問題が解決できると思います。



リリース済みのものの改善、サンプルモデルの種類の追加、演算に必要なメソッドの追加は予定があるので、今後のアップデートを生暖かく見守りつつ、たま〜に Update してみて下さい。🍻

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2015-05-29 Fri

UniDic に固有表現やUnicode 絵文字などを足す mecab-unidic-NEologd を公開しました

今年3月中旬 [2015-03-13] に mecab-ipadic-NEologd をリリースして以来、mecab-ipadic-NEologd はとても順調に普及しています。

さて、今回は UniDic に新語や固有表現、Unicode 絵文字などを足すことができる mecab-unidic-NEologd を公開しました。
mecab-ipadic-NEologd を生成する手法を使っています。

https://github.com/neologd/mecab-unidic-neologd/blob/master/README.ja.md

シードデータの性質上、構築されるシステム辞書には国語研短単位の条件を満たさないエントリも入りますので、あらかじめご了承ください。

これを MeCab と一緒に使うと要するにこういうことができます。

$ mecab -d /usr/local/lib/mecab/dic/mecab-unidic-neologd
アップルは Apple Watchを4月24日に国内発売しました。⌚
アップル	アップル	アップル	アップル-apple	名詞-普通名詞-一般
は	ワ	ハ	は	助詞-係助詞
Apple Watch	アップルウォッチ	アップルウォッチ	Apple Watch	名詞-固有名詞-一般
を	オ	ヲ	を	助詞-格助詞
4月24日	シガツニジュウヨッカ	シガツニジュウヨッカ	4月24日	名詞-固有名詞-一般
に	ニ	ニ	に	助詞-格助詞
国内	コクナイ	コクナイ	国内	名詞-普通名詞-一般
発売	ハツバイ	ハツバイ	発売	名詞-普通名詞-サ変可能
し	シ	スル	為る	動詞-非自立可能	サ行変格	連用形-一般
まし	マシ	マス	ます	助動詞	助動詞-マス	連用形-一般
た	タ	タ	た	助動詞	助動詞-タ	終止形-一般
。		。	補助記号-句点
⌚	トケイ	トケイ	時計	記号-一般
EOS


かなり便利そうですよね?!!!!!!!!!!

個人的に UniDic を使用してテキストデータから特徴ベクトルを生成する際や、UniDic を使用してテキストマイニングをする際には、 UniDic と mecab-unidic-NEologd を併用するのがオススメです。

unidic-mecab 2.1.2 との処理結果の差にもご注目ください。

unidic-mecab 2.1.2	     |	mecab-unidic-NEologd
今 いく よ 	     |	今いくよ
絢爛 舞踏 	     |	絢爛舞踏
るみ るみ 	     |	るみるみ
レー カン 	     |	レーカン
この 前 バイト で 化粧 品 選ん で� |	この 前 バイト で 化粧品 選ん でる
今 いくよ くるよ 	     |	今いくよくるよ
ワ カコ 酒 	     |	ワカコ酒
中村 蒼 	     |	中村蒼
俺 ガイ ル 	     |	俺ガイル
で ん ぱ 組 . i n c 	     |	でんぱ組.inc
ボトル の お ぱんつ 	     |	ボトル の おぱんつ
いろは す 		     |	いろはす
北越 紀州 製紙 	     |	北越紀州製紙
メガネ びいき 	     |	メガネびいき
パンチ ライン 	     |	パンチライン


チャンキングなしに上記のように固有表現が得られた方が嬉しい場合もあります。
両方の辞書の出力結果をマージして使った方が良い場合もあります。

mecab-unidic-NEologd は辞書の性能を BCCWJ を使用して、ある程度定量的に評価しようと考えて生成しました。
でも、手元にあるだけでは勿体無いので公開することになりました。

mecab-unidic-NEologd も mecab-ipadic-NEologd と同様に Apache License 2.0 ですし、シードデータは月に最低2回(初旬と中旬)の更新を予定しています。

何かご意見やアドバイスがございましたら、函館で開催される JSAI2015 に行きますのでお声がけ下さい。

参考リンク


- mecab-ipadic-NEologd
-- https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2015-03-13 Fri

MeCab 用の新語辞書 mecab-ipadic-neologd を公開しました

日本語の文書を機械的に処理しようと思った時に、ほとんどの人が MeCabとIPADIC(IPA辞書)の両方、または、どちらかを使うことになります。

IPADICはとてもよく出来ていますが、更新されないまま年月が過ぎているので、例えば2015年3月上旬に急に流行ったような言葉は収録していません。そのため、今日生まれたような新しい文書(例、Apple Watch発売)を解析する時に困ります。困らない人もいますけど、僕は困ります。

その課題に対処するために、日本全国津々浦々、自然言語処理に関わる全ての人は独自にMeCabの新語辞書を作って対応しているわけです。その際に元データとして使われることが多いのは Wikipedia 日本語版やはてなキーワードなどです。

困ったことに、新語辞書を生成するには上述の元データを使うとても面倒な処理(本文抽出とか、コスト付けとか)を確実に行う必要があります。これがうまくいかないことが多いのです。また、インターネット上に公開されている新語辞書作成の手法は提案者によってまちまちです。どのような結果を狙っているのか不明確な手法も多々見かけます。

さらに言うと、上述の元データだけでは新しい地名、人名、製品名、施設名、イベント名、キャラクター名、動詞・形容詞、数値・数量表現などへの対処はしきれません。このような問題を少しでも軽減することはできないのでしょうか。

「もう2015年だし、新語への対応どうしよう・・・、とかそろそろ考えたくないよね?」

ということで粛々と作業をして作りました。

新語辞書の名前は mecab-ipadic-neologd です。

https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md

これをMeCabと一緒に使うと要するにこういうことができます。

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
アップルは Apple Watchを4月24日に国内発売します。
アップル        名詞,一般,*,*,*,*,アップル,アップル,アップル
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
Apple Watch     名詞,固有名詞,一般,*,*,*,Apple Watch,アップルウォッチ,アップルウォッチ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
4月24日 名詞,固有名詞,一般,*,*,*,4月24日,シガツニジュウヨッカ,シガツニジュウヨッカ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
国内    名詞,一般,*,*,*,*,国内,コクナイ,コクナイ
発売    名詞,サ変接続,*,*,*,*,発売,ハツバイ,ハツバイ
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。
EOS


かなり便利そうですよね?!!!!!!!!!!

便利そうだと思って下さった方にお使い頂けると嬉しいです。

詳細は、上記した github 上でご確認頂きたいです。

FAQ


mecab-ipadic-neologd とは?

より正しく書くと、MeCab のシステム辞書の一つである IPADIC を拡張するための新語辞書のシードと、新語辞書を組み込んだIPADICをインストールするツール群のセットのことです。

MeCab + IPADIC で解析した時に、うまく分割と読み仮名の付与ができない語だけを追加するように努力しています。

インストールの過程でmecab-ipadicのソースコードを取得して、mecab-ipadic-neologd のシードデータを含むインデックスを構築するので、実際にインストールしてその様子を確認してください。

おすすめポイントは?

個人的には以下の3点です。

- 名詞的なフレーズを連結する処理、を作る作業から開放される
- 新語に読み仮名が付く
- 辞書のシードが月に数回更新される

シードデータはいつ更新されるの?

シードデータの更新は少なくとも月に2回程度、月初めと半ばに行います。
公開していませんが2014年の8月位から更新作業をしていますので、同様の作業を公開しつつ継続するだけです。

月初めと半ばに以外にも、辞書に資源を足したり、品詞情報を改善したり、バグを修正した場合には更新されます。

解析結果とかどうなってるの?

僕が社内の製品に適用したときに大きな問題が無い程度の正確さがあります。

シードの生成過程で実用上問題ない品質かどうかのチェックは簡易ですけど行っております。
今後定量評価した結果も公開する予定です。

でも、定量評価って結果を出すまでにやることが多いのです。
しばらく時間がかかると思いますけど、どこかの勉強会やカンファレンスなどでお話すると思います。

本当にインストールする価値があるの?

インストールする前のテストで以下のように、どんな風に語の区切りが変わる可能性があるか(実際には文脈によって変わる)が確認できる出力を表示します。
出力結果はインストールするタイミングによって変化するので、更新の度にお楽しみ下さい。

default system dictonary     |	mecab-ipadic-neologd
福岡 恋愛 白書 	     |	福岡恋愛白書
バナナ ムーン 	     |	バナナムーン
未来 ロケット 	     |	未来ロケット
ミュージック ドラゴン 	     |	ミュージックドラゴン
g の レコンギスタ 	     |	gのレコンギスタ
北 区 赤羽 	     |	北区赤羽
幻 魔 チャレンジ 	     |	幻魔 チャレンジ
雪 風 		     |	雪風
特急 は く た か 	     |	特急 はくたか


その結果が気に入ったら yes してインストールを継続して下さい。

バイナリパッケージなどは提供されるの

提供する予定があります。

個人的にはすでにyumでインストールしています。

yumやbrewなどのコマンドで簡単にインストールできる状態にできると思います。

ただ、mecab-ipadic-neologd 自体の公開と、品質の向上を優先したいので、パッケージの公開はもう少し先です。

バージョン番号はあるの?

mecab-ipadic-neologd にバージョン番号はありませんが、シードデータには日付が入っています。
また、パッケージ提供する際には、パッケージを一意に特定する日付ベースの番号が付きます。

neologd ってどういう意味

neologism dictionary (新語辞書)から発音しやすい部分だけ取りました。
「ネオログディー」と発音します。
daemonじゃなくてdictionaryなのにdですいません。

新語辞書のシードはどうやって作っているの?

NEologd というまだ未公開のツールで生成しています。

https://github.com/neologd/neologd

いろいろな言語資源から4カラムの辞書データを生成する課題を解きます。
詳細はまた今度。

最後に


個人的にMeCabの辞書には mecab-ipadic-neologd と ipadic の両方を同時に使うのがオススメです。

何かご意見やアドバイスがございましたら、京都で開催される NLP2015 に行きますのでお声がけ下さい。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2010-11-04 Thu

「入門 自然言語処理」をいただきました

オライリーさんから「入門 自然言語処理」をご献本いただきました。
どうもありがとうございます!!

P1160135

本書は「Natural Language Processing with Python」という本の翻訳です。
原著には「入門」という語は入っていないのでオライリーさんの思慮が込められていそうです。
基本はNLTKというPythonのライブラリを使って自然言語処理の入門的な課題をこなしていく形式です。

入門 自然言語処理

[Amazonで詳細を見る]


実は、この本の12章を僕と、@echizen_tmさん、@uchumikさん、@nokunoさん、@tsubosakaさんと、@machyさんの6人でチェックに参加させて頂きました。(もちろん他にも査読者はいます。)
著者で機会をくださった@mizuno_takaakiさんと@mhagiwaraさん、どうもありがとうございました。

発行スケジュールの関係で締め切り寸前だったため、10月上旬の数日間にみんなで大急ぎで簡単にチェックしました。
僕たちが12章の原稿を受け取った段階で、12章はほとんど出来上がっていました。
なのでおもに誤植チェックをさせていただきました。まだ残ってるかなぁ。。。

本書の価値を原著よりも高めているのは12章。
この章は日本語版のオリジナルの章。
元バイドゥ社員でいまは楽天技術研究所(NY)に所属している@mhagiwaraさんがメインで書いた章だそうです。
12章だけでこんなに分厚いです。

P1160136

11章までの英語だけを扱う場合と比べると、日本語を扱う12章では考慮すべき点が多いです。
12章は日本語自然言語処理にありがちな課題を解決する「方法の一例」を示しています。
問題解決の方法は沢山あるので、Python的に本書での解決方法がベストなのかは分かりません。
ですが、いままで何もやったことが無い人にとって大きな助けになると思います。

さて、この12章の目次を引用してみます。

- O'Reilly Japan - 入門 自然言語処理
-- http://www.oreilly.co.jp/books/9784873114705/

12章	Pythonによる日本語自然言語処理
Pythonにおける日本語の取り扱い
    12.1 日本語コーパスの取り扱い
        12.1.1 平文コーパス
        12.1.2 タグ付きコーパス
        12.1.3 依存構造解析済みコーパス
        12.1.4 コーパスを用いたテキスト処理
        12.1.5 日本語WordNet
        12.1.6 その他の日本語コーパス
    12.2 日本語形態素解析
        12.2.1 形態素解析アルゴリズム
        12.2.2 文字単位分かち書きを使う
        12.2.3 MeCabを使う
        12.2.4 JUMANを使う
        12.2.5 そのほかのトピック
    12.3 日本語構文解析
        12.3.1 句構造解析
        12.3.2 文節チャンキング
        12.3.3 CaboChaを使う
        12.3.4 KNPを使う
        12.3.5 係り受け解析
    12.4 日本語意味解析
        12.4.1 格フレームとその獲得
        12.4.2 日本語LFG
        12.4.3 日本語句構造文法(ICOT JPSG)
        12.4.4 その他の日本語HPSG
        12.4.5 述語項構造解析
        12.4.6 照応解析
    12.5 さらに学ぶために
        12.5.1 ウェブサイト
        12.5.2 一般的な教科書
        12.5.3 形態素解析
        12.5.4 仮名漢字変換
        12.5.5 構文解析と意味解析
        12.5.6 機械翻訳
        12.5.7 情報検索
    12.6 演習問題


日本語処理を真っ正面から行なおうとしている様子が伺えます。
すばらしいですね。

本書は、機械学習の入門ではなく、自然言語処理の入門書として見た場合に、
入門書として十分な内容を含んでいると思います。
# 機械学習関連のトピックは割と省略されている場合があります。

これから自然言語処理をはじめたい人が手に取って大丈夫な本だと思います。
# もちろん、この本を読んだあと別の本も読むことすることが前提だと思います。

ああ、あと本書はPython の勉強に調度良いのかもしれません。
# Perlユーザ向けに、NLTKのPerl版とかも公開されたらNLP with Perlとか出てくるのかな?

入門 自然言語処理

[Amazonで詳細を見る]


ともかく、もうそろそろ書店に並ぶということですので、
みなさまお買い求めいただき、そして是非、自然言語処理に入門してみてください。

関連記事


- [O] YAPC::Asia Tokyo 2010 2日目で発表してきました
-- http://diary.overlasting.net/2010-10-16-1.html
# 「Perlで自然言語処理」という発表をしました。入門書の紹介をしています。

関連リンク


- O'Reilly Japan - 入門 自然言語処理
-- http://www.oreilly.co.jp/books/9784873114705/

- 手軽に自然言語処理を学ぶには「入門 自然言語処理」の第12章がお勧め - 生駒日記
-- http://d.hatena.ne.jp/mamoruk/20101027/p1

- オライリーの入門自然言語処理をご献本いただきました! - nokunoの日記
-- http://d.hatena.ne.jp/nokuno/20101104/1288883355

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2008-10-09 Thu

日産ノート(NOTE)とゴールデンエッグスのコラボサイトでコーチとお話できる

日産ノート(NOTE)とゴールデンエッグスのコラボサイトが公開されているようです。

画像

コーチと話すのはネセサリーだよなぁと思ったので、いろいろ見てみましたが、ゴールデンエッグスとかなりディープにコラボしているので、ファンにはたまらないサイトになっています。

ブログパーツの良い意味でのあほらしさも最高です。

で、どのへんがNOTEのプロモにつながるかというと、「試乗ムービーがゴールデンエッグス好きにとっておもしろくできている」という点かなと。

いままで作り上げてきたキャラクタの持ちネタを試乗ムービーの上で炸裂させているので、飽きずに最後までみることができました。

肝心のコーチとのお話ですが、人工知能的なアプローチはあんまり顕著に見られません。ほとんど何もしていないのでは。

でも、あんまり真剣にルールづくりをしなくても大丈夫で、むしろユーザーの話を聞かなくても、キャラが成立するならOKなのだ、ということを教えられました。

このサイト、オススメなので無くならないうちに行ってみてください。

【関連リンク】
- 日産:ノート [ NOTE ] コンパクトカー Webカタログ ホーム
-- http://www2.nissan.co.jp/NOTE/E11/0801/index.html

[2008-10-15]:追記
「人工知能的なアプローチをしてない?」と言及しましたが、調べてみると何かやっていました。すいませんでした。

- [O] 日産ノート(NOTE)とゴールデンエッグスのコラボサイトのコーチの発話について深追い
-- http://overlasting.dyndns.org/2008-10-15-2.html

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2008-10-03 Fri

形態素解析器 JUMAN をインストール

Tさんから「JUMAN、JUMAN」と呪文を唱えられたので、気がついたら JUMAN をインストールしていました。

以下がそのインストールメモ。

$ wget http://www-lab25.kuee.kyoto-u.ac.jp/nl-resource/juman/juman-6.0.tar.gz
$ tar xfvz ./juman-6.0.tar.gz 
$ cd juman-6.0
$ ./configure
$ make
$ make install


一応 ldconfig しておく。

$ ldconfig


で、巨峰を食べたので、そういうのを例文にしてみた。

JUMAN は euc-jp しか受けつけないので注意。

$ echo '巨峰を一房食べた。おいしいおいしい。'|lv -Oe|juman|lv -Ou
巨 巨 巨 未定義語 15 その他 1 * 0 * 0 NIL
峰 みね 峰 名詞 6 普通名詞 1 * 0 * 0 "漢字読み:訓 カテゴリ:場所-自然 代表表記:峰/みね"
を を を 助詞 9 格助詞 1 * 0 * 0 NIL
一 いち 一 名詞 6 数詞 7 * 0 * 0 NIL
房 ふさ 房 名詞 6 普通名詞 1 * 0 * 0 "漢字読み:訓 カテゴリ:植物-部位:人工物-その他:抽象物 代表表記:房/ふさ"
食べた たべた 食べる 動詞 2 * 0 母音動詞 1 タ形 10 "ドメイン:料理・食事 代表表記:食べる/たべる"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
おいしい おいしい おいしい 形容詞 3 * 0 イ形容詞イ段 19 基本形 2 "代表表記:美味しい/おいしい"
おいしい おいしい おいしい 形容詞 3 * 0 イ形容詞イ段 19 基本形 2 "代表表記:美味しい/おいしい"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS


ぐはっ。JUMAN は巨峰を知らないのね。orz。

ちなみに MeCab だと以下のような感じ。

$ echo '巨峰を一房食べた。おいしいおいしい。'|lv -Ou|mecab|lv -Ou
巨峰    名詞,一般,*,*,*,*,巨峰,キョホウ,キョホー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
一      名詞,数,*,*,*,*,一,イチ,イチ
房      名詞,一般,*,*,*,*,房,ボウ,ボー
食べ    動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。
おいしい        形容詞,自立,*,*,形容詞・イ段,基本形,おいしい,オイシイ,オイシイ
おいしい        形容詞,自立,*,*,形容詞・イ段,基本形,おいしい,オイシイ,オイシイ
。      記号,句点,*,*,*,*,。,。,。
EOS


JUMAN には「UTF-8 のテキストを入出力できない」とか「え?キョミネ?」など、現代では不便に感じる点も多少あります。

でも解析結果を MeCab と比べると、タスク次第では JUMAN の方が嬉しくなることが多そうだと感じます。なので今後 JUMAN にはお世話になりそうです。

次は KNP をインストールしようかな。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2008-08-21 Thu

指定形容詞係り先検索の検索対象が狭すぎな件について、簡単に考えてみる

Yahoo! JAPAN が日本語係り受け解析のAPIを公開しました。

- Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語係り受け解析
-- http://developer.yahoo.co.jp/jlp/DAService/V1/parse.html

日本語文の係り受け関係を解析する機能を提供します。


と、同時に「指定形容詞係り先検索」APIという聞き慣れない名前のAPIも公開されました。

- Yahoo!デベロッパーネットワーク - テキスト解析 - 指定形容詞係り先検索
-- http://developer.yahoo.co.jp/jlp/DAServiceSearch/V1/search.html
1 : 「うれしい」が係る単語を返します。
2 : 「おもしろい」が係る単語を返します。
3 : 「すごい」が係る単語を返します。
4 : 「たのしい」が係る単語を返します。
5 : 「かっこいい」が係る単語を返します。
6 : 「かわいい」が係る単語を返します。
7 : 「きれい」が係る単語を返します。
8 : 「おいしい」が係る単語を返します。


え?これだけ?

うーん。なんでこんなに取得できる条件が絞られているんだろう。

考えてみますか。

APIから得られる結果は?



APIの返す結果が『「うれしい」に係る』じゃないところがポイントですね。

おもに連体形の形容詞(名詞などの体言にかかる)が係る単語がとれそうです。
「単語を返す」と言っているのは、形容詞の係り先にある形態素を返すので、
名詞なのか、未知語なのか、固有名詞なのか、
よく分からないということなのではないかなぁ、と思います。

では、ちょっと結果を見てみます。

- 指定形容詞係り先検索 : うれしいの係る単語
-- http://jlp.yahooapis.jp/DAServiceSearch/V1/search?appid=YahooDemo&mode=1
<Word>
<Surface>人気ブログランキング</Surface>
<Frequency>8</Frequency>
</Word>


Surfaceは表層、つまり見たままの文字列のことではないでしょうか。
Frequencyは頻度、つまり何かの頻度を表しているのではないでしょうか。

どんなデータから、表層と頻度を取得しているのか



頻度が出ていることから、何らかのコーパスを解析したことが分かります。

ふと気がつきましたが、結果の中に以下のような結果が混ざっています。

<Word>
<Surface>金メダル</Surface>
<Frequency>24</Frequency>
</Word>

中略

<Word>
<Surface>ソフトボール</Surface>
<Frequency>9</Frequency>
</Word>


実は、この検索をした日の前日に、ソフトボールの日本代表が、
北京オリンピックで金メダルを取ったのです。

また、この一つ前の引用のように「人気ブログランキング」という単語が頻出していました。

取得できる結果からは、なんとなくブログ記事を使っている気がしますね。

もしかして、昨日以前のブログ検索結果から上位n件を取得しているのかな
ということが想像できます。

APIが結果として返してくれそうなデータを考える



APIのことと、APIで使っていそうなデータのことが、ちょっとわかったので
こんどは、結果として得られそうな「形容詞と単語の組み合わせ」と、
「組み合わせが得られそうな文」について考えてみようと思います。

形容詞「きれい」から何を得られるか

「きれい」という形容詞が係る、名詞「花」という組み合わせを考えます。
そうすると、「きれいな花」や「きれいだと思ったのは花」などの
文から、形容詞と単語の組み合わせが得られそうです。

ということは、別の形容詞についても何かを考えられますね。

APIの動きを想像して、APIの条件に無い形容詞の結果を考えてみる。



諸々考えたので、指定形容詞係り先検索と同等の結果を得る
アルゴリズムを考えてみます。

指定形容詞係り先検索っぽいアルゴリズム

1、クエリとして形容詞を与える
2、与えられた形容詞をクエリとして、ブログ検索する。その際に、形容詞は連体形に変換し、検索結果は日付順でランキングし取得する。
3、検索結果のタイトルとスニペットを取得。
4、スニペットを文に分割する。
5、タイトルとスニペットを正規化
6、与えられた形容詞を含むタイトルとスニペット文を文として取得。
7、取得した文を係り受け解析
8、構文情報から、与えられた形容詞が係っている形態素を取得。とりあえず、形容詞が係る、一番近い名詞、固有名詞、未知語を取得する。
9、形態素の頻度情報を得る
10、頻度が4件以上の単語のみを取得する
11、ストップワードリストによるフィルタリング

素朴なアルゴリズムは、こんな感じなのではないでしょうか。

アルゴリズムどおりに手を軽く動かしてみる。



アルゴリズムを想定したので、このアルゴリズムで形容詞を処理してみます。
と言っても、まずは自分の手を動かすことにします。

処理する形容詞を「嫌い」に設定してみます。
何故かというと、指定形容詞係り先検索にはネガティブな形容詞が含まれていなかったからです。

ブログ検索の結果を手作業で処理してみる。

以下の検索結果から、想定したアルゴリズムにマッチする単語を上から30個くらい取得してみます。

- 「嫌いな」の検索結果 - Yahoo!ブログ検索
-- http://blog-search.yahoo.co.jp/search?p=%E5%AB%8C%E3%81%84%E3%81%AA&ei=UTF-8

すると、試した瞬間には、以下のようになりました。


自分
季節
モノ
タイプ
ところ
子供

選手
タイプ
タイプ
もの
上司

中学校教師

選手

上司
雨降り
人間


日常
食べ物
キャラ
サウンド

もの



具体的な名詞をあえて省いているのですが、
人や上司やタイプ、はたまた企業や物、そして自分なんてものが
「嫌い」なものとして言及されています。

 
少し手を動かしてみて、以下のような処理くらいはした方が良さそうだと分かりました。

- 連体形の形容詞が最初に係るのは、おもに一般名詞。おもしろくない。もう少し後ろまで取得したほうが良い。
- 言及されている対象が何かを考えるために、形容詞の係先の名詞と同格になっている名詞を取得する。

でも、なんとなく分かった。



「指定形容詞係り先検索の検索対象が狭すぎな件について、簡単に考える」が目的だったので、簡単に考えてみます。

簡単に考えると、指定できる形容詞が自由だと、
おそらくすごく便利だと思います。

現状でも、上手に検索結果を利用することで、
急激にみんなが言及している形容詞のランキングを作れますよね。

このランキングを様々な形容詞に対して適用してみると、
わりと面白いことになりそうだと分かります。

たとえば、「うれしい」の検索結果を見てみると、
「キャラメルコーン」のような固有名詞も含まれています。

ということは、最も今嬉しいワードが分かりますし、
最も今嫌われているワードも分かるわけです。

嫌い、悪い、臭いなど極めてネガティブな形容詞の係先を
Yahoo自らが明らかにする必要はなさそうですよね。

しかもネガティブな情報を発信しているユーザが特定できてしまうときに、
Yahoo側には、いろいろ面倒なことが起こりそうな気もします。

ここら辺が、指定形容詞係り先検索の検索対象が狭すぎる原因じゃないかと。

まとめ


指定形容詞係り先検索は研究用途に使うには、ちょっと物足りません。

でも、このような結果を出すしか無かった大人の事情がありそうなことも、
ちょっと試したら、微妙に分からなくもないような気がしてきました。

とはいえ、非常に有用な資源がぶら下がっている状態だと思うので、
研究用途に限り形容詞を網羅的に処理した結果を提供する枠組みを
用意していただけると、すごく嬉しいなぁと、感じました。

疲れたのでおしまい。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2008-03-20 Thu

『Redsun』 学習者の英語を対象としたローマ字語認識ツール


NLP2008で紹介されていたアプリ。Javaによる実装。

- Redsun: ローマ字語認識ツール
-- http://www.ai.info.mie-u.ac.jp/~nagata/tools/redsun/index.html

Redsunは,与えられた英文中のローマ字語を自動的に発見するツールです.Redsunの特徴として,綴り誤りを多く含む英文でもローマ字語を精度良く認識できる点が挙げられます(例えば,GnbaruやIppaisなどを認識可能).



~nagata/tools以下に、他のツールもあるのでチラ見しとくと良いかも。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2007-05-17 Thu

CaboChaにUTF-8な文字列を入力できない問題

CaboChaにUTF-8な文字列を入力したいと思って、
いろいろと試してみて分かったことがあるのでメモ。

入力した文字をCaboChaに理解させるためには、
CaboChaのmodelをUTF-8に変換する必要がある。
そのためにmodelのtext表記版をUTF-8化する。
これをUTF-8にして、コケるのは実はCaboChaじゃなくて
YamChaのPKE.pmの内部でmkdartsする部分。
これは単体配布版のdarts-0.31に差し替えても落ちる。
たぶんmodelに書いてあるエントリUTF-8用に
ソートされていないのではないだろうか。
もしくはmodelをPKEで読み込んだあとのソートが
うまくいっていないのではないだろうか。

そこらへんを見なきゃいけないのでは、と言うところで
時間が切れてしまったのでCaboChaに入力するためだけに、
MeCabの出力をeucにして、またutfに戻すむなしい処理を追加した。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |