第 7 章 リンク解析 111
9.2 インデキシング
9.2.1 概要
本節ではインデックスデータについて述べる.TSUBAKIでは転置インデックス方式を採用している.
転置インデックスを100万文書単位で作成し,検索時にデータを120並列に引くことで,1.2億ページを 対象とした検索を実現している.
インデックスに登録されるタームとしては,単語(出現形),単語(代表表記),係り受け(出現形),係 り受け(代表表記),同義表現の5種類があり,それぞれについて,文書頻度,出現文書ID,出現位置,
頻度,タームの素性情報がインデックスに登録される.タームは標準フォーマットに含まれる言語解析結 果から抽出されるため,インデキシングの時に改めて文書は解析しない.また,近接検索(フレーズ検索 を含む)および,スコア計算時にタームの出現位置を利用するため,タームの出現位置をインデックスに 登録している*2.出現位置は,文書の先頭から数えて当該単語が何単語目かを意味する.
インデックス作成の概要を図9.2に示す.作成の手順は以下の通りである.
Step 1: Web標準フォーマットデータからタームを抽出し,タームファイルを作成する
Step 2: 文書毎に作成されたタームファイルを100万文書単位にマージする
Step 3: タームファイルをバイナリ化する
Step 4: タイトル,URL,文書頻度データベースを構築する
*2係り受けタームの出現位置は必要でないが,インデックスへのアクセスを統一的に扱うため,出現位置の情報をインデックス に書き出している.
9.2 インデキシング 131
図9.2 インデックス作成の流れ
9.2.2 タームファイルの作成
個々の標準フォーマットデータからタームを抽出しタームファイルを作成する.図9.3にタームファ イルの例を示す.タームファイルでは,見出しの辞書順(utf8)に従ってタームの情報が保存されている.
見出しの末尾に付いている「*」はそのタームが出現形であることを表しており,フレーズ検索時に利用 される.
タームファイルのフォーマットを図9.4に示す.LABELはタームの見出し,SIDはタームが抽出され た文書ID(SID),TOTAL FREQはタームの出現頻度,SENT IDはタームの出現している文IDであ
る.POS DATAはタームの各出現に関する情報を保持するデータであり,出現位置(POSITON),頻度
(FREQ),素性(FEATURE)からなる.FREQがFloatになっているのは,同義表現タームの場合,1 未満の値をとるためである.同義表現タームの場合,その頻度としてSynGraphより与えられるスコア が用いられる.FEATUREは,タームの各出現に対して付与されるブロックタイプなどの情報である.
32ビット整数で実装されており,各ビットは対応する素性が発火しているかどうかを表す.現状で導入 されている素性を表9.1に示す.例えば,FEATUREの値が128(010000000)の場合,当該タームがメイ ンテキスト領域に出現していたことを意味する.今後はブロックタイプ情報に加え,SynGraphより付与 される文法素性や,係り受けタームにおける格情報を素性ビットに加える予定である.
以下では,標準フォーマットデータから抽出されるタームについて述べる.
s1178:銀幕 0181640135:2.97@2,19,24#46&0.99&16,191&0.99&256,227&0.99&64 s1196:楽しむ 0181640135:1.98@50,60#373&0.99&16,703&0.99&16
s1221:児童 0181640135:0.99@8#107&0.99&16 :
ここ* 0181640135:1@15#160&1&16
こと* 0181640135:2@54,56#533&1&16,595&1&16 こども* 0181640135:1@8#107&1&16
こども*->用語* 0181640135:1@8#107&1&16 この 0181640135:1@62#749&1&16
この* 0181640135:1@62#749&1&16 :
多->行 0181640135:1@19#198&1&256 子供 0181640135:1@8#107&1&16 子供->用語 0181640135:1@8#107&1&16 学 0181640135:1@8#109&1&16
学* 0181640135:1@8#109&1&16
学*->教材* 0181640135:1@8#109&1&16
: 図9.3 タームファイルの例
TERM FILE→TERM INFO+
TERM INFO→LABEL SID : TOTAL FREQ@SENT ID + #POS DATA+
POS DATA→POSITON & FREQ & FEATURE LABEL→String
SID→String
TOTAL FREQ→Float SENT ID→Integer POSITON→Integer FREQ→Float FEATURE→Integer
図9.4 タームファイルのフォーマット
9.2.2.1 単語ターム
SynGraphの解析結果から,単語の出現形,代表表記を単語タームとして抽出する.単語の出現形はフ
レーズ検索時に利用する.また,代表表記は内容語のみ抽出する.JUMANの代表表記をタームとして 抽出することで,「子供」「子ども」「こども」のような表記の揺れが解消され,検索漏れを軽減する効果が 期待できる.例えば,図6.19に示した文「子ども服をせんたくする」の言語解析結果からは以下の語が タームとして抽出される.
単語ターム(出現形): 子ども,服,を,せんたく,する
9.2 インデキシング 133
表9.1 素性ビット ビット 素性
下位 1 ブロックタイプ(タイトル)
↑ 2 ブロックタイプ(キーワード) 3 ブロックタイプ(ヘッダー) 4 ブロックタイプ(フッター) 5 ブロックタイプ(リンク) 6 ブロックタイプ(画像) 7 ブロックタイプ(フォーム) 8 ブロックタイプ(メインテキスト)
↓ 9 ブロックタイプ(未判定) 上位 10 インリンク
図9.5 「子ども服をせんたくする」をKNPで解析して得られる係り受け関係(代表表記化済み,下 線が引かれている単語は内容語)
単語ターム(代表表記): 子供,服,選択,洗濯
「せんたく」のように複数の代表表記(「洗濯」「選択」)が考えられる単語については,全ての表記が文書 に出現したものと見なす.この時,各単語の出現頻度は,代表表記の個数で割った値になる(つまり,「せ んたく」が1回だけ現れる文書では,「洗濯」および「選択」が0.5回ずつ出現していると見なされる.)
9.2.2.2 係り受けターム
言語解析結果から係り受け関係を抽出し,係り受けタームとしてインデックスに登録する.図6.19に 挙げた言語解析結果から得られる係り受け関係を図9.5に示す.この結果からは抽出される係り受けター ムを以下に示す.
係り受けターム(出現形): 子ども→服,服→せんたく 係り受けターム(代表表記): 子供→服,服→洗濯,服→選択
TSUBAKIでは,文節間ではなく内容語間の修飾関係(子供→服)を係り受け関係と見なす.単語ターム
と同様に,係り先または係り元に複数の代表表記がある場合は,その全ての組み合わせを係り受けターム として抽出し,その出現頻度は,組み合わせの数で割った値とする.
9.2.2.3 同義表現ターム
言語解析結果より語・句の同義表現を抽出し,それを同義表現タームとしてインデックスに登録するこ とで,より柔軟な検索を実現する.同義表現タームを用いることで,クエリとして「乳児の虫歯を予防す る」が与えられた場合であっても,「乳児」が「赤ちゃん」と,「予防」が「防ぐ」と同義関係にあること から,「赤ちゃんの虫歯を防ぐには...」と書かれた文書を検索することが可能になる.
SynGraphで解析することで得られるSYNノードを同義表現タームとして抽出する.例えば,図6.21
図9.6 インデックスデータのフォーマット
からは,以下の同義表現タームが抽出される.
s116:乳飲み子/ちのみご, s2914:子女/しじょ<上位語>, s10762:子<上位語>, s2995:小児/しょうに<上位語
>, s34:回避/かいひ, s29239:防ぐ/ふせぐ, s4815:防止/ぼうし, s4814:防ぐ/ふせぐ, s29241:風などをさえ ぎる<上位語>, s807:支える/ささえる<上位語>, s2344:保護/ほご<上位語>, s733:守備/しゅび<上位語>, s1131:攻める/せめる<反義語><否定>
同義表現ターム抽出する際,SYNノードに付与されている以下の文法素性は削除する.
<可能>,<尊敬>,<受身>,<使役>
同義表現タームについては,SynGraphより与えられるスコアを出現頻度と見なし,インデックスに登 録する.例えば,「赤ちゃん」に対して「s116:乳飲み子/ちのみご」というSYNノードが付与されるが,
この時,この文書にはSYNノード「s116:乳飲み子/ちのみご」が0.99回出現しているものと考える.
また,複合語に対して1つのSYNノードが付与されることがある.例えば,「京都大学」に対しては
SYNノード「s10260:京大」が付与される.このような場合,SYNノードの出現位置は,付与している複
合語の主辞の出現位置とする.先程の例の場合,SYNノード「s10260:京大」の出現位置は,「大学」の出 現位置と同じになる.
9.2.3 タームファイルのマージ
標準フォーマットデータ毎に作成されたタームファイルをマージする.マージは2段階に分けて行う.
まず,タームファイルを1万件単位でまとめる.この操作はメモリ上で行う.先述したようにTSUBAKI では,100万文書単位でインデックスデータを作成・管理している.そのため,1万件毎にマージされた ファイルを100件マージし,100万件分のタームファイルを作成する.この操作はメモリ上では難しいた めディスク上で行う.
9.2.4 タームファイルのバイナリ化
9.3 検索 135