38
WordNetで作ろう! 言語横断検索サービス Shintaro TAKEMURA d.hatena.ne.jp/taos twitter.com/ stakemura facebook.com/ shintaro.takemura 第2回さくさくテキストマイニング勉強会

WordNetで作ろう! 言語横断検索サービス

Embed Size (px)

DESCRIPTION

第2回さくさくテキストマイニング勉強会資料です @stakemura #sakuTextMining

Citation preview

Page 1: WordNetで作ろう! 言語横断検索サービス

WordNetで作ろう! 言語横断検索サービス

Shintaro TAKEMURA d.hatena.ne.jp/taos

twitter.com/stakemura facebook.com/shintaro.takemura

第2回さくさくテキストマイニング勉強会

Page 2: WordNetで作ろう! 言語横断検索サービス

背景

• 社内Google Codeみたいなものを想定してください

– 登録されるプログラムが増え続けるとどうなる? → 欲しいものがすぐに見つからない状態に

– 生産性を上げるためにより賢いアプローチが必要!

機能がたくさんあるけど、何を使えばいいか わからない…

Page 3: WordNetで作ろう! 言語横断検索サービス

そこで提案

• 検索性能の強化(バイリンガルの如く)

– 日英表記揺れを解決

• 例:“vertex”と”頂点”

– 語義あいまい性も解決

• 例:”divide”と”separate”

• 推薦機能の搭載(貴方に合った結果を)

– 操作履歴に基づく推薦

• Amazonのおススメ機能 を社内情報共有に応用

– 集合知の活用!

本発表では扱いません

Page 4: WordNetで作ろう! 言語横断検索サービス

システムの特徴

• フィールドが多い

– 名称、作者名、概要、内容、マニュアルなど

– 文字数に大きなばらつきがある (名称<概要<内容≪マニュアル) ⇒これが後々に問題に

• ドキュメント規模は小さい

– PC1台で回せるレベル。分散不要

• リンク解析など高度な機能は不要

• 検索システムは自前で構築

– Luceneで要求仕様を全部満たせるかわからなかった

– この判断が正しかったかどうかは後半にて

Page 5: WordNetで作ろう! 言語横断検索サービス

言語横断検索のアプローチ

• 3つアプローチがある

– 「対訳辞書」ベース

• 日本語WordNetのような辞書を活用するアプローチ

• 本発表のメイン(日・英間言語横断検索を扱う)

– 「対訳コーパス」ベース

• 辞書がない、あるいは併用する場合のアプローチ

• 本発表の後半にて軽く触れる

– 「機械翻訳」ベース

• 機械翻訳を用いたアプローチ

• 本発表では触れない

Page 6: WordNetで作ろう! 言語横断検索サービス

WordNet

• http://www.visuwords.com

Page 7: WordNetで作ろう! 言語横断検索サービス

Princeton WordNet 3.0とは

• 出発点は英英辞典

– プリンストン大学で開発

• http://wordnet.princeton.edu/

– 多国語対応を推進する動きあり。

• http://www.globalwordnet.org/

– 約11万7千のsynset(同義語の集合)

– 約15万語(名詞/動詞/形容詞/副詞)

– synset間にいくつかの関係が定義

• hypernym : X hypernym Y → XはYの上位概念(synset)

• hyponym : X hyponym Y → XはYの下位概念(synset)

• holonym : X holonym Y → XはYを持つ(has-a)

• meronym : X meronym Y → XはYの一部(part-of)

Page 8: WordNetで作ろう! 言語横断検索サービス

日本語WordNet ver 1.1のスペック

• NICTで開発

– http://nlpwww.nict.go.jp/wn-ja/

• 無償・BSDライセンス

• SQLite3のDBとして格納(インデックス込み)

– 57,238 synset

– 93,834 words

– 158,058 語義(synsetと単語のペア)

– 135,692 定義文

– 48,276 例文

• 実は対訳辞書として使えます!

Page 9: WordNetで作ろう! 言語横断検索サービス

対訳辞書としてのWordNet

Page 10: WordNetで作ろう! 言語横断検索サービス

Search Engineでの位置づけ

Browser

Text Processing and Modeling

Query

Operations Indexing

Searching

Ranking

Index

Text

query

user interest

user feedback

ranked docs

retrieved docs

logical view logical view

inverted index

