    \documentclass[japanese]{jnlp_1.4}
\usepackage{jnlpbbl_1.3}
\usepackage[dvips]{graphicx}
\usepackage{amsmath}

\usepackage{listings, jlisting}

\lstset{language=c,
  basicstyle=\ttfamily\scriptsize,
  commentstyle=\textit,
  classoffset=1,
  keywordstyle=\bfseries,
  frame=none,
  framesep=1pt,
  showstringspaces=false,
  numbers=none,
  stepnumber=1,
  numberstyle=\tiny,
  tabsize=2,
  breaklines=true
}
\makeatletter
\long\def\@makecaption#1#2{}
\makeatother



\Volume{21}
\Number{2}
\Month{April}
\Year{2014}

\received{2013}{9}{25}
\revised{2013}{12}{6}
\rerevised{2014}{2}{7}
\accepted{2014}{2}{10}

\setcounter{page}{301}

\jtitle{『現代日本語書き言葉均衡コーパス』形態論情報アノテーション支援システムの設計・実装・運用}
\jauthor{小木曽智信\affiref{Author_1} \and 中村　壮範\affiref{Author_2}}
\jabstract{
『現代日本語書き言葉均衡コーパス』は1億語を超える大規模なコーパスであり，17万ファイル以上のXML文書に短単位・長単位の形態論情報アノテーションが施されている．このコーパスの構築を目的としてアノテーションのためのシステムが開発された．このシステムは，辞書見出しデータベースと，タグ付けされたコーパスとを関連付けて，整合性を保ちつつ多くの作業者が編集していくことを可能にするものである．このシステムは，関係データベースで構築されたサーバ「形態論情報データベース」と，辞書を参照しながらコーパスの修正作業を可能にするコーパス修正用のクライアントツール「大納言」，形態素解析辞書UniDicの見出し語の管理ツール「UniDic Explorer」から成る．本稿はこのデータベースシステムの設計・実装・運用について論ずる．

}
\jkeywords{コーパス管理ツール，現代日本語書き言葉均衡コーパス，UniDic}



\etitle{Design, Implementation,  and Operation of Annotation Support System for Morphological Information \\
	of BCCWJ}
\eauthor{Toshinobu Ogiso\affiref{Author_1} \and Takenori Nakamura\affiref{Author_2}} 
\eabstract{
``Balanced Corpus of Contemporary Written Japanese'' is a large-scale Japanese corpus of 100 million words. It contains 170,000 XML files annotated with two levels of morphological information: short-unit word and long-unit word. We have constructed an annotation system to compile this corpus. The system allows many users to modify corpus annotations and dictionary entries, which are related to each other, while ensuring consistency. The system consists of a relational database server called the ``Morphological Information Database,'' a client tool that maintains the morphological information of the corpus called ``Dynagon,'' and a tool that manages dictionary entries for morphological analysis called ``UniDic Explorer.'' This paper describes the design, implementation, and operation of this ``Morphological Information Database'' for BCCWJ.
}
\ekeywords{Corpus management tool, Balanced Corpus of Contemporary Written Japanese, UniDic}

\headauthor{小木曽，中村}
\headtitle{『現代日本語書き言葉均衡コーパス』形態論情報アノテーション支援システムの設計・実装・運用}

\affilabel{Author_1}{国立国語研究所}{National Institute for Japanese Language and Linguistics}
\affilabel{Author_2}{マンパワーグループ株式会社}{ManpowerGroup Co., Ltd.}



\begin{document}
\maketitle

\section{はじめに}
\label{sec:introduction}

