人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

■ 2 つの文(日本語のもの)の間の類似度を算出するアルゴリズムを紹介してください。

●質問者: alembert
●カテゴリ:コンピュータ 学習・教育
✍キーワード:アルゴリズム 日本語
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● negipo
●35ポイント

門外漢なのでちょっと怪しい回答になります。ご了承下さい。

形態素解析

http://ja.wikipedia.org/wiki/形態素解析

や、

N-gram

http://www.shuiren.org/chuden/teach/n-gram/index-j.html

を用いて各文書から要素を抽出し、さらに文書間の各要素の共起関係を見ることで類似度がある程度算出出来ると思います。全要素中の何%が共起していた、と言うような。

一般的にはTF/IDFを用いて算出した文書を規定するような重要語句を用いて、意味空間に特徴ベクトルとして各文書を定義し、さらに各ベクトル間の距離を求める方法が挙げられるようですが

http://www.dl.kuis.kyoto-u.ac.jp/lecture/doc/infosystem02.pdf

2文書の類似度を算出するとなると、データベースとなるような文書群が存在しない為にTF/IDFを適用する意味が殆ど無いように思います。


2 ● s34itl
●35ポイント

目的がわからないので、一般的な方法を2つ紹介します。

????????

日本語に限らず自然言語処理では、2つの文の類似度というか、相違度を測る尺度として、「編集距離」がよく使われます。英語のスペルチェックで広く使われている考え方です。

http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B...

・文字列Aのある箇所に1文字を挿入すれば文字列Bと一致する場合(挿入)

・文字列Aのある箇所に1文字を削除すれば文字列Bと一致する場合(削除)

・文字列Aのある箇所の前後を入れ替えれば文字列Bと一致する場合(置換)

をそれぞれ距離1と定義し、このような箇所がいくつあるかにより、2つの文字列間の相違度を数値化します。同じ文字列なら距離距離=0となります。

挿入、削除、置換を行なう単位としては、目的に応じて、文字、単語の双方が使われます。また、置換は削除と挿入の2操作に還元できることから、置換を使わない流儀もあります。

距離計算アルゴリズムは下記に載っています。

http://www-06.ibm.com/jp/developerworks/java/041217/j_j-jazzy.ht...

http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm

????????

別の考え方として、異なる語であっても意味的に似た単語であれば類似度が高くなるよう、シソーラス(類語集)を用いる方法があります。シソーラスは単語が階層的にグループ化されているため、階層の違いを距離に見立てて類似度を計算しようというものです。単語の類似度を集計して文の類似度とします。

二単語の類似度計算には多くの方法が提案されています。(シソーラス and 距離 で検索すれば多数見つかります。)例えば、下のurlの26ページには、二単語の類似度として、(dc×2)/(di+dj) が提案されています。(di、dj、dcは、単語i、単語j、共通上位ノードcの深さ)

http://www.jaist.ac.jp/~kshirai/lec/i223/09.pdf

この場合、シソーラスを入手する必要がありますが、有料のものでは次があります。

http://shop.vector.co.jp/service/catalogue/sr073054/

日大の荻野先生に連絡すれば無償で送ってくださるそうです(利用条件に注意)。

http://www.chs.nihon-u.ac.jp/jp_dpt/ogino/

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