Documents

(Web or DB)

Text

Crawler

/ Data

Access WordNet

MeCab

NLTK etc.

Page 11: WordNetで作ろう! 言語横断検索サービス

類義語の抽出

• WordNetから類義語抽出手順(日→英の場合)

– MeCabで標準形と品詞を取得

– 名詞・副詞・動詞・形容詞のみ抽出

– SQLにてword→sense→関連sense→関連word

• select * from word where lemma=? and pos=?, (標準形,品詞)

• select * from sense where wordid=?, (word["wordid"],)

• select * from sense where synset=? and lang=?, (sense["synset"], “en”)

• select * from word where wordid=? and pos=?, (sense2["wordid"], 品詞)

• これでOK?

– 結論から言うと、そのままではまずかった

Page 12: WordNetで作ろう! 言語横断検索サービス

問題1:検索結果が良くない

• 現象

– 意図しない検索結果(複数フィールドに起因)

– 例:aaaで検索すると名称:bbbがトップに

• 解決方法

– UIを増やす ランキングアルゴリズム(tf-idf)を見直す

bbb

fuga

aaaの… aaaから… aaaにより…

aaaが…

aaa

hoge

hogehoge

名称

概要

内容

マニュアル

Page 13: WordNetで作ろう! 言語横断検索サービス

情報検索(Information Retrieval)とは

• 以下の順で解説

– Precision/Recall

– Vector Space Model

– tf-idf (Spärck Jones 1972)

– PRP - Probability Ranking Principle (Rijsbergen 1979)

– BIM - Binary Independence Model

– Naive Bayes

– Okapi BM25 (Robertson 1994)

– BM25F (Robertson 2004) Stephen

Robertson

Keith van

Rijsbergen

Karen Sparck

Jones

Page 14: WordNetで作ろう! 言語横断検索サービス

何が起きたか?

• 検索性能の尺度

– 検索速度

– 更新速度

– 文書容量

– Recall (再現率)

• 検索漏れに関連

• WordNetで改善したが…

– Precision (適合率)

• 検索精度に関連

• 新たな問題として浮上

Page 15: WordNetで作ろう! 言語横断検索サービス

PrecisionとRecall

• Precision (適合率)

– 「全検索結果」に対して「検索要求を満たす結果」の割合

– “MacBook Air 重さ” で 100件 ヒット、うち 85 件が重さがわかるドキュメント = 85/100 = 0.85

• Recall (再現率)

– 「検索要求を満たす全ドキュメント」に対しての「検索要求を満たす検索結果」の割合

– Web上に 90件あると仮定して、ウェブ検索して 85 件が得られた → 85/90 = 0.94

Page 16: WordNetで作ろう! 言語横断検索サービス

PrecisionとRecallのイメージ

• Precision: |C| / |B|

• Recall: |C| / |A|

– どちらも高いほうがよい 検索ノイズも検索漏れも少ないほうがよい

全文書集合

適合文書 検索された文書

A B

C

Page 17: WordNetで作ろう! 言語横断検索サービス

PrecisionとRecallのトレードオフ

• Precisionのみを高めたい

– 適合しない可能性が少しでもある文書を、検索結果から除外

– Recallの低下(= 検索漏れの発生)

• Recallのみを高めたい

– 適合する可能性が少しでもある 文書を、検索結果として採用

– Precisionの低下(= 検索ノイズの発生)

• 両者はトレードオフ関係

– 評価尺度には調和平均のF値を利用

F = 2 / ( 1 / Recall + 1 / Precision )

p

r

better ideal

typical

Page 18: WordNetで作ろう! 言語横断検索サービス

ベクトル空間モデル(Vector Space Model)

• ベクトルで考えてみよう(Bag of Words)

– 文章(document)は単語(term)の集合体

– 検索クエリも単語(term)の集合体

A B C D E

0 ○ ○

1 ○

2 ○ ○ ○

3 ○

4 ○

5 ○ ○

6 ○ ○

{A, B, E}

0, 2, 5, 6

{D, E}

document

term

Q

0 ○

1

2 ○

3

4

5

6

term

query

Page 19: WordNetで作ろう! 言語横断検索サービス

検索と最近傍探索

• ベクトル空間モデルにおける検索とは

– ベクトル空間内で 近いベクトルを探すこと

