2つの文章の談話レベルでの類似性を定量的に算出する方法/アルゴリズムはあるでしょうか


たとえば、レーベンシュタイン距離です。
レーベンシュタイン距離の場合は、http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2 を見る限り、自然言語のシンタクス/セマンティクスを考慮していないように思えます。
単語や文レベルでの類似性には信頼性がありそうですが、談話レベルでも有効なのでしょうか。
また、levenshtein gem のような、プログラミング言語 Ruby でのライブラリとして実装があれば、それも知りたいです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/04/15 09:08:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:snow0214 No.1

回答回数470ベストアンサー獲得回数116

ポイント300pt

単純なアルゴリズムですが、辞書も不要で意外と的中率の高いものとしてN-gramがあります。
http://www.shuiren.org/chuden/teach/n-gram/index-j.html

下のブログが参考になります。
http://blog.livedoor.jp/techblog/archives/64737211.html

PHPではN-gramを改良した関数としてsimilar_textが組み込まれています。日本語もUTF-8で渡してやれば、きちんと処理できます。
ちなみに、levenshteinも組み込まれています。

Rubyでの実装は下にあります。
http://freestyle.nvo.jp/archives/919

N-gramやlevenshteinは文法や単語の意味を考慮していません。単語の順序が入れ替わってもそこそこ一致するのですが、異なる単語(同義語)が使われていると、途端に精度が落ちます。

そこで、GoogleではN-gramに加えて形態素解析を使うことで精度を高めているそうです。
形態素解析で単語を切り出して、Googleの巨大な辞書で類似語かどうか検索しています。これだと、談話レベルでもそこそこ当たります。

rubyから形態素解析ライブラリmecabを利用する
http://k-shogo.github.io/article/2013/09/04/ruby-mecab/

優れた検索技術はどちらか---長年の論争がついに決着

http://itpro.nikkeibp.co.jp/members/NBY/ITARTICLE/20030131/1/

id:kitokitoki

基礎的なことから、質問へのご回答まで、ありがとうございました。とくにライブドアブログのリンク先のトライグラムの事例が興味深かったです。

2014/04/10 23:04:06
  • id:karuishi
    多分否定的ではないでしょうか
    談話レベルでの類似性を定量的に算出する方法がリーズナブルな処理時間でさばけるなら
    自動翻訳サイトとかはもっと賢い翻訳内容を返せる気がします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません