前回、「検索結果の疑問を解消するための検索の基礎」で単語単位でインデキシングする前提で説明しましたが、今回は文などを単語単位で分割するために使う技術である形態素解析について触れます。仕組みについて説明します。解析精度を上げるために辞書に単語を追加したことのある方もいると思いますが、動作原理を理解することで単語を追加する際に適切な生起コストを設定できるようになったり、学習の際に適切なパラメータを設定できるようになったりするはずです。辞書のデフォルト設定前提で説明します。内部でどのようなことを行っているかについて説明します。どのようにコストを決定しているかについて説明します。形態素解析した結果です。入力文が適切に分割され、適切な品詞が割り当てられています。使って形態素解析する際に内部でどのようなことが行われているかを説明します。ラティスを構築するラティスから最適なパスを選択するラティスとは、考えられる全ての解を表現したデータ構造で、例えば次のようなデータです。文末を意味しています。各ラティスのノードには単語の生起コスト、エッジには品詞の連接コスト*2が割り当てられています。最適なパスを選択する際には累積コストを最小にするパスを選択します。累積コストを最小にするパスは動的計画法により効率的に求めることができます(ビタビアルゴリズム)。ラティスの構築と最適パスの選択ラティスを構築してから最適なパスを選択すると前述しましたが、実際にはラティスの構築と累積コストの計算は同時に行われ、ラティスの構築が完了した時点で最適パスが求まる形になっています。具体的には次の手順によってラティスの構築と最適パスの選択を行います。上記の処理は次のスライドを見てもらうとイメージが付きやすいと思います。太いエッジは、右側のノード(単語)にとって累積コストが最小になるパスを意味しています。ようなものと理解しておけば大丈夫です。実際に生起コストや連接コストを出してみるとスライドのとおりになっていることがわかります。オプションで出力形式を指定することで、デフォルトの内容に加えて生起コスト、連接コスト、累積コストも表示しています。0,-409,6327未知語処理ラティスを構築する際、辞書に登録されている単語しか考慮しない場合、例えば次のように任意の数字を処理するには考えうる全ての値を辞書に登録しておかなければ正しく解析できません。つの単語とみなすようにしています。これによって、ラティスを構築する際に未知語のノードを追加し、未知語を含んだ解を選択することも可能になります。