– 検索ではCosine類似度が一般に用いられる

𝑠𝑖𝑚(𝑑1, 𝑑2) =𝑉(𝑑1) ∙ 𝑉(𝑑2)

𝑉 𝑑1 |𝑉(𝑑2)|

d

q

Page 20: WordNetで作ろう! 言語横断検索サービス

単語の重みを考慮する

• 相関係数を2値からScalarに

– ある or なしだと 1か0かの2値表現

– 出現頻度を反映させてScalarに出来ないか?

A B C D E

0 1.5 0.4

1 0.8

2 0.4 1.2 0.2

3 1.5

4 0.5

5 1.6 2.5

6 0.2 1.0

{A, B, E}

1.5

{D, E}

document

term

Q

0 1.0

1

2 0.1

3

4

5

6

term

Query

Page 21: WordNetで作ろう! 言語横断検索サービス

k k

ii

n

ntf

単語iの出現頻度

文書で出現する総単語数

tf - term frequency

• ある単語が各々の文章にどのくらい出現するか?

• 問題点

– すべての単語が等しい重要度の場合

• 例:ツール,エラー,ファイル…

• 解決方法

– 頻繁に登場する語の影響力を薄める → そこでidf

Page 22: WordNetで作ろう! 言語横断検索サービス

|}:{|

||log

i

itdd

Didf

idf - inverse document frequency

総ドキュメント数

単語iを含む ドキュメント数

• ある単語がどのくらいの数の文書に出現するか?

レア語では高く

頻出語では低く

Page 23: WordNetで作ろう! 言語横断検索サービス

tf-idfによるスコアリング

• 以下の場合に高い

– 少数のドキュメントにtがたくさん出現する場合

• 以下の場合に低い

– ひとつのドキュメントに t が少なく出現する場合

– たくさんのドキュメントに t が出現する場合

Page 24: WordNetで作ろう! 言語横断検索サービス

tf-idfの計算例:インデックス化

文書1 言語(2),計算(1),問題(2)

文書2 計算(1),問題(2),情報(1)

文書3 言語(1),問題(3),情報(2)

文書4 問題(1),情報(1)

言語 文書1,文書3

計算 文書1,文書2

問題 文書1,文書2,文書3,文書4

情報 文書2,文書3,文書4

Page 25: WordNetで作ろう! 言語横断検索サービス

tf-idfの計算例:tf,idfの計算

tf 文書1 文書2 文書3 文書4 idf

言語 2 0 1 0 2

計算 1 1 0 0 2

問題 2 2 3 1 1

情報 0 1 2 1 1.3

単語の出現頻度(term frequency)

全文書数 / 単語の出現する文書数

(inverse document frequency)

Page 26: WordNetで作ろう! 言語横断検索サービス

tf-idfの計算例:検索結果の絞り込み

tf-idf 文書1 文書2 文書3 文書4

言語 4 0 2 0

計算 2 2 0 0

問題 2 2 3 1

情報 0 1.3 2.6 1.3

6 (2) 5 (1)

検索キーワードが、「言語、問題」なら 文章1が第1候補

Page 27: WordNetで作ろう! 言語横断検索サービス

PRP - Probability Ranking Principle

• 情報要求に対して確率論を当てはめるための考え方

• 文書dとクエリqの適合性を確率として表現

– P(R|d,q) … これを求めたい

– Rはdとqが関連することを表す

– R=1 … 関連あり R=0 … 関連なし

– 文書をP(R|d,q)に従ってランキング

• メリット

– tf-idf などのヒューリスティクスも、確率モデルによりアルゴリズムとして解釈しなおすことができる

– 後に示すように、tf-idfによく似たパラメータが出てくる

Page 28: WordNetで作ろう! 言語横断検索サービス

Binary Independence Model [1]

• 仮定 A0

– 文章Dの適合性は、他の文書に依存しない

• P(R=1|D)によるランク付け

– R={0,1} … 適合度を示す確率変数

– D … 文章の中身(この時点ではクエリは考えない)

– ベイズの定理より

• 𝑃 𝑅 𝐷 ∝ 𝑃 𝐷 𝑅 𝑃(𝑅)

• 関係演算子 ∼ を「ランク順位が等しい」とおくと

𝑃 𝑅 = 1 𝐷 ∼𝑃 𝑅 = 1 𝐷

𝑃 𝑅 = 0 𝐷=𝑃 𝐷 𝑅 = 1 𝑃(𝑅 = 1)

𝑃 𝐷 𝑅 = 0 𝑃(𝑅 = 0)

与えられたクエリに対して定数。ランクするだけなら推定の必要なし

Page 29: WordNetで作ろう! 言語横断検索サービス

Binary Independence Model [2]

• 仮定 A1

– 𝐷 = *𝐷𝑤+ … 文章を0 or 1の2値単語ベクトルで表現

• 仮定 A2

– 𝐷𝑤 … はRが与えられた時に相互に独立

• 実際にはそんなわけがない(単語並び替えても同じ?)

• が、仮定しなければ組み合わせ爆発を起こす

• Naive Bayes分類の仮定でもある

• よって

𝑃 𝑅 = 1 𝐷 ∼𝑃 𝐷 𝑅 = 1

𝑃 𝐷 𝑅 = 0= 𝑃 𝐷𝑤 𝑅 = 1𝑤

𝑃 𝐷𝑤 𝑅 = 1𝑤

Page 30: WordNetで作ろう! 言語横断検索サービス

Binary Independence Model [3]

• 仮定 A3

– 𝑃 0 𝑅 = 1 = 𝑃 0 𝑅 = 0

– 空文章は、R=0 or 1どちらのクラスにも等しく出現

• ここで追加定義

– 𝑝𝑤 = 𝑃 𝐷𝑤 = 1 𝑅 = 1

– 𝑞𝑤 = 𝑃 𝐷𝑤 = 1 𝑅 = 0

• よって

𝑃 𝑅 = 1 𝐷 ∼ 𝑝𝑤𝑞𝑤𝑤∈𝐷

1 − 𝑝𝑤1 − 𝑞𝑤𝑤∉𝐷

1 − 𝑝𝑤1 − 𝑞𝑤𝑤

= 𝑝𝑤(1 − 𝑞𝑤)

𝑞𝑤(1 − 𝑝𝑤)𝑤∈𝐷

Page 31: WordNetで作ろう! 言語横断検索サービス

推定

• この時点での推定

– もし、全文章がR=0 or 1どちらのクラスに属するかが自明であれば、以下の定義でクエリがどのクラスに属するかが確率で求まる

𝑝𝑤 =𝑁1 𝑤 + 0.5

𝑁1 + 1.0 𝑞𝑤 =

𝑁0 𝑤 + 0.5

𝑁0 + 1.0

– なお𝑁𝑅 𝑤 は各々のクラスでの観察回数

– また確率0を避けるために、適当にスムージング

• 使い道

– 学習データがある際の文章分類タスクといってよい

– もちろんこのままでは検索には使えない

Smoothing

Page 32: WordNetで作ろう! 言語横断検索サービス

推定例(BIM 文章のクラス情報あり)

• 適合文章: 𝐷1 = “a b c b d”, 𝐷2 = “a b e f b”, 𝑁1=2

• 不適合: 𝐷3 = “b g c d”, 𝐷4 = “b d e”, 𝐷5 = “a b e g”, 𝑁0 =3

• 新規文章: 𝐷6 = “b g h”

𝑃 𝑅 = 1 𝐷6 ∼ 𝑝𝑤 1 − 𝑞𝑤𝑞𝑤 1 − 𝑝𝑤

𝑤∈𝐷6

=

2.53∙ 1 −3.54…

3.54∙ 1 −2.53…=1.64

13.67

word a b c d e f g h

𝑁1 𝑤 2 2 1 1 1 1 0 0

𝑁0 𝑤 1 3 1 2 2 0 2 0

𝑝𝑤 2.5/3 2.5/3 1.5/3 1.5/3 1.5/3 1.5/3 0.5/3 0.5/3

𝑞𝑤 1.5/4 3.5/4 1.5/4 2.5/4 2.5/4 0.5/4 2.5/4 0.5/4

gh b

Page 33: WordNetで作ろう! 言語横断検索サービス

Binary Independence Model [4]

• 仮定 A4

– 𝑝𝑤 = 𝑞𝑤 𝑖𝑓 𝑤 ∉ 𝑄 … クエリに出現しない単語は適合、不適合文書において同じくらい出現と仮定

• 仮定 A5

– 𝑝𝑤 = 0.5 𝑖𝑓 𝑤 ∈ 𝑄 … クエリに出現する単語は、適合文章に50%の確率で出現する

• 仮定 A6

– 𝑞𝑤 ≈ 𝑁𝑤/𝑁 … 不適合文章を全体で近似

• 結果

𝑃 𝑅 = 1 𝐷 ∼ 𝑝𝑤 1 − 𝑞𝑤

𝑞𝑤 1 − 𝑝𝑤𝑤∈𝐷

= 1− 𝑞𝑤

𝑞𝑤𝑤∈𝐷∩𝑄

= 𝑁 −𝑁𝑤 + 0.5

𝑁𝑤 + 0.5𝑤∈𝐷∩𝑄

IDF

Page 34: WordNetで作ろう! 言語横断検索サービス

推定例(BIM)

• 文章: 𝐷1 = “a b c b d”, 𝐷2 = “a b e f b”, 𝐷3 = “b g c d”,

𝐷4 = “b d e”, 𝐷5 = “a b e g”, 𝐷6 = “b g h”, N=6

• クエリ: Q = “a c h”

𝑃 𝑅 = 1 𝐷1 ∼ 𝑁−𝑁𝑤 + 0.5

𝑁𝑤 + 0.5𝑤∈𝐷1∩𝑄

=4.5

2.5∙4.5

2.5

• ランキング 𝐷6 > 𝐷1 > 𝐷3 > 𝐷5 > 𝐷2 > 𝐷4

word a b c d e f g h

𝑁 𝑤 2 6 2 3 3 1 3 1

𝑁 − 𝑁𝑤 + 0.5

𝑁𝑤 + 0.5

4.5 /2.5

0.5 /6.5

4.5 /2.5

3.5 /3.5

3.5 /3.5

5.5 /1.5

3.5 /3.5

5.5 /1.5

a c

Page 35: WordNetで作ろう! 言語横断検索サービス

BM25

• 概要(詳細は割愛)

– 𝑑𝑤を文章D内での単語wの出現回数とした場合

– 𝑃(𝑑𝑤)を2つのポワソン分布から成ると考える

𝑃 𝑑𝑤 = 𝑃 𝐸 = 1𝑒−𝜇1,𝑤𝜇1,𝑤

𝑑𝑤

𝑑𝑤!+ 𝑃(𝐸 = 0)

𝑒−𝜇0,𝑤𝜇0,𝑤𝑑𝑤

𝑑𝑤!

• 結果

log𝑃(𝑑|𝑅 = 1)

𝑃(𝑑|𝑅 = 0)≈ (

𝑑𝑤 ∙ (1 + 𝑘)

𝑑𝑤 + 𝑘( 1 − 𝑏 + 𝑏 ∙ 𝑛𝑑/𝑛𝑎𝑣𝑔× log𝑁

𝑁𝑤)

𝑤

文章長の平均

Page 36: WordNetで作ろう! 言語横断検索サービス

BM25F

• 概要(詳細は割愛)

– BM25を複数のフィールドに対応させたもの

• 各フィールドの平均長などがパラメータに

– BM25Fでやっと納得のいく結果が得られた

• 自前の検索エンジンなのですぐ対応できた

• ただしLuceneでのBM25F対応は難しい

– フィールド毎の単語頻度が取得できないため

– どうしても必要であれば、Luceneを改造するか、自前で集計するしかないかも(要調査)

Page 37: WordNetで作ろう! 言語横断検索サービス

まとめ・課題

• まとめ

– WordNetを用いた日英間言語横断検索

– 情報検索基礎(tf-idfからBM25F)

– Luceneと言えども万能ではない

• 課題

– 多言語対応

– Luceneの理解を深める

– より発展的なトピック

Page 38: WordNetで作ろう! 言語横断検索サービス

参考文献

• Christopher D. Manning, Prabhakar Raghavan, and Hinrich Schütze, Introduction to Information Retrieval

• Michael McCandless, Erik Hatcher, and Otis Gospodnetid, Lucene in Action, Second Edition

• Stephen Robertson, Hugo Zaragoza, SIGIR 2007 Tutorials - The Probabilistic Relevance Model: BM25 and beyond.

• Donald Metzler, Victor Lavrenko, SIGIR 2009 Tutorials - Probabilistic Models for Information Retrieval