国立国語研究所を中心に開発された『現代日本語書き言葉均衡コーパス（BCCWJ）』\cite{前川2008}\footnote{現代日本語書き言葉均衡コーパス http://www.ninjal.ac.jp/corpus\_center/bccwj/} は17万ファイル以上のXML文書に短単位・長単位の二つのレベルの形態論情報アノテーションを施した，1億語を超える大規模なコーパスである．コーパスの構築期間は5年以上に及んだ．BCCWJの形態論情報付与には，新たに開発された電子化辞書UniDic\footnote{UniDic http://sourceforge.jp/projects/unidic/} が用いられたが，UniDicの見出し語はBCCWJ構築と並行して整備されたため，コーパスの形態論情報の修正とUniDicの見出し語登録は整合性を保ちつつ同時並行で進める必要があった．

また，BCCWJの形態論情報アノテーションでは全体で98\%以上の高い精度が求められ，これを実現するためには自動解析結果に対して人手による修正を施して精度を高める必要があった．1億語規模のコーパスにこうしたアノテーションを施すためには，作業体制も大きな規模になり，コーパスのアノテーターは最大で20人ほどが同時にフルタイムで作業に当たった．作業は国語研究所の内部だけでなく，外注業者等の研究所外部からも行われる必要があった．こうした作業環境を構築するためにはアノテーションを支援するコーパス管理システムが必要とされる．

このような大規模なコーパスへのアノテーションを支えるため，筆者らは，形態論情報がタグ付けされた大規模なコーパスと辞書の見出し語のデータベースとを関連付け，整合性を保ちつつ，国語研究所の内部だけでなく，研究所外部からも多くの作業者が同時に編集していくことを可能にするシステムを新たに開発した．本論文は，この「形態論情報データベース」の設計・実装・運用について論ずる．

本研究の貢献は，1億語規模の日本語コーパスに形態論情報アノテーションを施し，修正することを可能にした点にある．従来のコーパス管理ツールではこれが実現できなかったが，本システムによりBCCWJの形態論情報アノテーションが可能になり，BCCWJを構成する全てのデータは本システムのデータベースから出力された．また，本システムによってUniDicの見出し語のデータ整備を支援し，UniDicの見出し語と対応付けられた人手修正済みの学習用コーパスを提供した．これにより，形態素解析辞書UniDicの開発に貢献した．このシステムは，現在では「日本語歴史コーパス」{\kern-0.5zw}\footnote{日本語歴史コーパス http://www.ninjal.ac.jp/corpus\_center/chj/} の構築にも活用されている．

以下，2章で本論文の前提となる情報について確認した後，3章で関連する先行事例との比較を行う．そのうえで，4章で本システムの概要を説明し，5章で辞書データベース部，6章でコーパスデータベース部の設計・実装・運用について述べる．また，7章で辞書とコーパスを修正するためのクライアントツールについて説明する．


\section{前提となる知識}
\label{sec:knowledge}


\subsection{短単位と長単位}
\label{sec:knowledge_unit}

BCCWJでは，短単位と長単位の二つの言語単位によるアノテーションが施された．短単位は，揺れが少なく斉一な単位となるように設計された短い単位である\cite{小椋ほか2011}．例えば「国立国語研究所で研究している．」という文は，次の10単位に分割される．
\begin{quote}
/国立/国語/研究/所/で/研究/し/て/いる/．/
\end{quote}
個々の短単位には，語彙素・語形・品詞・活用型・活用形といった形態論情報が付与される．短単位への分割と情報の付与は，新たに開発された電子化辞書UniDic \cite{伝ほか2007}を用いた形態素解析によって行われた．形態素解析器はMeCab\footnote{MeCab https://code.google.com/p/mecab/}が用いられた．

一方，長単位はほぼ文節に近い長さの言語単位で，上記の例は長単位では次のように5単位に分割される．
\begin{quote}
/国立国語研究所/で/研究し/ている/．/
\end{quote}
長単位は，コーパス中で出現した短単位を必要に応じて結合させる形で構成され，個々の長単位にはそれを構成する短単位が持つ形態論情報をもとにして長単位としての形態論情報が付与される．この処理は，長単位解析器Comainu~\cite{小澤ほか2011}によって行われた．Comainuの処理により，例えば上の例の「研究し」には，短単位「研究」と「する」を結合して作られる「研究する」という長単位の見出しが付され，全体として一つの動詞として情報が付与される．

このように，短単位は形態素解析用の辞書に見出し語として登録されたものであるのに対し，長単位はそれ自体は見出し語として登録されたものではなく，コーパスでの出現に応じて短単位情報をもとにして構成されるものである．

長単位と短単位はBCCWJの最も基本的なアノテーションの一つであり，公式のコーパス検索ツール「中納言」{\kern-0.5zw}\footnote{中納言 https://chunagon.ninjal.ac.jp}等で利用され，多くのユーザーによって活用されている．


\subsection{形態論情報の精度と修正作業}
\label{sec:knowledge_accuracy}

BCCWJの形態論情報は，コアデータとして選定された約100万語は99\%以上の精度を，それ以外の非コアデータは98\%以上の精度を確保することとされた．この解析精度を実現するために，コアデータについては人手による徹底した修正が行われた．一方，非コアデータは原則として自動解析結果によったが，最終的には人手による修正も含めてこの精度が確保された\cite{国立国語研究所コーパス開発センター2011}．

また，非コアデータからUniDic未登録語が採集され，それに伴う修正をコーパス全体に対して行う必要があったほか，短単位規程の見直しによってコーパス全体に対して特定の語の人手修正の処理を施す必要があった．したがってコーパスの修正作業はコアデータに対して頻繁に行われるだけでなく，1億語以上のコーパス全体を対象に行う必要があった．


\subsection{C-XMLとM-XML}
\label{sec:knowledge_xml}

BCCWJでは，C-XMLとM-XMLの二つの形式のXML文書が作成された\cite{国立国語研究所コーパス開発センター2011}．

C-XMLは，BCCWJのサンプルとして取得されたテキストに文書構造をXMLでアノテーションしたもので，形態論情報データベースにとっては入力となるデータの形式である．このXML形式のデータをインポートし，形態論情報をアノテーションした上で，表形式やXML形式で出力することがこのシステム全体の処理の流れになる．

M-XMLはC-XMLをもとに形態論情報をアノテーションしたXML文書で，このシステムの出力形式の一つである．M-XMLでは，後述する数字の前処理や，一部のタグの変更が行われているため，テキストやタグはC-XMLとは必ずしも一致しない．

なお，誤字修正などがシステム上で行われるため，M-XMLだけでなく，形態論情報を含まないC-XMLも最終版は形態論情報データベースから出力される必要がある．


\subsection{数字の前処理}
\label{sec:knowledge_numtrans}

BCCWJの形態論情報付与では，UniDicを用いた形態素解析に先立って，数字について次のような変換処理がなされた．これは，テキスト中の数字に対して実際に読み上げるときの語として形態論情報を与えられるようにするためである．この処理はnumTrans~\cite{Numtrans}というルールベースのツールによって行われた．
\begin{quote}
例：　１２０円　　→　　百｜二十｜円\\
　　　$<$fraction$>$１／２$<$/fraction$>$　　→　　２｜分｜１
\end{quote}

この処理により処理前後で文字位置がずれたり，分数の分子と分母で文字の順が逆になったりすることがある．

上述のC-XMLはこの変換前のテキストであるのに対し，M-XMLは変換後のテキストに基づいており，これに変換処理の内容（原文文字列と変換タイプ）をXMLでタグ付けして保持している．このため，BCCWJを構築するためのシステムは，この変換処理前後の二つの状態のテキストを適切に保持管理する必要がある．


\section{関連する先行事例との比較}
\label{sec:related}

\subsection{BCCWJの形態論情報アノテーションのための要件}

\ref{sec:introduction}章・\ref{sec:knowledge}章で確認したことを踏まえるとBCCWJに形態論情報のアノテーション施すためには，少なくとも次の要件を満たすシステムが必要とされる．

\begin{enumerate}
\def\theenumi{}
\item	1億語規模のコーパスを格納して実用的な検索や修正が行えること
\item	辞書を参照しその情報を用いてコーパスのアノテーションが行えること
\item	辞書（語彙表）とコーパスとを同期して整合性を保つことができること
\item	形態素解析によって付与された単語境界を容易に修正可能なこと
\end{enumerate}

BCCWJの修正作業では\ref{sec:knowledge_accuracy}節で見たとおり，1億語規模のコーパスを対象に，同様の誤りを一括して修正する必要がある．したがって，(i)は最も重要な要件である．
さらに，BCCWJの構築では，階層構造を持つ新しい電子化辞書UniDicのために専用の辞書データベースを用意し，その見出し語を用いてコーパスを修正する必要があった．また，辞書とコーパスが同時並行で拡張されることから，辞書とコーパスを関連付けて管理し，整合性を保つことが必要となる．したがって，(ii) (iii)の辞書連携の機能も欠くことができない．

これに加えて，分かち書きがなされない日本語のテキストを対象とすることから，(iv)の要件も強く求められる．英語を初めとする分かち書きがなされる言語では，既存の境界にしたがって単語に対してアノテーションを付与すれば良いため，単語境界の修正は重要な問題ではない．しかし日本語では，自動形態素解析によって分割された単語の境界自体が誤っている場合が少なくないため，境界を変更する修正が頻繁に行われるからである．


\subsection{既存のアノテーションツールとの比較}

人手による修正を加えた日本語コーパスで，1億語を超える規模のものはこれまでに構築されてこなかったこともあり，管見に入る限り，前節の要件を完全に満たす先行事例は存在しない．しかし，コーパスへのアノテーション支援ツールには多くの実装がある．既存のツール類が上記の条件をどの程度満たしているのかを調査した．

取り上げたのは，次の4つの実装である．多くのツールの中で，日本語の形態論情報付きコーパスの管理ツールとして実績があるChaKi \cite{Matsumoto2005}の最新版と，比較的最近になって発表されたツールに注目した．

\begin{itemize}
\item ChaKi.NET\footnote{http://sourceforge.jp/projects/chaki/}
\item BRAT \cite{Stenetorp2012}\footnote{http://brat.nlplab.org/}
\item SLATE \cite{Kaplan2011}\footnote{http://www.cl.cs.titech.ac.jp/slate/}
\item Anotatornia \cite{Przepiorkowski2011}\footnote{http://zil.ipipan.waw.pl/Anotatornia/}
\end{itemize}

BRATはWeb上での使いやすいインターフェイスを備える汎用のアノテーションツールであり，係り受け・固有表現・照応・句のチャンキングなどのアノテーションに利用されている．SLATEもまたWeb上で容易に使える汎用のアノテーションツールであるが，さらにアノテーションの版管理まで考慮したものになっている．Anotatorniaはポーランド語のコーパス (National Corpus of Polish) 構築のために開発されたアノテーションツールで，形態素解析辞書との連携が可能である．

これら4つのツールと，本研究のシステムについて，前節でみた要件と，利用のしやすさ，実装に利用されている技術の観点から比較した結果を表 1にまとめた．表中，「○」は条件を満たすもの，「△」は限定的に要件を満たすもの，「×」が満たさないものである．

\begin{table}[b]
\caption{先行事例と本システムの比較}
\input{ca11table01.txt}
\label{tab1}
\end{table}

表\ref{tab1}のうち，BCCWJの構築にとって最も重要なのは，前節で確認したとおり，大規模データへの対応，単語境界修正，辞書連携の機能である．

BRATとSLATEは，いずれもWeb上で動作する汎用のアノテーションツールとして開発されたものであり，表\ref{tab1}において両者とも同じ結果となっている．これらWeb上の汎用ツールは，導入の敷居が低く作業者も容易に利用が可能だが，比較的少数の文書ファイルに対してアノテーションを施すことを前提としており，BCCWJ構築のように，大量の文書を一度に修正するような作業には向いていない．また，一般に単語よりも上位のレベルでのアノテーションに用いられることを想定していると思われ，文字列を単位としたアノテーションが可能ではあっても，単語境界の修正に適したツールにはなっていない．また，多くの語の形態論情報を一括で修正するような作業には向かない．

Anotatorniaは単語境界の修正や辞書連携が可能であるが，ポーランド語の特定の電子辞書に対応したものであるため，BCCWJでの利用には適さない．また，DBMSに軽量なSQLiteを用いたWebベースのシステムであるため，大規模データの処理にも向かないと考えられる．

ChaKiは，日本語コーパス管理に関係データベースを用いる\citeA{浅原ほか2002}の設計にもとづき，前節で見たような日本語の形態論情報アノテーションの特徴を踏まえたコーパス管理システムとなっている．そのため，単語境界修正や辞書との連携が可能であるうえに，係り受けやチャンキング，グループ化など多様なアノテーションを可能にしている．しかし，大規模データへの対応で難があり，現在のChaKi.NETの実装では1,000万語を超えるコーパスを格納すると実用的な速度が出ず，多数の作業者が十分な速度と同時実行性を以て利用することはできなかった．


\subsection{本システムの優位性と問題点}

前節で確認したとおり，最も重要となる大規模データへの対応，単語境界修正，辞書連携の3つを満たすシステムは，本システムしか存在しない．日本語の形態論情報アノテーションに適した機能を持ち，１億語を超える規模のコーパスを一度に取り扱うことを可能にしたこと，そして辞書データベースとの完全な連携が本システムの特長である．

本システムはBCCWJにあわせて作り込まれているため，\ref{sec:knowledge}章で挙げたBCCWJ独自の処理にも対応している．また，階層構造をもつUniDicの辞書データベースを包含しており，アノテーションツールに留まらない言語資源管理のシステムとなっている．

一方で，本システムにはいくつかの問題点も存在する．BCCWJに特化した設計となっているため汎用性に乏しいこと，Webベースのシステムではないためクライアントソフトウェアの配布が必要であり導入の敷居が高いこと，フリーウェアではなくプロプライエタリなソフトウェアを用いて構築されているため配布が難しいこと，などは他のシステムと比較して劣る点である．


\section{形態論情報データベースシステムの概要}
\label{sec:bdsystem}

\subsection{形態論情報データベースの構成}

形態論情報データベースは，UniDicの見出し語を格納する「辞書データベース」と，コーパスを格納する「コーパスデータベース」から構成される．図\ref{fig1}にその全体図を示す．形態論情報データベースは，UniDicの見出し語を管理する部分と，コーパスを格納して修正を行う部分に分かれる．これに対応するように，データベースをインスタンスのレベルで，辞書見出しを格納する「辞書データベース」部と，コーパスを格納する「コーパスデータベース」部に分割した．そのうえで，コーパスの形態論情報と辞書の情報を同一に保つために，見出し語表・活用表・変化表などから生成される「語彙表」を挟んで二つのデータベースを連係させた．

\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f1.eps}
\end{center}
\caption{形態論情報データベース全体図}
\label{fig1}
\end{figure}

辞書データベースには，短単位の見出し語表と，これを出現形まで展開するための活用表・変化表が含まれる．辞書データベースの詳細は\ref{sec:dicdb}章で述べる．辞書見出しを出現形まで展開した「語彙表」はレコードごとに語彙表IDが一意に割り振られ，コーパスデータベース内に生成される．

コーパスデータベースには，BCCWJのテキストを形態素解析した短単位のコーパスが含まれる．コーパスのレコードは語彙表IDにより語彙表と関連付けられ，これを介して辞書の見出し表と関連付けられる．なお，コーパスデータベースには短単位を組み上げた長単位の情報が含まれる．長単位は定義上，コーパスに出現したものをそのまま単位として認める形をとるため，辞書データベースとは接続されない．コーパスデータベースの詳細は\ref{sec:corpusdb}章で述べる．

コーパスと辞書は独立性が高く，それぞれが単独でも利用できる必要があるため，コーパスにも辞書データベースがもつ多様な情報が付与されている．次節で見るように，辞書データベースのデータが変更された場合は，語彙表を介してコーパスにも変更が反映される．


\subsection{語彙表展開とコーパスとの同期処理}
\label{sec:sync}

コーパスデータベースと辞書データベースを連携するための仕組みとして語彙表展開と同期処理が重要であるが，この処理は本システムの中でも最もコストのかかる処理のひとつである．BCCWJはコーパスの規模が大きいために出現頻度が数万以上となる見出し語も少なくない．仮に語彙表展開とコーパスとの同期を全てリアルタイム処理で行うとすると，こうした見出し語を変更した場合のコーパスとの同期処理には大きな負荷がかかり，レコードロックなどが頻発し作業上深刻な問題となる可能性がある．そのため，データの変更が及ぼす影響の範囲や処理の必要性に応じて，リアルタイム処理と，通常深夜に行われる日次処理とを使い分けている．

見出し語の変更による当該語の語彙表展開は，語彙表への影響も少なく，また変更した語を即座にコーパス修正に使用できるようにする必要があるためにリアルタイム処理としている．一方，活用表や変化表の変更によって生じる語彙表展開と同期処理では，影響を受ける見出し語が多数にのぼり，関連付けられたコーパスの更新箇所も膨大となる可能性があるため，リアルタイム処理ではなく日次処理により行っている．このようにシステムへの負荷を軽減し作業性を上げるために，辞書データベースとコーパスデータベースはリアルタイムの同期処理のみによる密結合ではなく，日次処理を含めたゆるやかな連携をとる疎結合のシステムとして設計されている．

辞書データベースとコーパスデータベースとの関連付けには，語彙表テーブルが保持する語彙表IDを用いるが，語彙表テーブルはコーパスの各語が持つ属性値\footnote{\ref{sec:corpusdb}章の表\ref{tab8}の基本8属性．}も保持している．語彙表IDと属性値で二重に情報が保持されているため，語彙表IDでの接続が失われた状態でも，属性値の組み合わせにより語彙表（及び辞書データベースの見出し語表）との接続を回復できる．これにより，見出し語の修正によって語彙表IDが変わってしまった場合や，コーパスの修正によって一部の属性が一括変更された場合など，コーパスと語彙表の関連づけが失われた際にも，語彙表IDか属性値のいずれかをキーとして同期をとることができるようにした．

語彙表の更新は，見出し語表の見出し語の追加時・修正時にリアルタイムで該当する語彙表のレコードを自動生成・更新する．これにより辞書追加した語をすぐにコーパス修正に利用できるようにしている．また日次のバッチ処理により上述のコーパスと語彙表との同期処理を行い，語彙表IDと属性値のいずれによっても対応がとれないレコードが発生した場合には作業者に修正を促すことで関連付けを保っている．


\subsection{利用したシステム}

形態論情報データベースで使用した主な機器・ソフトウェアは以下のとおりである．

\begin{itemize}
\item クライアント
	\begin{itemize}
	\item ソフトウェア
		\begin{itemize}
		\item OS: Microsoft Windows XP（後に7に更新）
		\item ツール開発：Microsoft Access 2003（後に2007に更新）
		\end{itemize}
	\end{itemize}
\item サーバ
	\begin{itemize}
		\item ソフトウェア
		\begin{itemize}
		\item OS: Microsoft Windows Server 2003R2 x64 （後に2008R2に更新）
		\item DBMS: Microsoft SQL Server 2005 Standard Edition x64
		\end{itemize}
		\item ハードウェア
	\begin{itemize}
		\item 機種：DELL PowerEdge 2950
		\item メモリ：24.0GB
		\item CPU: Intel Xeon X5355（2.66~GHz 4コア 2×4~MB L2キャッシュ \\ 1333~MHzFSB）×2
		\item HDD: 300~GB 15000~rpm SAS×6（RAID5構成で実質容量 1.5~TB）
	\end{itemize}
	\end{itemize}
\item バックアップストレージ
	\begin{itemize}
		\item ハードウェア
	\begin{itemize}
	\item 機種：DELL PowerVault MD-1000
	\item HDD: 1~TB SATA ×15（うち2台がホットスペア，RAID5 構成で実質容量 11~TB）
	\end{itemize}
	\end{itemize}
\end{itemize}

形態論情報データベースは1台のデータベースサーバに複数の端末からアクセスするクライアント・サーバ型のシステムとして構築されている．プロジェクト開始までの開発期間が限られていたこと，運用中も頻繁な仕様変更が想定されたことなどから，機能追加・変更が容易に行えるAccessでクライアントツールを開発し，DBMSにはAccessとの親和性が高く，データベース管理，分析，チューニング等のツールが充実しているSQL Serverを採用した．

DBMSはBCCWJの電子テキスト化で用いられるJIS X 0213の文字集合\cite{山口ほか2011}を適切に扱える必要があったが，BCCWJ構築開始時点で当該文字集合が適切に扱えるものが少なく，このこともSQL Serverを採用した理由となっている \footnote{データベースの既定の照合順序（COLLATE）は，UnicodeのCJK統合漢字拡張漢字B集合の文字が扱える「Japanese 90 BIN2」とした．}．

なお，所外の作業者などAccessがインストールされていない環境からも作業ができるよう，無償配布されているAccessランタイム上で動作するクライアントツールの外部接続用インストールパッケージを別途用意した．


\section{辞書データベースの設計と実装}
\label{sec:dicdb}

\subsection{見出し語表の設計と実装}

辞書データベースは，形態素解析辞書UniDicの元となるデータベースである．見出し語表のほか，活用表などの辞書作成に必要な情報からなる．

\begin{figure}[p]
\begin{center}
\includegraphics{21-2iaCA11f2.eps}
\end{center}
\caption{UniDic見出し語の階層構造}
\label{fig2}
\end{figure}
\begin{figure}[p]
\begin{center}
\includegraphics{21-2iaCA11f3.eps}
\end{center}
\caption{辞書データベース・見出し語のテーブル設計（短単位）}
\label{fig3}
\end{figure}


UniDicでは図\ref{fig2}のような見出し語の階層構造が設定されている．「語彙素」は国語辞典の見出し語に相当するレベル，「語形」は異語形を区別するレベル，「書字形」は異表記を区別するレベル，「発音形」は発音を区別するレベルである．

辞書データベースの見出し語表は，\citeA{伝ほか2007}の基本設計を踏襲し，
このUniDicで設定されている見出し語の階層構造をそのまま反映させる形で実装した（図\ref{fig3}）．辞書データベースの基本となる見出し語表を構成するのは「短単位語彙素」「短単位語形」「短単位書字形」「短単位発音形」の4つの見出し語のテーブルである．

\begin{table}[b]
\caption{見出し語のテーブルの主要項目}
\label{tab2}
\input{ca11table02.txt}
\end{table}

4つの見出し語のテーブルはそれぞれ一意のIDによって関連付けられており，各IDは計算によってテーブルの階層関係が確認できるように設計した．例えば，語形IDは親となる語彙素のIDに32（一つの語彙素が持ちうる語形の最大数）を乗じたものに自身の語形SubIDを加えたものを一意のIDとしている．IDで関連付けられたテーブル間では，レコードの生成や削除に関連するデータベース制約を設定し，不正な見出し語のエントリを防いでいる．

見出し語のテーブルが持つ主要項目を表\ref{tab2}に示す．
UniDicでは，語彙素・語彙素読み・語彙素細分類・品詞・語形・活用型・書字形・発音形（表\ref{tab2}の列名に◎を付した）の組み合わせによって，見出し語が一意に区別される．辞書データベースの見出し語のテーブルでもこの関係を外部キー制約として記述し，見出し語の二重登録を防いだ．

\begin{table}[t]
\caption{見出し語のテーブルの共通項目}
\label{tab3}
\input{ca11table03.txt}
\end{table}

表\ref{tab2}の項目に加え，見出し語のテーブルに表\ref{tab3}の項目を共通して持たせ，各見出し語のメタ情報を記録した．これにより，見出し語を追加・修正した際の作業者やソースのトレースを可能にし，誤った見出し語の追加・修正への対処を可能にしている．また，状態属性によりジャンル別の形態素解析辞書の作成を可能にしている．


\subsection{語彙表展開の設計と実装}

辞書データベースには，見出し語のテーブルのほかに，活用語を展開するための「活用表」テーブル，語頭・語末変化形を展開するための「語頭変化」「語末変化」テーブルを置き，見出し語をコーパス上に出現する形にまで展開させる．この処理を語彙表展開と呼び，「語頭変化」→「語末変化」→「活用形展開」の順に，見出し語を展開することで行う．以下，この処理の内容について述べる．

\subsubsection*{語頭・語末変化}

語頭・語末変化テーブルは，語形が持つ語頭・語末変化型に応じた語頭・語末文字の変化パターンを記した表であり，語形・書字形の見出し語の語頭・語末変化形を語彙表に展開する処理で使用される．実体は辞書データベース内の語頭変化テーブル・語末変化テーブルである．語頭変化テーブルの主要な項目を表\ref{tab4}に示す（語末変化テーブルは語頭変化テーブルと同様のため省略する）．


主な対象は連濁現象で，例えば「カライ（辛い）」の「語頭変化型」に「カ濁」を設定すると，語頭変化表により基本形「カライ」と，語頭文字を置き換えた濁音形「ガライ」が生成される．データベース上では，この変形は語形テーブルと語頭変化テーブルを語頭変化型で結合することで，各形を生成している．書字形のレベルでは，濁音形の書字形は，漢字表記の場合には基本形と同じものが使われる（例：辛い）が，ひらがな・カタカナで表記されている場合には書字形の先頭部分を変化させたもの（例：がらい・ガライ）を生成する．語末変化も語頭変化と同様で，「語形」が持つ「語末変化型」に応じて，語形変化した形を生成する．例えば「サンカク（三角）」の語末変化型に「ク促」を設定すると，語末変化表により，基本形「サンカク」と，語末文字を置き換えた促音形「サンカッ」を生成する．


\subsubsection*{活用}

活用は，語形が持つ活用型に応じて，活用形を展開する処理である．その処理に用いる活用表テーブルの主要な項目を表\ref{tab5}に示す．

\begin{table}[b]
\caption{語頭変化テーブルの主な項目}
\label{tab4}
\input{ca11table04.txt}
\end{table}
\begin{table}[b]
\caption{活用表テーブルの主な項目}
\label{tab5}
\input{ca11table05.txt}
\end{table}

内部活用型は語彙表展開時に処理内部で一時的に使用されるもので，語形に付与した活用型と詳細活用型，語形に関連付けられた書字形と発音形を専用関数に渡すことで生成される．例えば書字形「辛い」「からい」は同じ語形「カライ（活用型「形容詞-ライ」）を持つが終止形の変化を「辛``え''」「か``れえ''」と区別する必要があるため，内部活用型により活用パターンをより細分化した上で活用変化が行われる．生成された内部活用型により活用表から活用形と活用語尾書字形が取得されるが，同時に書字形の活用部分が「終止形-一般」の活用語尾書字形より取得される．書字形を活用変化した形は，ここで取得した活用語尾書字形をその他の活用形の活用語尾書字形で置換したものにより生成される．

以上の活用表による語彙表展開の流れを図\ref{fig4}に示す．

\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f4.eps}
\end{center}
\caption{活用形の展開の流れ}
\label{fig4}
\end{figure}

活用に際して，書字形が異なると変化する語尾の部分が異なる場合がある．たとえば，カ行変格活用の動詞「来る」では，仮名で書かれた「くる」の場合，未然形の書字形は「こ」，連用形は「き」だが，漢字で書かれた「来る」では書字形はいずれも「来」である．このように，辞書登録されている書字形ごとに活用語尾の長さを変える必要があるため，書字形に「活用型書字形」を持たせて活用形の展開の仕方を変えている．

活用語の変化部分の長さの違いは，発音形についても起こる．たとえば，音便形の処理で語形が「オイ」でおわる形容詞は，その直前の音がオ段の場合には終止形などの発音形を長音にする必要がある（「トオイ」→「トーイ」）が，オ段以外の場合にはその必要がない（「アオイ」→「アオイ」）．このため，発音形に「活用型発音形」を持たせて活用形の展開の仕方を変えている．


\subsubsection*{特殊活用形}

通常の活用形の展開では生成できない，または特定の語においてのみ活用形を展開する特殊な活用形は，「特殊活用形テーブル」に活用した形の書字形を登録する（表 6）．

たとえば活用語尾までがカタカナ表記される「イイ（良い）」「デキル（出来る）」や，活用語尾のない特殊な表記「也」（助動詞「なり」の終止形），特殊な語形「ま〜す」（助動詞「ます」の終止形）などがそれにあたる．特殊活用形に登録した書字形は語彙表生成時にそのまま語彙表に追加される\footnote{特殊活用形を語彙表展開する際の活用形IDは，通常使用されない活用形IDの範囲である480--512を用いる．}．


\subsubsection*{語彙表の展開}

ここまでに説明してきた語頭・語末変化と活用により，語彙表がコーパスデータベース内に生成される．語彙表展開では語形に付与された語頭・語末変化型，活用型により，語頭・語末変化と活用のいずれか，または両方による展開処理が行われる．
図\ref{fig5}に例として形容詞「辛い」の語彙表展開を図示する．

\begin{table}[b]
\caption{特殊活用形テーブルの主な項目}
\label{tab6}
\input{ca11table06.txt}
\end{table}

\begin{figure}[b]
\begin{center}
\includegraphics{21-2iaCA11f5.eps}
\end{center}
\caption{語彙表展開の例}
\label{fig5}
\end{figure}

辞書データベースでは，語彙素テーブルの主要項目のほか，語彙素・語形・書字形・発音形テーブルを結合した主要項目，語彙表テーブルにも一意制約が設定されているため，語彙素・語形・書字形・発音形が登録できてもその後語彙表展開したものが重複した場合には，語彙表展開がロールバックされ登録自体も無効となる．つまり語彙表テーブルは常にデータの重複がない状態であることが保証されている．


\subsubsection*{語彙表ID}

語彙表生成時には語彙表のレコード毎に一意の語彙表IDを割り当てる．語彙表IDは通常10進数の数値として扱われるが，ビット列としてみると，発音形・語頭変化・語末変化・活用それぞれの展開処理において，各変化形の表現に十分なビット幅をフィールドとして追加したものとなっている．図\ref{fig6}に例として形容詞「辛い」を語彙表展開して生成される出現書字形「がらかっ」の語彙表ID（10進数・2進数）を示す．

\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f6.eps}
\end{center}
\caption{語彙表IDの例}
\label{fig6}
\end{figure}

この設計により，語彙表IDのみから，語彙素・語形・書字形等の見出し語のIDや変化形のIDを容易に計算できるようにしている．全体として通常の整数型（32ビット）で表現できる範囲を超えるため，bigint（64ビット符号付き整数）型で表現する．したがって，語彙素IDの最大数は25ビット分（約3400万）確保可能である．


\subsection{辞書データベースの運用}

\subsubsection*{辞書データベースのロック処理}

一般的にクライアント・サーバ型のシステムでは複数の作業者が同時にデータを変更した場合に，処理が混在しデータに矛盾が生じる可能性がある．辞書データベースにおいては，見出し語を変更すると見出し語の各テーブルに設定したトリガにより語彙表展開までが一連の処理として行われるが，語彙表展開の処理は内部に「非語頭語末変化パターンの展開」「語頭語末変化パターンの展開」「特殊活用形の展開」など複数の処理のステップがあり，なおかつ処理中は見出し語表，活用表など複数のテーブルのデータを参照する必要があることから，見出し語の変更から語彙表展開までは形態論情報データベースのなかでもコストがかかる処理となっている．表\ref{tab7}に示すように，語彙表展開処理は，書字形や活用変化パターンを多く持つ語彙素ほど処理に時間を要する．

\begin{table}[t]
\caption{語彙表展開時のコスト}
\label{tab7}
\input{ca11table07.txt}
\end{table}

語彙表展開処理に時間がかかるほど，処理中に他の作業者による見出し語の変更が起こりやすくなり，処理の衝突やデータの矛盾が起こる可能性が高くなる．一般にデータベースでは，複数の処理が混在した際に起こりうるデータの矛盾として「ダーティリード」「反復不能読取り」「ファントムリード」があり，それらを回避するために分離レベル「READ COMMITTED」「REPEATABLE READ」「SERIALIZABLE」をトランザクション開始時に指定できる．分離レベルは同時実行性とのトレードオフの関係にあり， SERIALIZABLEは前述のデータの矛盾を全て回避することができるが，トランザクション中は他の作業者が処理を行えなくなり全体としての作業量が落ちる．そのため，他の分離レベルを使用して同時実行性を維持しつつ，分離レベルでは回避できないデータの矛盾をシステム上で対処するよう設計を行う必要がある．また処理が混在した場合のトラブルとして，複数のトランザクションがたすき掛けでデータをロックし合うことによりお互いの処理が行き詰まる「デッドロック」があるが，これについても対策を行う必要がある．

これらを考慮して，語彙表展開に関連する一連の処理では以下のような設計を行った．

\begin{enumerate}
\renewcommand{\labelenumi}{}
\item	語彙表展開処理内の複数のステップをトランザクション処理とし，分離レベルをREAD COMMITTEDとした．
\item	見出し語の語彙素・語形・書字形・発音形の変更では必ずリアルタイム処理による語彙表展開処理が行われるようにした．
\item	語彙表展開処理内の冒頭で語彙素--語形--書字形--発音形への参照を行うこととした．
\end{enumerate}

まず分離レベルをREAD COMMITTEDを指定することで，ダーティリードを回避しつつ，同時実行性を確保した（a.）．ただしREAD COMMITTEDでは他の作業者によるデータ変更がブロックされず，反復不能読取り，ファントムリードが起こるため，別途回避策をとる必要がある．トランザクション処理中に他の作業者によりデータ変更が行われてしまう反復不能読取りについては，語彙表展開なしに見出し語を変更できないようにし（b.），さらに先行の処理が完全に終了されるまで後続の処理をロック待ちにすることで（a.とc.），複数の作業者が同一箇所について同時にデータ変更が行えないようにすることで回避した．トランザクション処理中にデータが追加されてしまうファントムリードについては，そもそもトランザクション中に他の作業者によりデータが追加されても，作業者にとってはその時点では必要のないデータなので作業上も支障がなく，また語彙表は日次処理により全件が再生成されるため，不正なデータの語彙表展開は排除される．

またデッドロックについては，前述のとおり見出し語変更時の処理を一本化してレコードロックの順番を統一することで回避した．


\subsection{辞書データのエクスポート}

辞書データベースは，コーパスデータベースの修正に用いられるだけでなく，形態素解析用の辞書（見出し語リスト）を出力する役割も担っている．辞書データベースから出力された辞書と，コーパスデータベースから出力される人手修正済みの学習用コーパスを利用して形態素解析辞書が作成された．UniDic 1.x系列の形態素解析辞書の作成に当たっては，辞書データベースの見出し語表・活用表・語頭語末変化表を組み合わせて展開した語彙表を表形式テキストとして出力し，これをMeCab用の辞書のソースデータとして提供した．

さらに，見出し語のテーブルを結合・再構成してUniDicの階層構造を再現したXML形式で出力し，UniDic 2.x系列の辞書データとして提供した．同時に活用表や語形変化表もXML形式で出力し，辞書データベースの大部分をXML形式で外部に提供することを可能にした．


\section{コーパスデータベースの設計・実装・運用}
\label{sec:corpusdb}

\subsection{コーパスデータベースの設計と実装}

\ref{sec:knowledge}章で確認したとおり，BCCWJのテキストはXML文書の形で提供される．テキストの形態論情報は，形態素解析等の自動出力結果を人手で修正した後で，元のXML文書に対するアノテーションとして出力する必要がある．BCCWJでは，短単位と長単位という階層的な関係を持つ2つの言語単位によって形態論情報がアノテーションされるが，この階層関係もXMLのタグによって表現される．BCCWJのコアデータから，
    短単位と長単位のアノテーション例をリスト 1 に示す．
LUWが長単位，SUWが短単位のタグである（一部のタグを省略した）．

関係データベースを用いてこうしたXML文書を扱うために，スタンドオフ・アノテーションの方法に基づき，XML文書が含む文字データ（CDATA）とタグをテーブルに分割し，ファイル先頭からの文字オフセット値（タグを除いた文字の開始終了位置）によって関係づけて管理する設計とした．全体の整合性を保持するため，文字やタグを含む全てのデータの修正をこのデータベース上で行う．このデータベースのテーブル関連図を図\ref{fig7}に示す．

コーパスデータベース中のテーブルは，XML文書起源のものとして「文字」テーブル，「タグ」テーブル，「ルビ」テーブル，「文字修正」テーブルがあり，これに後述する数字処理による「数字」テーブル，形態論情報アノテーションとしての「短単位」テーブルと「長単位」テーブルが加わる．形態論情報も文字位置によってテーブルを関連付けて管理する．このほかに，全文検索用の「文」テーブルや長単位修正作業用の「長単位語彙表」テーブルを置く．このうち，コーパスデータベースにとって必須のデータは文字テーブルと短単位テーブルであり，XML文書の復元や長単位アノテーションを必要としない場合にはこれ以外のテーブルは不要となる．

コーパスデータベースの根幹である短単位テーブルの主要な項目を表\ref{tab8}に示す．

    \begin{lstlisting}[title=\textbf{リスト1}　短単位と長単位のアノテーション例（X-XML）]
<mergedSample sampleID="OW6X_00028" type="BCCWJ-MorphXML" version="1.0">
<article articleID="OW6X_00028_V001" isWholeArticle="false">
<titleBlock>
<title>
<sentence type="quasi">
<LUW B="S" SL="v" l_lemma="第一章" l_lForm="ダイイッショウ" l_wType="漢" l_pos="名詞-普通名詞-一般"　 l_formBase="ダイイッショウ">
<SUW orderID="10" lemmaID="22937" lemma="第" lForm="ダイ" wType="漢" pos="接頭辞"　 formBase="ダイ" pron="ダイ" start="10" end="20">第</SUW>
<SUW orderID="20" lemmaID="2050" lemma="一" lForm="イチ" wType="漢" pos="名詞-数詞"　 formBase="イチ" kana="イッ" pron="イッ" start="20" end="30">１</SUW>
<SUW orderID="30" lemmaID="16559" lemma="章" lForm="ショウ" wType="漢"　pos="名詞-普通名詞-一般" formBase="ショウ" pron="ショー" start="30" end="40">章</SUW>
</LUW>
<LUW SL="v" l_lemma="　" l_lForm="" l_wType="記号" l_pos="空白">
<SUW orderID="40" lemmaID="23" lemma="　" lForm="" wType="記号" pos="空白" formBase="" pron="" start="40" end="50"> </SUW>
</LUW>
<LUW B="B" SL="v" l_lemma="障害者施策" l_lForm="ショウガイシャシサク" l_wType="漢"　l_pos="名詞-普通名詞-一般" l_formBase="ショウガイシャシサク">
<SUW orderID="50" lemmaID="16607" lemma="障害" lForm="ショウガイ" wType="漢"　 pos="名詞-普通名詞-サ変可能" formBase="ショウガイ" pron="ショーガイ" start="50" end="70">障害</SUW>
<SUW orderID="60" lemmaID="15852" lemma="者" lForm="シャ" wType="漢"　pos="接尾辞-名詞的-一般" formBase="シャ" pron="シャ" start="70" end="80">者</SUW>
<SUW orderID="70" lemmaID="15256" lemma="施策" lForm="シサク" wType="漢"　pos="名詞-普通名詞-一般" formBase="シサク" pron="シサク" start="80" end="100">施策</SUW>
</LUW>
<LUW SL="v" l_lemma="の" l_lForm="ノ" l_wType="和" l_pos="助詞-格助詞" l_formBase="ノ">
<SUW orderID="80" lemmaID="28989" lemma="の" lForm="ノ" wType="和" pos="助詞-格助詞" formBase="ノ" pron="ノ" start="100" end="110">の</SUW>
</LUW>
<LUW B="B" SL="v" l_lemma="総合的取り組み" l_lForm="ソウゴウテキトリクミ" l_wType="混" l_pos="名詞-普通名詞-一般" l_formBase="ソウゴウテキトリクミ">
<SUW orderID="90" lemmaID="21023" lemma="総合" lForm="ソウゴウ" wType="漢" pos="名詞-普通名詞-サ変可能" formBase="ソウゴウ" pron="ソーゴー" start="110" end="130">総合</SUW>
<SUW orderID="100" lemmaID="25076" lemma="的" lForm="テキ" wType="漢" pos="接尾辞-形状詞的" formBase="テキ" pron="テキ" start="130" end="140">的</SUW>
<SUW orderID="110" lemmaID="26779" lemma="取り組み" lForm="トリクミ" wType="和" pos="名詞-普通名詞-一般" formBase="トリクミ" pron="トリクミ" start="140" end="160">取組</SUW>
</LUW>
</sentence>
<br type="automatic_original"/>
</title>
</titleBlock>
\end{lstlisting}


\subsubsection*{XML文書と形態論情報のインポート}

XML形式でリリースされるデータをコーパスデータベースにインポートする方法を図\ref{fig8}のように設計・実装した．既述の通り，XML形式のデータを表に変換し，それらの表を，文字位置（ファイル先頭からの文字オフセット値）をキーにしたIDで相互に関係づける．この際，辞書登録やコーパス修正時に確認することが必要なルビタグ・数字タグ・文字修正タグのみを専用のテーブルに格納して編集可能とし，それ以外のタグについては元の形のまま「タグ表」にまとめて保存している．インポート処理の過程で形態素解析の上で妨げとなるタグの除去や，数字変換（後述）などの処理が加わるため，それぞれの表の情報を取り出す段階が異なっている．


\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f7.eps}
\end{center}
\caption{コーパスデータベースのテーブル関連図}
\label{fig7}
\end{figure}

なお，BCCWJでは，\ref{sec:knowledge_numtrans}節で述べた数字変換処理が行われているため，形態素解析結果から原文の文字位置をキーにした短単位テーブルを単純にとりだすことができない．そこで，形態素解析結果を埋め込んだ状態のXMLファイルから，原文文字列や数字タグ・分数タグの情報を元に，元の文字との対応を取りながら文字位置を取得する必要がある．この処理はデータベース外部の解析プログラムによって行っている．

長単位のデータは，修正済みの短単位データをコーパスデータベースからエクスポートし，Comainuによって処理を行った後，データベースの長単位テーブルにインポートする．\ref{sec:knowledge_unit}節で見たとおり，長単位は短単位を組み上げる形で生成される．長単位テーブルからは，長単位の修正作業用に長単位語彙表テーブルを生成する．

以上のような手順でコーパスデータベースに格納されたデータは，後述のクライアントツール「大納言」を通して修正される．

\begin{table}[t]
\caption{短単位テーブルの列名}
\label{tab8}
\input{ca11table08.txt}
\end{table}

\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f8.eps}
\end{center}
\caption{XML文書の形態素解析とインポートの流れ}
\label{fig8}
\end{figure}


\subsection{コーパスデータベースの運用}

\subsubsection*{運用実績}

コーパスデータベースの運用実績は，履歴をもとに集計すると，BCCWJ全体の更新件数が約302万件（約1,000日間），1日あたりの平均更新件数が約2,800件，1日あたりの最大更新件数が約25,000件，最大接続ユーザー数が22名であった（更新件数は一部推計によるものを含む）．

\subsubsection*{コーパス更新時の不整合の回避（ロールバック）}

コーパスデータの更新時には，複数作業者による同一箇所の同時更新による文脈の不整合が発生する可能性が考えられる．このような場合にはロールバックにより不整合が回避されるようシステムを設計している．

しかし，コーパスの同一箇所をほぼ同時に更新する状況は極めて稀である．BCCWJでの作業では，短単位テーブルに約1億2千万件のレコードが存在し，そのうち人手によるデータ更新が302万箇所（推計値）で行われた．しかし，このうち最も近いタイミングで隣接箇所を更新した事例でも14秒以上の間隔があり，近接箇所を1分以内に更新した例も15箇所しか存在しない．また，現在の日本語歴史コーパス修正作業のログ3日間分においては，更新件数は7,858件であったが，不整合が起こりうる同時更新は0件であった．このように，同一箇所の同時更新が発生しにくいのは，コーパスのサイズが極めて大きいことに加え，コーパスデータの更新作業おいて作業範囲や作業内容が作業者間で効率的に割り振られていたことによると考えられる．


\subsubsection*{ジョブ}

リアルタイム更新が必要でない処理や，通常作業のために必要なデータ整備の処理，バックアップ処理などは，必要なタイミングや所要時間などを考慮して，以下のように日中毎時・平日深夜・週末深夜のジョブによりバッチ処理を行った．

\begin{itemize}
\item 日中毎時ジョブ\\
 1時間間隔でトランザクションログのバックアップを行う．作業を中断する必要はなく，通常数秒程度で完了する．
\item 平日深夜ジョブ\\
平日深夜に開始され，翌日の作業開始まで行われる．負荷や排他ロックにより日中に行えない処理（データのインポート，一括変換処理等）や，即時性が必要でないデータの更新（辞書とコーパスの完全同期等）を行う．
\item 週末深夜ジョブ\\
データベースのバックアップやインデックスの再作成，データの削除などを行う．
\end{itemize}


\subsubsection*{バックアップ体制}

データベースは障害時に特定の時点に復旧できるよう完全復旧モデルを採用している．毎週末深夜にバックアップストレージに対してバックアップファイルが作成され，その後，翌週末深夜まで 1 時間間隔でログバックアップを行う．つまり週毎に「完全バックアップ+ログバックアップ」のバックアップセットが作成されることになる．バックアップセットは一定期間保存されたのち，古いものから削除される．

\subsubsection*{コーパスデータベースのチューニング}

コーパスデータベースでは１億語を超える大規模なデータを対象に，複数の作業者が同時に更新処理を行う必要がある．そのため，コーパスデータベースの実装に当たっては処理の高速化とデータの整合性，同時実行性の確保のための対策が重要である．そのために次の(a)〜(c)のような対応を行った．


\noindent
{\bf (a) KWICに最適化した主キー項目の選定}

コーパスデータベースでは，後述する「大納言」でコーパス修正を行うためにKWIC（キーワードの前後文脈情報）を多用する．しかし，あらかじめKWIC情報を作成してデータベース内に格納することはデータベースサイズが肥大化することから困難であり，また最新のコーパス修正結果をもとにしたKWICを表示することが望ましい．そのため，検索の都度，ヒットした語についてリアルタイムでKWICを生成する設計とした．通常，一度の検索で数百〜数千語程度のKWIC作成処理が発生するため，この処理の高速化はシステム全体の処理性能に直結する．

そこで，短単位テーブルの主キーとしてKWIC作成に必須となる「サンプルID」と「連番」を選択することで，この処理の高速化を図った．SQL Serverでは主キーとして設定した項目を元にクラスタ化インデックスが作成されるため，「サンプルID」と「連番」を主キーに設定することで，データベース上でデータが短単位の出現順に物理的に並ぶことになり，語の並び替えが不要となる．またインデックスを経由することなく直接データにアクセスできるため，KWIC生成処理の短単位の組み上げ時のコストを節約できる．約14,000レコード分のKWIC生成に要する時間を比較した結果を表\ref{tab9}に示す．

表\ref{tab9}のSQL文中の「fnGetContextPreOpenClose」「fnGetContextPre」はKWIC生成関数である．検索時間は10回検索を行い最小値と最大値を除いた平均時間となっていて，検索毎にキャッシュを消去することでキャッシュによる高速化の影響を排除した．通常のインデックス項目による場合と比較してKWIC 生成速度が2倍程度に高速化された．

また，コーパス名の検索をサンプルIDの検索に変換にすることで検索の高速化を行った．短単位テーブルにはサンプルIDの上位の括りとして「コーパス名」列がある．コーパス名は定義上ファイルをレジスタ別に分けるための情報だが，短単位テーブルのデータをプロジェクトや用途別に区別することにも利用している．ユーザーが大納言で作業する際は，短単位テーブル全体ではなくあらかじめユーザー毎に割り振られた作業対象（コーパス名）毎に作業を行うことが多い．

このことから，作業者が大納言で検索対象（作業対象）のコーパス名を指定した際に，システム内でコーパス名をサンプルIDに変換するための「コーパス名−サンプルID対応テーブル」を作成した．このことにより，コーパス名による検索を短単位テーブルの主キーであるサンプルIDによる検索に変換することができ，検索対象の絞込が高速化された．書籍・白書・雑誌のコアデータについて品詞を指定して検索した結果を表\ref{tab10}に示す．

\begin{table}[b]
\caption{KWIC生成時間の比較}
\input{ca11table09.txt}
\label{tab9}
\end{table}
\begin{table}[b]
\caption{コーパス名—サンプルID対応テーブルによる検索}
\input{ca11table10.txt}
\label{tab10}
\end{table}

検索時間は10回検索を行い最小値と最大値を除いた平均時間である．検索の都度キャッシュは消去した．SQL文中の「fileList」が「コーパス名−サンプルID対応テーブル」で，これを使用することによりコーパス名を指定した検索速度が100倍程度に高速化された．

\noindent
{\bf (b) トランザクション分離レベルの設定}

短単位テーブルの修正は，そのほとんどが単位境界の切り直しを伴いレコード数が変化することになる．そのため，修正の反映は，レコードの更新処理ではなく，削除処理によって修正前のレコードを削除した後に修正後のレコードを挿入することで行っている．単位境界を変更する場合には，修正後のレコードに文字位置を振り直す処理も必要であり，1 箇所のデータ修正のために複数の処理を実行する必要がある．そこで，これらをまとめてトランザクション処理で実行し，データが1箇所更新される度にトランザクションが終了されるようにした．複数箇所を一度に更新する場合は，ループ処理により複数回処理を実行する．これは大規模な修正を行う際のレコードロックの時間を最小限にし，他の作業者への影響を抑え同時実行性を高めるためのものである．

データの正確性を高めるのであればトランザクションの分離レベルをSERIALIZABLEなどに設定すればよいが，反面，同時実行性は低下することになる．そこで大納言では更新処理が他のユーザーの作業に影響するのを抑えるため，データの更新時のトランザクションの分離レベルをREAD COMMITTEDとした．このレベルでは反復不可能読取りが起こる可能性があるが，更新処理内部に処理前後の文脈を比較する処理を組み込むことで，不正な変更処理が回避されるよう設計した．仮に処理前後の文脈を比較する処理でエラー（文脈が変更される）と判定された場合は，トランザクションがロールバックされ，文脈の整合性が維持される．つまり本文の文脈が書き換わらない限り，複数作業者による同一箇所の同時変更を許容する設計を行っている．

\noindent
{\bf (c) ダーティリードの許容}

他の作業者の更新処理中であってもデータベースからデータが読み取れるように，データの検索やKWIC生成処理時のSELECT文ではダーティリードを許容した．このことにより検索結果やKWIC内に誤ったデータが表示される可能性があるが，データの更新時には文脈チェック処理により不正なデータが検出されるため，不正な書き換えは防止される．この実装により同時実行性が確保され，不正な書き換えの問題も発生していない．


\subsection{コーパスのエクスポート}

人手で修正を行った形態論情報は，元のXML文書にタグとして埋め込んだXML形式でエクスポートすることができる．BCCWJを構成する全てのXML文書（C-XML，M-XML）は，このデータベースから出力された．XMLエクスポート用のSQL文では，各テーブルを結合し，データベース内部でXML型 のデータとして生成した後，ファイル出力している．これによりデータが整形式のXMLであることが保証される．テーブルの結合時には，6.1で示したインポートの流れを逆にたどる．この際，タグテーブルを参照するが，ルビや数字などの別テーブルで管理するタグはタグテーブルからではなく，それぞれのテーブルの情報を元にタグを再構成して出力する．

当然ながら，表形式の形態論情報を出力することも可能であり，BCCWJを構成する表形式の形態論情報データ（短単位・長単位TSV）はこのデータベースから出力された．また，Webベースのコーパス検索ツール「中納言」のソースデータもここから出力されたものである．さらに，形態素解析辞書UniDicの機械学習に用いるコーパスも，コーパスデータベースの短単位テーブルの一部を出力したものである．

なお，データベースに格納されている形態論情報は，インポート前の数字処理を経たテキストを元にしておりBCCWJのM-XMLおよび表形式の形態論情報データではこれを出力しているが，データベース上では原文に相当するC-XMLを元にして管理されているため，数字処理を行わない形でXML文書を取り出すことも可能な設計になっている．


\section{クライアントツールの開発}
\label{sec:client}

\subsection{辞書データベース用ツール「UniDic Explorer」}

辞書管理ツール「UniDic Explorer」は辞書データベースへの見出し語の追加・修正をするために開発したクライアントツールである．ツール上にUniDicの見出し語の階層構造をそのまま可視化しており，階層構造を意識した辞書管理を可能にしている（図\ref{fig9}）．


上段左の検索用コントロールで，各階層の見出し語の情報（語彙素・語彙素読み・語形・書字形・その他）を対象に見出し語表を検索すると，左ペインにマッチした語がUniDicの階層構造を反映したツリー形式で表示される．右ペインには各階層の見出し語が，階層構造を反映した重層的なフォームの形で表示される．

見出し語の追加は，見出し語のテーブルのデータが表示されている画面から「新規」ボタンをクリックすることにより行う．見出し語表のデータベース制約により，見出し語は必ず親となる見出し語に追加する形で入力するよう制限されており，逆に見出し語を削除する場合には，その見出し語の子となっている見出し語をあらかじめ削除しておかなければならない．これによって見出し語表の階層構造の整合性を確保している．画面下部の「ツリーの操作」では，見出し語の移動・コピー・削除を行うことができる．この画面では，当該見出し語だけでなく，子や孫となる見出し語ツリー全体をまとめて処理することができる．

見出し語は語彙表を介してコーパスと接続されているため，当該見出し語のコーパス中での用例をこのツールから確認することができる．当該語のコーパス中の頻度は右ペインの各階層の見出し語の部分に常に表示されている．頻度情報の横の「用例」ボタンを押下することで，当該語のコーパス中の用例を文脈付きで全て表示することができる．

\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f9.eps}
\end{center}
\caption{UniDic Explorer実行画面}
\label{fig9}
\end{figure}


\subsection{コーパスデータベース用ツール「大納言」}

短単位の自動解析精度はおおむね98\%程度であった．長単位解析の精度も（短単位データが全て正解であることを前提として）99\%ほどであり，人手による修正が必要であった．こうした形態論情報アノテーションの人手修正を行うためのツールが，「大納言」である（図\ref{fig10}）．「大納言」の中心となる機能は形態論情報の修正であるが，それ以外にも多くの機能を持つため，画面上段のタブによってモードや機能を切り替えて利用する形になっている．

\begin{figure}[t]
\begin{center}
\includegraphics{21-2iaCA11f10.eps}
\end{center}
\caption{「大納言」実行画面（短単位アノテーションの修正）}
\label{fig10}
\end{figure}


\subsubsection*{形態論情報の修正機能}

多くの修正作業は，形態論情報を使った検索の結果に対して行うことになるが，その検索条件の指定では，「語彙素」「書字形」などの単純な形態論情報の検索だけでなく，形態論情報を前後5グラム分まで自由に組み合わせた高度な検索が可能である．また，単位境界を意識しない全文検索を行って，検索結果に形態論情報を表示させることもできる．

短単位アノテーションの修正作業は，短単位の「分割結合」モードで行う．検索結果から修正対象を選択し，当該箇所の短単位境界を文字単位で分割・結合して正しい境界を指定する．境界が直ったところで語彙表を参照して，辞書データベースに登録された語の出現形を当てはめる．この際，該当する短単位がなければ，UniDic Explorerで新規の見出し語を追加した後，新たに語彙表に追加された出現形を使用する．

長単位の修正時には「長単位」モードで短単位の情報を閲覧しながら，短単位を基本単位として長単位を分割・結合して正しい長単位境界を指定する．長単位境界が直ったところで長単位語彙表を参照して適切な長単位を選択する．この際，該当する長単位がなければ，選択箇所の短単位から自動構成される長単位をもとにして長単位語彙表に新しい語彙を追加してこれを当てはめる．

こうした形態論情報の修正処理は，修正箇所と同一の形態論情報の組み合わせを持つもの全てを対象にして一括で行ったり，必要なものだけを作業者が選択して一括で行ったりすることが可能で，これによって効率的な修正作業を実現している．


\subsubsection{文字とタグの修正機能}

「大納言」では形態論情報そのものの修正作業のほかに，原テキストの文字修正，数字変換の誤り修正，ルビの文字修正を行う機能を実装した．6章で示したとおり，コーパスデータベースは文字ベースの開始終了IDで全体が関連付けられているが，「大納言」を通してこれらの修正を行うことで，作業者が意識することなく全体の関連付けの整合性を保つことができる．

コーパス中の文字の修正では，文字テーブルを修正した後，文字修正テーブルに修正内容を記録する．自動数字変換（\ref{sec:knowledge_numtrans}節参照）の修正では，タグ付けされた変換内容をもとに，変換処理を元に戻したり，適切な変換内容に人手で修正したりする機能を持たせた．数字を変換し直す場合には数字テーブル，形態論情報を修正する．タグの修正については，XML文書を極力整形式に保ったまま，直接修正できる機能を実装した．


\section{おわりに}

以上に述べた「形態論情報データベース」を開発することで，形態素解析された1億語規模のコーパスを格納し，その全体に対して形態論情報の修正処理を行うことを可能にした．これにより，約100万語のコアデータについて形態論情報に十分な人手修正を施し，それ以外の部分についても人手による修正を施して高い精度を達成することを可能にした．このシステムがBCCWJの形態論情報アノテーションを支え，BCCWJを構成する全てのデータはこのデータベースから出力された．また，本システムによってUniDicの見出し語のデータ整備を支援し，見出し語のデータと対応付けられた学習用コーパスを提供したことで形態素解析辞書UniDicの開発に貢献した．

このデータベースシステムは，現在「日本語歴史コーパス」の構築に利用されているほか，BCCWJのタグ修正や新形式のデータ出力などメンテナンス作業の基盤としても活用されている．今後も大規模コーパスの構築を支えるシステムとして活用される予定である．

なお，本システムは研究所内でのコーパス構築を目的に開発したものであり，そのままの形で一般公開を行う予定はないが，BCCWJの活用やコーパス開発のために本システムの利用を希望する場合には，プログラムの提供を含めて対応する用意があるので問い合わせてほしい．



\bibliographystyle{jnlpbbl_1.5}
\begin{thebibliography}{}

\bibitem[\protect\BCAY{浅原\JBA 米田\JBA 山下\JBA 伝\JBA 松本}{浅原 \Jetal
  }{2002}]{浅原ほか2002}
浅原正幸\JBA 米田隆一\JBA 山下亜希子\JBA 伝康晴\JBA 松本裕治 \BBOP 2002\BBCP.
\newblock 語長変換を考慮したコーパス管理システム.\
\newblock \Jem{情報処理学会論文誌}, {\Bbf 43}  (7), \mbox{\BPGS\ 2091--2097}.

\bibitem[\protect\BCAY{伝\JBA 小木曽\JBA 小椋\JBA 山田\JBA 峯松\JBA 内元\JBA
  小磯}{伝 \Jetal }{2007}]{伝ほか2007}
伝康晴\JBA 小木曽智信\JBA 小椋秀樹\JBA 山田篤\JBA 峯松信明\JBA 内元清貴\JBA
  小磯花絵 \BBOP 2007\BBCP.
\newblock
  コーパス日本語学のための言語資源—形態素解析用電子化辞書の開発とその応用（特集コーパス日本語学の射程）.\
\newblock \Jem{日本語科学}, {\Bbf 22}, \mbox{\BPGS\ 101--123}.

\bibitem[\protect\BCAY{Kaplan, Iida, Nishina, \BBA\ Tokunaga}{Kaplan
  et~al.}{2011}]{Kaplan2011}
Kaplan, D., Iida, R., Nishina, K., \BBA\ Tokunaga, T. \BBOP 2011\BBCP.
\newblock \BBOQ Slate - A Tool for Creating and Maintaining Annotated
  Corpora.\BBCQ\
\newblock {\Bem Journal for Language Technology and Computational Linguistics},
  {\Bbf 26}  (2), \mbox{\BPGS\ 89--101}.

\bibitem[\protect\BCAY{国立国語研究所コーパス開発センター}{国立国語研究所コーパス開発センター}{2011}]{国立国語研究所コーパス開発センター2011}
国立国語研究所コーパス開発センター \BBOP 2011\BBCP.
\newblock \Jem{『現代日本語書き言葉均衡コーパス』マニュアル}.
\newblock 国立国語研究所コーパス開発センター.

\bibitem[\protect\BCAY{前川}{前川}{2007}]{前川2008}
前川喜久雄 \BBOP 2007\BBCP.
\newblock {KOTONOHA}『現代日本語書き言葉均衡コーパス』の開発.\
\newblock \Jem{日本語の研究}, {\Bbf 4}  (1), \mbox{\BPGS\ 82--95}.

\bibitem[\protect\BCAY{Matsumoto, Asahara, Kawabe, Takahashi, Tono, Ohtani,
  \BBA\ Morita}{Matsumoto et~al.}{2005}]{Matsumoto2005}
Matsumoto, Y., Asahara, M., Kawabe, K., Takahashi, Y., Tono, Y., Ohtani, A.,
  \BBA\ Morita, T. \BBOP 2005\BBCP.
\newblock \BBOQ ChaKi: An Annotated Corpora Management and Search System.\BBCQ\
\newblock In {\Bem Proceedings from the Corpus Linguistics Conference Series,
  Vol.1, No.1}.

\bibitem[\protect\BCAY{小椋\JBA 小磯\JBA 冨士池\JBA 宮内\JBA 小西\JBA 原}{小椋
  \Jetal }{2011}]{小椋ほか2011}
小椋秀樹\JBA 小磯花絵\JBA 冨士池優美\JBA 宮内左夜香\JBA 小西光\JBA 原裕 \BBOP
  2011\BBCP.
\newblock \Jem{『現代日本語書き言葉均衡コーパス』形態論情報規程集第 4
  版（上・下）}.
\newblock 国立国語研究所内部報告書. LR-CCG-10-05. 国立国語研究所.

\bibitem[\protect\BCAY{小澤\JBA 内元\JBA 伝}{小澤 \Jetal }{2011}]{小澤ほか2011}
小澤俊介\JBA 内元清貴\JBA 伝康晴 \BBOP 2011\BBCP.
\newblock {BCCWJ} に基づく中・長単位解析ツール.\
\newblock \Jem{特定領域「日本語コーパス」平成 22 年度公開ワークショップ予稿集},
  \mbox{\BPGS\ 331--338}. 特定領域「日本語コーパス」総括班.

\bibitem[\protect\BCAY{Przepi\'{o}rkowski \BBA\ Murzynowski}{Przepi\'{o}rkowski
  \BBA\ Murzynowski}{2011}]{Przepiorkowski2011}
Przepi\'{o}rkowski, A.\BBACOMMA\ \BBA\ Murzynowski, G. \BBOP 2011\BBCP.
\newblock \BBOQ Manual Annotation of the National Corpus of Polish with
  Anotatornia.\BBCQ\
\newblock In Go\'{z}d\'{z}-Roszkowski, S.\BED, {\Bem Explorations across
  Languages and Corpora: PALC~2009}, \mbox{\BPGS\ 95--103}, Frankfurt am Main.
  Peter Lang.

\bibitem[\protect\BCAY{Stenetorp, Pyysalo, Topi\'{c}, Ohta, Ananiadou, \BBA\
  Tsujii}{Stenetorp et~al.}{2012}]{Stenetorp2012}
Stenetorp, P., Pyysalo, S., Topi\'{c}, G., Ohta, T., Ananiadou, S., \BBA\
  Tsujii, J. \BBOP 2012\BBCP.
\newblock \BBOQ BRAT: A Web-based Tool for NLP-assisted Text Annotation.\BBCQ\
\newblock In {\Bem Proceedings of the Demonstrations at the 13th Conference of
  the European Chapter of the Association for Computational Linguistics}, EACL
  '12, \mbox{\BPGS\ 102--107}, Stroudsburg, PA, USA. Association for
  Computational Linguistics.

\bibitem[\protect\BCAY{山田\JBA 小磯}{山田\JBA 小磯}{2008}]{Numtrans}
山田篤\JBA 小磯花絵 \BBOP 2008\BBCP.
\newblock {Numtrans} マニュアル.\
\newblock \JTR, {The UniDic Consortium}.

\bibitem[\protect\BCAY{山口\JBA 高田\JBA 北村\JBA 間淵\JBA 大島\JBA 小林\JBA
  西部}{山口 \Jetal }{2011}]{山口ほか2011}
山口昌也\JBA 高田智和\JBA 北村雅則\JBA 間淵洋子\JBA 大島一\JBA 小林正行\JBA
  西部みちる \BBOP 2011\BBCP.
\newblock 『現代日本語書き言葉均衡コーパス』における電子化フォーマット Ver2.2.\
\newblock \JTR\ LR-CCG-10-04, {国立国語研究所コーパス開発センター}.

\end{thebibliography}

\begin{biography}
\bioauthor{小木曽智信}{
1995年東京大学文学部日本語日本文学（国語学）専修課程卒業．1997年東京大学大学院人文社会系研究科日本文化研究専攻修士課程修了．2001年同博士課程中途退学．2014年奈良先端科学技術大学院大学情報科学研究科博士後期課程修了．
2001年より明海大学講師．2006年より独立行政法人国立国語研究所研究員を経て， 2009年より人間文化研究機構国立国語研究所准教授，現在に至る．
専門は日本語学，自然言語処理．日本語学会，情報処理学会各会員．
}

\bioauthor{中村　壮範}{
2000年武蔵工業大学機械工学科卒業．
卒業後，顧客管理データベース等の構築業務を経て，
2006年より，国立国語研究所勤務において
「現代日本語書き言葉均衡コーパス」「日本語歴史コーパス」のための
形態論情報データベースの構築・運用に従事．
現在，マンパワーグループ株式会社所属．
}

\end{biography}


\biodate



\end{document}
