



\documentstyle[jnlpbbl]{jnlp_j}

\begin{document}

\setcounter{page}{91}
\setcounter{巻数}{9}
\setcounter{号数}{2}
\setcounter{年}{2002}
\setcounter{月}{4}
\受付{2001}{8}{21}
\採録{2002}{1}{10}

\setcounter{secnumdepth}{2}


\title{diff を用いた言語処理\\ --- 便利な差分検出ツール mdiff の利用 ---}
\author{村田 真樹\affiref{CRL}}

\headauthor{村田 真樹}
\headtitle{diff を用いた言語処理}

\affilabel{CRL}{通信総合研究所}{Communications Research Laboratory}

\jabstract{
差分検出を行なう diff コマンドは言語処理の研究において
役に立つ場面が数多く存在する．
本稿では，diff を使った言語処理研究の具体的事例として，
差分検出，書き換え規則の獲得，データのマージ，最適照合の例を示す．
diff コマンドは UNIX で標準でついているため，
これを用いることは極めて容易である．
本稿は言語処理の研究を行なう上で diff コマンドが
実用的でありかつ有用であることを示すものである．
}

\jkeywords{diff, mdiff, 差分検出，マージ，書き換え規則，最適照合}

\etitle{NLP using DIFF\\ --- Use of convenient tool\\ for detecting differences, MDIFF ---}
\eauthor{Masaki Murata\affiref{CRL}}

\eabstract{
{\it Diff} is a software program that detects differences 
between two data sets and is useful for natural language processing. 
This paper shows several example applications of 
how {\it Diff} can be used to 
detect differences, 
extract rewriting rules, 
merge two different datasets, and 
matching two different data sets optimally. 
Since {\it Diff} can be applied to a normal UNIX system, 
it is very easy and convenient to use. 
Our studies showed that 
{\it Diff} is a practical tool for 
researching natural language processing. 
}

\ekeywords{Diff, Mdiff, Extraction of Differences, Merging, Rewriting Rules, Optimal Matching}

\maketitle


\section{はじめに}

差分検出を行なう diff コマンドは言語処理の研究において
役に立つ場面が数多く存在する．
本稿では，まず簡単に diff の説明を行ない，
その後，diff を使った言語処理研究の具体的事例として，
差分検出，書き換え規則の獲得，データのマージ，
最適照合の例を示す\footnote{本稿は筆者のさまざまな言語処理研究における
diff というツールの使用経験を述べたものであり，
今後の自然言語処理，言語学の研究に有益な知見を与えることを目的にしている．}．

あらかじめ本稿の価値を整理しておくと以下のようになる．
\begin{itemize}
\item 
  diff コマンドは UNIX で標準でついているため，
  これを用いることは極めて容易である．
  この容易に利用できる diff コマンドを用いることで，
  さまざまな言語処理研究を行なうことができることを
  示している本稿は，容易さ，簡便さの観点から価値がある．

\item 
  近年，言い換えの研究が盛んになりつつある\cite{iikae_jws}．
  本稿の\ref{sec:kakikae}節では実際に話し言葉と書き言葉の
  違いの考察，また話し言葉と書き言葉の言い換え表現の獲得\cite{murata_kaiho_2001}に
  diff が利用できることを示している．
  diff の利用は，話し言葉と書き言葉に限らず，
  多方面の言い換えの研究に役に立つと思われる．
  本稿はそれらの基盤的なものとなると思われる．

\item 
  diff コマンドは一般には差分の検出に利用される．
  しかし，本稿で述べるようにデータのマージや最適照合にも
  利用できるものである．
  本稿では\ref{sec:merge}節で，このデータのマージ，最適照合の例として，
  対訳コーパスの対応づけ，
  講演と予稿の対応づけ，さらに最近はやりの
  質問応答システム(「日本の首都はどこですか」と聞くと
  「東京」と答えるシステムのこと)といった，
  種々の興味深い研究を diff という簡便なツールで
  実現する方法を示している．
  本稿はこのような研究テーマもしくは研究手段の斬新性
  といった側面も兼ね備えている．

\end{itemize}


\section{diff と mdiff}
\label{sec:diff_and_mdiff}

本節では diff について説明する．
本稿でいう diff とは
UNIX のファイル比較ツール diff のことである．
このコマンドは，与えられた二つのファイルの
差分を順序情報を保持したまま行を単位として出力する\footnote{diff コマンドの内部の
アルゴリズムについては文献\cite{algo}のp.282に説明がある．}．
例えば，
\begin{verbatim}
    今日
    学校へ
    いく
\end{verbatim}
ということが書いてあるファイルと
\begin{verbatim}
    今日
    大学へ
    いく
\end{verbatim}
ということが書いてあるファイルがあるとする．
これらの diff をとると，差分の部分が
\begin{verbatim}
    < 学校へ
    > 大学へ
\end{verbatim}
のような形で出力される．

ところで，diff コマンドには \verb+-D+ オプションという便利な
オプションがある．これをつけて
diff コマンドを使うと差分部分だけでなく共通部分も出力される．
つまりファイルのマージが実現される．
また，差分部分は Cのプリプロセッサなどで使われる ifdef 文などで
表現される．この場合，場所によって差分部分の表示の順番が
逆転しテキスト全体として差分の状態がわかりにくくなり，
また，ifdef という機械的な記号だと人間の目で認識するのが困難であるため，
ここでは差分部分は以下のように表示する
ことにする\footnote{ここに ifdef 文から mdiff の出力への変形方法を記述しておく．
ifdef が使われているときは順序を保存したまま，
表現のみ ``;▼▼▼▼▼▼'' などに変更する．
ifndef が使われているときは差分の順序を変更してから
表現を ``;▼▼▼▼▼▼'' などに変更する．}．
\begin{verbatim}
    ;▼▼▼▼▼▼
    (一つめのファイルにだけある部分)
    ;●●●
    (二つめのファイルにだけある部分)
    ;▲▲▲▲▲▲
\end{verbatim}
ここでは， ``\verb+;▼▼▼▼▼▼+'' は差分部分の始まりを，
``\verb+;▲▲▲▲▲▲+'' は差分部分の終りを意味し，
``\verb+;●●●+'' は差分を構成する二つのデータの境界を意味する．
本稿では，\verb+-D+ オプションをつけてさらに ifdef の部分を上記のように
表示して，ファイルのマージを行なう場合の diff を {\bf mdiff}と
呼ぶ(m は merge の m)．(mdiff の構成方法および使用方法については
付録\ref{sec:exp_mdiff}をつけておいた．参考にしてほしい．)

実際に先ほどのデータに対して mdiff をかけてみると，
以下のような結果になる．
\begin{verbatim}
    今日
    ;▼▼▼▼▼▼
    学校へ
    ;●●●
    大学へ
    ;▲▲▲▲▲▲
    いく
\end{verbatim}
「今日」が一致し，「学校へ」と「大学へ」が差分となり，
「いく」がまた共通部分となっている．
mdiff の出力は diff と異なり一致部分も出力されるためにわかりやすい．

また，mdiff の結果からは
元の二つのファイルのデータを完全に
復元することができる．
共通部分と，差分部分の黒丸(;●●●)の上側だけを取り出すと，
\begin{verbatim}
    今日
    学校へ
    いく
\end{verbatim}
のように一つ目のファイルの情報が取り出される．
また，共通部分と，差分部分の黒丸(;●●●)の下側だけを取り出すと，
\begin{verbatim}
    今日
    大学へ
    いく
\end{verbatim}
のように二つ目のファイルの情報が取り出される．
このように元の情報を完全に復元できる．

また，mdiff では一致部分は片方のデータにあったものだけを表示し，
不一致部分のみ両方のデータのものを表示するために，
元の二つのデータよりもデータ量は削減できるが，
上記のように元の情報を完全に復元できるために，
復元できる状態でデータ量を削減するという意味で
mdiff はデータ圧縮を実現しているものともいえる．

次に文字を単位とした mdiff を考える．
言語処理の場合は文字単位で差分を取りたい場合が多い．
そのようなときは一度ファイルの中身の情報を，
一文字ずつ改行をして出力したファイルで mdiff をとればよい．
例えば先のファイルの情報だと，
\begin{verbatim}
    今
    日
    学
    校
    へ
    い
    く
\end{verbatim}
という形にしてから，mdiff をとればよい．

diff の表示は見にくく，mdiff は diff で表示される情報を
完全に含むので以降の説明は midff を用いて行なう．
以降の節では，実際にこの mdiff を使った言語処理の
実例を見ていくこととする．

\section{差分検出，および，書き換え規則の獲得}

本節では mdiff を用いて差分検出したり，またその差分結果から
書き換え規則を獲得する研究などを記述する．
具体的には，以下のものを示す．
\begin{itemize}
\item 
  複数システムの出力の差分検出

\item 
  差分の考察と書き換え規則の獲得

\end{itemize}

\subsection{複数システムの出力の差分検出}
\label{sec:system}

筆者は以前，juman のシステムのバージョン\cite{juman,araya_juman}が複数乱立している
とき，この複数の juman の出力を mdiff によりマージして
形態素結果の品質を向上させる\footnote{これは，文脈処理の研究\cite{murata_shuuron,murata_noun_nlp,murata_deno_nlp}を行なう際に，
文脈処理の前段階の形態素解析，構文解析の誤りを修正するために行なっていた．}こと
をしていた\footnote{同様の考え方は文献\cite{fujii1998}にもある．
また，この種の考え方はシステム融合(複数のシステムを組み合わせる
ことで個々のシステムの精度以上のものを得ることを目的としたもの)
という形でよくしられている\cite{murata_nlc2001_wsd}．}．
ここではこれを説明する．

「といったこと」を解析し，
juman の A というバージョンの出力が
\begin{verbatim}
    と      と    助詞
    いった  言う  動詞
    こと    こと  名詞
\end{verbatim}
となっていて，
B のバージョンの出力が
\begin{verbatim}
    と      と    助詞
    いった  行く  動詞
    こと    こと  名詞
\end{verbatim}
となっているとしよう．
「いった」という語は「行く」と「言う」の曖昧性があり，
B のバーションではこれを誤って「行く」の方の語であると出力していた
とする．
ここで midff をとると以下のような結果となる．
\begin{verbatim}
    と      と    助詞
    ;▼▼▼▼▼▼
    いった  言う  動詞
    ;●●●
    いった  行く  動詞
    ;▲▲▲▲▲▲
    こと    こと  名詞
\end{verbatim}
mdiff をとることで複数のシステムの出力の差異を容易に検出することが
できる．
この場合「いった」の部分の出力に差異があることがわかる．
ここで，出力修正の作業者はこのような差分が検出された箇所において
どちらが正しいかを判断し，上が正しければなにもせず
下が正しければ「;●●●」の先頭に ``x'' をつけるなどとすると決めておく．
そのようにすると，
``x'' がなければ差分の下を，あれば差分の上の情報と区切り記号を消すことで，
その作業結果のデータから自動的にそれぞれの差分から
よい結果の方を選び，それぞれのバージョンのものよりも高い精度の結果を生成できる．
また，差分の両方が誤っている場合がよくある．
このときは「;●●●」の上の方のデータを実際に書き直すとよい．

この方法を用いると，
修正できないものは
両方のバージョンで同じように誤るものだけであり，
多くの形態素誤りを修正できる．
ここで注意すべきことは異なる性質のシステムを複数用意しないといけない
ということである．誤り方が同じシステムの場合だと
多くの誤りを見逃すことになる．

また，システムが三つある場合は diff3 コマンドを使うとよい．
diff3 は三つのファイルの差分を検出することができる．

上記では形態素解析を例にあげたが，
他の解析でも解析結果を行単位にすることで mdiff で差分をとることができる．

ここでは，複数のシステムの出力の差分をとる話をしたが，
一つをタグつきコーパスとし，それをなにかのシステムで解析した結果と
比較することで，そのタグつきコーパスの誤りを検出し修正する\footnote{コーパス修正の先行研究には
文献のもの\cite{murata2000_3_nl,NLP2001}がある．}
ということもできる．

\begin{table}[t]
  \begin{center}
    \leavevmode
    \caption{書き言葉データと話し言葉データの例}
    \label{tab:write_talk_juman}
\begin{tabular}{|l|}\hline
\multicolumn{1}{|c|}{書き言葉データ}\\\hline
本\\
論文\\
で\\
は\\
意味\\
ソート\\
に\\
ついて\\
述べる\\
。\\
一般に\\
ソート\\
は\\
５０\\
音\\
順\\
\hline
\end{tabular}
\hspace{.5cm}
\begin{tabular}{|l|}\hline
\multicolumn{1}{|c|}{話し言葉データ}\\\hline
今日\\
は\\
え\\
意味\\
ソート\\
に\\
ついて\\
述べ\\
ます\\
一般に\\
ソート\\
って\\
いう\\
の\\
は\\
だいたい\\\hline
\end{tabular}
\end{center}
\end{table}

\begin{table}[t]
  \begin{center}
    \leavevmode
    \caption{書き言葉データと話し言葉データの diff の結果}
    \label{tab:write_talk_diff}
\begin{tabular}{|l|}\hline
;▼▼▼▼▼▼\\
本\\
論文\\
で\\
;●●●\\
今日\\
;▲▲▲▲▲▲\\
は\\
;▼▼▼▼▼▼\\
;●●●\\
え\\
;▲▲▲▲▲▲\\
意味\\
ソート\\
に\\
(右欄につづく)\\\hline
\end{tabular}
\hspace{.5cm}
\begin{tabular}{|l|}\hline
ついて\\
;▼▼▼▼▼▼\\
述べる\\
。\\
;●●●\\
述べ\\
ます\\
;▲▲▲▲▲▲\\
一般に\\
ソート\\
;▼▼▼▼▼▼\\
;●●●\\
って\\
いう\\
の\\
;▲▲▲▲▲▲\\\hline
\end{tabular}
\end{center}
\end{table}

\begin{table}[t]
  \begin{center}
    \leavevmode
    \caption{差分部分の抽出}
    \label{tab:write_talk_diff_ext}
\begin{tabular}{|l|l|}\hline
\multicolumn{1}{|c|}{書き言葉データ} & \multicolumn{1}{|c|}{話し言葉データ}\\\hline
本論文で & 今日\\
         & え\\
述べる。 & 述べます\\
 & っていうの\\\hline
\end{tabular}
\end{center}
\end{table}

\subsection{差分の考察と書き換え規則の獲得}
\label{sec:kakikae}

ここでは，文献\cite{murata_kaiho_2001}でも述べた話し言葉と書き言葉の diff の研究について記述する．
この研究では，対応のとれた話し言葉と書き言葉のデータを使い，
それらの差分から話し言葉と書き言葉の違いを考察したり，
話し言葉から書き言葉への言い換え規則，また，その逆のための規則を獲得した．
データとしては，
学会の口頭発表を話し言葉データとし，
その口頭発表の内容が記されたその学会の予稿原稿を書き言葉として用いた．

例えば，話し言葉と書き言葉のデータが表\ref{tab:write_talk_juman}のような形で与えられたとする\footnote{ここでは
われわれの意味ソートの論文\cite{murata_msort_nlp}のものを例にあげている．
ところで，本稿では diff を扱ったが，その論文では UNIX の sort コマンドを用いて
様々な情報を意味の情報でソートする，つまり，順序付けて並べるということを行ない，
それらが種々の言語処理にどのように役に立つかを議論している．
興味があれば，この文献も読むことをお奨めする．}．
ここでは，差分がとりやすいように形態素解析システムなどで
1行に1単語がはいるような形に変換してある．
このような書き言葉と話し言葉のデータが与えられたとき，
mdiff をとると，表\ref{tab:write_talk_diff}のような結果を得る．
この結果から，差分部分だけを抽出すると
表\ref{tab:write_talk_diff_ext}のような結果が得られる．

この結果から，話し言葉には「え」などが挿入されること，
また話し言葉では「っていうの」という表現をいれて発話をなめらかに
することなどがわかる．また，「述べる」が「述べます」と
言い換えられることがわかる\footnote{実際には，
ここであげた例ほどきれいに話し言葉と書き言葉は対応がとれず，
「本論文は」と「今日」のような言い換え表現としてはよくない対応が多く，
確率などを用いたソートを用いて確信度の高い良質な差分情報を集める
ということを行なう(これについては文献\cite{murata_kaiho_2001,murata_nl2001_henkei}を参照せよ)．}．
以上のように mdiff を使うことで話し言葉と書き言葉の差異を
検出でき，またそれを考察することで，
話し言葉と書き言葉の違いを調査できることがわかる．
また，これらの差分は話し言葉と書き言葉の言い換え規則としてみることも
できる．例えば，「え」の部分は，書き言葉になにもないところに
話し言葉に変換する場合「え」をいれるという規則のように見ることができる．
また，「述べる」と「述べます」の部分は，
話し言葉に変換する場合は
「述べる」を「述べます」に言い換える規則のように見ることができる．
その意味で mdiff を用いることで言い換え規則，もしくは，変換規則を
検出できることがわかる．

ここでは，話し言葉と書き言葉のデータを例にとったが，
このようなことはさまざまなところで可能である．
例えば，英文校閲前のテキストと英文校閲後のテキストで，
mdiff をとると，どのような間違いをどのように直せばよいかがわかるし，
また英文校閲用の規則が獲得できる．
また，要約前のテキストと要約後のテキストで，
mdiff をとると，
どのように要約されているかを如実に見ることができるし，
また要約用の規則が獲得できる\footnote{diff や mdiff は
用いていないが，
要約前のテキストと要約後のテキストで，DP マッチングを用い，
どのように要約されているかを調べたり要約用の規則を獲得したりする
研究として文献\cite{Kato1999,mochinushi2000}などがある．
diff で行なうことは DP マッチングでもできる．
diff は文献にもあるように最長共通部分列(longest common subsequence)のアルゴリズムを用いる
もので，共通部分が最大になるような形でデータの照合を行なう．
このため，共通部分を評価値とする DP マッチングのプログラムを
作るとその出力する結果は diff とまったく等価となる．
さらに DP マッチングでは
品詞，意味情報なども評価値に使うことでより精密に照合を行なうことができる．
このため，精度を重視する場合は DP などをプログラミングした方がよい．
しかし，それほど精度を重視せず研究として差異がどうなっているかを調べる程度ならば
diff でも十分役に立つ．}．
その他にも対応のとれた性質の異なるデータに対して mdiff をとることで，
さまざまな考察と，言い換え規則の獲得ができることだろう\footnote{ここでの議論とは
逆に，性質の同じ対応のとれたデータに対して mdiff をとることも考えられる．
この場合，性質が同じデータのため，差分としては等価な表現対，つまり，
同義表現が獲得されることになる．
実際，われわれは異なる辞書の定義文を mdiff により照合することで，
同義表現の獲得\cite{murata_nl2001_henkei}を行なっている．}．

\section{データのマージ，および，最適照合}
\label{sec:merge}

本節では mdiff のデータをマージする機能，および，
そのマージの最適照合能力\footnote{diff の場合共通部分を最大にするような形で
最適な照合を行なっている．}を利用したものについて記述する．
具体的には以下の三つについて記述する．

\begin{itemize}
\item 
  対訳コーパスの対応づけ
\item 
  講演と予稿の対応づけ
\item 
  最適照合能力を用いた質問応答システム
\end{itemize}

\begin{figure}[t]
  \begin{center}
    \leavevmode

    \begin{tabular}[h]{|l|}\hline
{\begin{minipage}[h]{4cm}
\verb+<Section 1>+

.........................

.........................

\verb+<Section 2>+

.........................

.........................
\end{minipage}}\\\hline
\end{tabular}

    \caption{コーパスの構成}
    \label{tab:mt_corpus}
  \end{center}
\end{figure}


\begin{figure}[t]
  \begin{center}
    \leavevmode

    \begin{tabular}[h]{|l|}\hline
{\begin{minipage}[h]{4cm}
\verb+<Section 1>+

;▼▼▼▼▼▼

(日本語文の内容)

;●●●

(英語文の内容)

;▲▲▲▲▲▲

\verb+<Section 2>+

;▼▼▼▼▼▼

(日本語文の内容)

;●●●

(英語文の内容)

;▲▲▲▲▲▲
\end{minipage}}\\\hline
\end{tabular}

\caption{mdiff によって対応づけられた対訳コーパス}
\label{tab:mt_corpus_mdiff}
\end{center}
\end{figure}

\subsection{対訳コーパスの対応づけ}
\label{sec:taiyaku}
ここでは対訳コーパスの対応づけを考える\footnote{対訳コーパスは，
機械翻訳\cite{murata_nlc2001,modal2001}の研究を行なう上で重要な研究資料となる．}．
ここで条件としてそれぞれのコーパスには
対応する箇所に同じ記号が入っていることを前提とする．
また，対応づけの単位はこの記号で区切られた部分であるとする．

例を図\ref{tab:mt_corpus}にあげる．
ここでは日本語のコーパスと英語のコーパスが
まだばらばらに存在し，対応づけられていないとする．
また，それぞれは図\ref{tab:mt_corpus}のように
両方とも \verb+<Section 1>+ などの同じ形をしたセクション情報が与えられているとする．
このとき，日本語と英語では同じセクションのものは同じ内容であるとする．
この場合，これらのデータの mdiff をとることで，
図\ref{tab:mt_corpus_mdiff}のような結果を得ることができる．
この結果では，\verb+<Section 1>+ などが共通部分となり，その他の部分が
不一致部分となる．この不一致部分では
日本語と英語が上下にわかれて格納されることになる．
このようにすることで，mdiff を用いて対訳データが作成されることになる．

ここで示したものは，文ごとなどの細かい対応づけをするものでなく，
セクションなどの大雑把なもので一見役に立たないように思えるかもしれないが，
文の対応づけは難しい問題で，まずあらかじめ対応がとれていることが
はっきりしている章，段落のレベルで対応づけをしてから
細かい対応づけをするという考え方もあり\cite{haruno_ipsj97}，その意味では
このような粗い対応づけも役に立つ．

また，ここで示したものは \verb+<Section 1>+ などの情報を認識させて
区分するだけなのでそのようなことをするプログラムを書くことでも
同じように対訳データの対応づけを行なうことができる．
しかし，mdiff を使うとそのようなプログラムも書くこともなく
対応づけを容易に実現できるのである．

\begin{figure}[t]
  \begin{center}
    \leavevmode

    \begin{tabular}[h]{|l|}\hline
{\begin{minipage}[h]{4cm}
\verb+<Chapter 1>+

(1章の内容)

\verb+</Chapter 1>+

\verb+<Chapter 2>+

(2章の内容)

\verb+</Chapter 2>+

\verb+<Chapter 3>+

(3章の内容)

\verb+</Chapter 3>+
\end{minipage}}\\\hline
\end{tabular}

\caption{予稿データの構成}
\label{tab:youkou_kousei}
\end{center}
\end{figure}

\begin{figure}[t]
  \begin{center}
    \leavevmode

    \begin{tabular}[h]{|l|}\hline
{\begin{minipage}[h]{4cm}
;▼▼▼▼▼▼

\verb+<Chapter 1>+

(予稿のみの内容)

;●●●

(講演のみの内容)

;▲▲▲▲▲▲

(共通する内容)

;▼▼▼▼▼▼

(予稿のみの内容)

;●●●

(講演のみの内容)

;▲▲▲▲▲▲

(共通する内容)

;▼▼▼▼▼▼

\verb+</Chapter 1>+

\verb+<Chapter 2>+

(予稿のみの内容)

;●●●

(講演のみの内容)

;▲▲▲▲▲▲
\end{minipage}}\\\hline
\end{tabular}

\caption{予稿と講演の mdiff の結果}
\label{tab:youkou_mdiff}
\end{center}
\end{figure}

\begin{figure}[t]
  \begin{center}
    \leavevmode

    \begin{tabular}[h]{|l|}\hline
{\begin{minipage}[h]{4cm}
\verb+<Chapter 1>+

(講演のみの内容)

(共通する内容)

(講演のみの内容)

\verb+</Chapter 1>+

\verb+<Chapter 2>+

(講演のみの内容)

\end{minipage}}\\\hline
\end{tabular}

\caption{講演データへの章の情報の挿入結果}
\label{tab:youkou_mdiff2}
\end{center}
\end{figure}

\subsection{講演と予稿の対応づけ}
\label{sec:sp_merge}

本節では講演と予稿の対応づけ\cite{uchimoto2001}を考える．
この講演と予稿は，先の書き換え規則の獲得でも述べた
書き言葉データと話し言葉データに対応する．
講演は学会の口頭発表で，予稿はその口頭発表に対応する
論文のことである．
このような講演と予稿が与えられたとき，
講演の各部分と，予稿の各部分の対応がとれると，
講演を聞いている時だと，それに対応する予稿の部分を参照できるし，
予稿を読んでいるときだと，それに対応する講演の部分を参照できて
便利である\cite{uchimoto2001,fujii_kaiho_2001}．
本節ではこの講演と予稿の対応づけを mdiff で
行なうことを考える．

ここでは特に予稿の各章が講演のどこの部分に対応するかを
 mdiff でもとめることにする．
ここで予稿と講演とは話は同じ順序でなされると仮定する．
また，予稿の章が認識しやすいように
予稿のデータには図\ref{tab:youkou_kousei}のように，
``\verb+<Chapter 1>+'' のような記号を挿入しておく．
この形にしておいて，予稿と講演のデータに対して，
形態素解析をして各行に単語がくる状態で mdiff を使うことで，
図\ref{tab:youkou_mdiff}のような結果を得る．
ここで，差分部分で予稿に対応する上半分の方を，
``\verb+<Chapter 1>+'' のような記号を除いてすべて
消し去ると図\ref{tab:youkou_mdiff2}のような結果を得る．
図では元の講演のデータに対して ``\verb+<Chapter 1>+'' のような記号だけが
挿入された形になる．
つまり，講演のどの部分が予稿のどの章にあたるかがわかることになる．

これは簡単にいうと，mdiff の照合能力を用いて予稿と講演を照合し，
章の情報だけ残して予稿の情報を消し去ることにより，
講演データに章の情報を挿入する
ということを行なっていることを意味する．
このような予稿と講演の対応づけも mdiff を用いると簡単に
行なえるのである\footnote{この予稿と講演の対応づけを実際に文献\cite{uchimoto2001}のデータで行なってみた．
このときは，mdiff を用いまたデータは各行に単語がくるような状態で行なった．
結果は文献\cite{uchimoto2001}の精度と同程度か少しよい程度であった．
mdiff を使うこのような簡単な処理でもこのような結果を得ることができるのである．}．

\subsection{最適照合能力を用いた質問応答システム}
\label{sec:qa}

本節では mdiff の最適照合能力を用いた
質問応答システム\cite{qa_memo,murata2000_1_nl,murata_QA_nlp2000ws,murata_nlp2001ws_true}について記述する．
質問応答システムとは，例えば，
「日本の首都はどこですか」と聞くと
「東京」と答えそのものをずばり返すシステムである．
知識が自然言語で書かれていると仮定すると，
基本的には質問文と知識の文を照合し，その照合結果で
疑問詞に対応するところを答えとして出力すればよい．
例えば先の問題だと，
「日本の首都は東京です」という文を探してきて
この文で疑問詞に対応する「東京」を解として出力するのである．
ここではこれを mdiff で行なうことを考える．

まず，質問文の疑問詞の部分を X に置き換え，また文末を平叙文に
変換し，「日本の首都はXです」を得る．
また，知識ベースから
「日本の首都は東京です」を得る．
ここでこの二つを一文字ずつ改行してから
 mdiff をとると以下のような結果を得る．
\begin{verbatim}
    日
    本
    の
    首
    都
    は
    ;▼▼▼▼▼▼
    X
    ;●●●
    東
    京
    ;▲▲▲▲▲▲
    で
    す
\end{verbatim}
ここで X と差分部分で組になっているものを解とすると，
「東京」を正しく取り出せることになる．

ところで一文字単位に改行してから mdiff を使う場合少々文に食い違いがあっても
答えを正しく取り出すことができる．
例えば，知識ベースの文が「日本国の首都は東京です」であったとする．
この場合は mdiff の結果は以下のようになる．
\begin{verbatim}
    日
    本
    ;▼▼▼▼▼▼
    ;●●●
    国
    ;▲▲▲▲▲▲
    の
    首
    都
    は
    ;▼▼▼▼▼▼
    X
    ;●●●
    東
    京
    ;▲▲▲▲▲▲
    で
    す
\end{verbatim}
差分部分は少し増えるが X に対応する箇所は「東京」のままで，
解を正しく抽出できる．

ところで，われわれが提案する質問応答システムでは類似度を尺度として
用いた変形をくりかえし，質問文と知識データの文がより一致した状態で
上記のような照合を行なう．
このために類似度を定義する必要がある．
mdiff を用いた場合は一致部分と不一致部分が認定できるので，
類似度は
(一致部分の文字数)/(全文字数)のような形で定義できる\footnote{ここでは
mdiff により類似度を求めるようなことをしている．
このように mdiff は文の類似性/類似度を求めることにも役に立つ．}．
ここで，「日本国」と「日本」を言い換える規則があれば
「日本の首都はXです」を
「日本国の首都はXです」と言い換えて照合し，
不一致部分を減らすことで，より確実に解を得ることができる\footnote{\label{fn:qa}ここでは
mdiff に基づく質問応答システムを述べたが，
この mdiff に基づく質問応答システムは文献\cite{murata_nlp2001ws_true}でも述べている
ように文献\cite{murata2000_1_nl}の研究の予備実験として構築したシステムである．
精度の高いシステムを目指すならば，文献\cite{murata2000_1_nl}にあるような
情報検索\cite{murata_irex_ir_nlp}で用いられる IDF などの重みを単語に与えてなおかつ
構文情報なども用いたシステム\cite{qa_memo}を構築した方がよい．
といっても mdiff を使うだけでも簡単な質問応答システムは
容易に構築できることは簡便さの観点から価値がある．}．

\section{おわりに}

本稿では diff を用いた言語処理の例を多数記述した．
\ref{sec:system}節では複数システムの出力を融合することで
個々のシステムの精度以上のものを得る研究を diff を用いて
実現する方法を述べた．この種の考え方はシステム融合という形で
広く知られているもので，それが diff で簡便に実現できることを
示した．\ref{sec:kakikae}節では言い換えの研究の一例として
話し言葉と書き言葉の違いの考察，また，
話し言葉から書き言葉への言い換え規則，また，その逆のための規則の自動獲得
を diff で行なっている研究を紹介した．
そこでは，話し言葉と書き言葉の言い換えを扱っていたが，
言い換えの問題は，文を短縮する要約から，
文を修正する文章校正支援，わかりにくい文からわかりやすい文を作成する
平易文生成の研究まで幅広いものを含むものであり，
それらでも diff を用いることで，種々の考察や種々の書き換え規則の
獲得を容易に実現することができる．
この意味で本稿はこの今後発展の予想される言い換えの研究の
基盤的なものとなると思われる．
\ref{sec:merge}節ではデータのマージ，最適照合の例を示した．
diff コマンドは一般には差分の検出に利用されるものなので，
データのマージや最適照合にも利用できることを示した
\ref{sec:merge}節の例はまた別の新しさがある．
その節では対訳コーパスの対応づけ，
講演と予稿の対応づけ，さらに最近はやりの
質問応答システム(「日本の首都はどこですか」と聞くと
「東京」と答えるシステムのこと)といった，
種々の興味深い研究を diff という簡便なツールで
実現する方法を示した．
本稿はこのような研究テーマもしくは研究手段の斬新性
といった側面も兼ね備えている．

本稿ではこのように diff を用いた言語処理の例を多数記述した．
diff に関係することでここまでいろいろな例をまとめたものは
おそらくないだろう．他にも面白い利用方法があると思う．
本稿であげた多数の例を参考にし，
より面白い利用方法を考えて使うのもよいし，
本稿であげた例と同じような使い方をしてもよい．
diff を使って効率よく様々な研究がなされていく
ことを期待したい．

\appendix
\section{mdiff の構成方法および使い方}\label{sec:exp_mdiff}

本付録では読者の便を考え mdiff の構成方法と使い方を記す．
また，現在はこのプログラムは筆者の
ホームページ(http://www.crl.go.jp/jt/a132/members/murata/software/software.html)からダウンロードできる．

\subsection{mdiff の構成方法}\label{sec:make_mdiff}

筆者は mdiff は csh と perl を使って構成している\footnote{Sun OS と
Sun Solaris の OS と Linux の一部の OS で
筆者はこのプログラムが実際に動くことを確認している．
他の OS ではプログラムを少々変更する必要があるかもしれない．}．

\begin{verbatim}
------------------------------------------------------------
ファイル mdiff
------------------------------------------------------------
#! /bin/csh -f

/usr/bin/diff -D@@@mm $* | ~username/bin/Perl/tmpdiff_patch.pl

#
------------------------------------------------------------
\end{verbatim}


\begin{verbatim}
------------------------------------------------------------
ファイル ~username/bin/Perl/tmpdiff_patch.pl
------------------------------------------------------------
#!/usr/local/bin/perl
$|=1;

while( <> ) {
    if ( /^\#ifn?def (\/\* )?\@\@\@mm( \*\/)?/ )  {
        $con = $_;
        while( <> ) {
            $con .= $_;
            if ( /^\#endif (\/\* )?\@\@\@mm( \*\/)?/ ) {
#               print ";▼▼▼▼▼▼\n";
               print ";▲▲▲▲▲▲\n";
                if ( $con =~ /^\#ifndef/ ) {
                    if ( $con =~ /^\#ifndef (\/\* )?\@\@\@mm( \*\/)?\n(( \\
.|\n)*)\#else (\/\* )?\@\@\@mm( \*\/)?/ || $con =~ /^\#ifndef (\/\* )?\@ \\
\@\@mm( \*\/)?\n((.|\n)*)\#endif (\/\* )?\@\@\@mm( \*\/)?/ ) {
                        print $3;
                    }
                    print ";●●●\n";
                    if ( $con =~ /\#else (\/\* )?\@\@\@mm( \*\/)?\n((.|\ \\
n)*)\#endif (\/\* )?\@\@\@mm( \*\/)?/ ) {
                        print $3;
                    }          
                }
                elsif ( $con =~ /^\#ifdef/ ) {
                    if ( $con =~ /\#else (\/\* )?\@\@\@mm( \*\/)?\n((.|\ \\
n)*)\#endif (\/\* )?\@\@\@mm( \*\/)?/ ) {
                        print $3; 
                    }           
                    print ";●●●\n";
                    if ( $con =~ /^\#ifdef (\/\* )?\@\@\@mm( \*\/)?\n((. \\
|\n)*)\#else (\/\* )?\@\@\@mm( \*\/)?/ || $con =~ /^\#ifdef (\/\* )?\@\@ \\
\@mm( \*\/)?\n((.|\n)*)\#endif (\/\* )?\@\@\@mm( \*\/)?/ ) {
                        print $3;
                    }   
               }
                print ";▼▼▼▼▼▼\n";
#              print ";▲▲▲▲▲▲\n";
                last;
            }
        }
    }
    else {
        print;
    }
}


exit;

------------------------------------------------------------
\end{verbatim}

csh のプログラムの中から diff と perl で書いた整形プログラム\\
\verb+~username/bin/Perl/tmpdiff_patch.pl+ を呼ぶことで diff による
処理，さらに整形を実現している．またページの都合上，長い行の
部分は ``\verb+ \\+'' で分割している．実際のプログラミングは
``\verb+ \\+'' を消してさらに改行せずに記述して欲しい．

また，このプログラムでは本稿の表示と少し違う表示をする．
本稿では
\begin{verbatim}
    ;▼▼▼▼▼▼
    (一つめのファイルにだけある部分)
    ;●●●
    (二つめのファイルにだけある部分)
    ;▲▲▲▲▲▲
\end{verbatim}
と表示しているところ，このプログラムでは
\begin{verbatim}
    ;▲▲▲▲▲▲
    (一つめのファイルにだけある部分)
    ;●●●
    (二つめのファイルにだけある部分)
    ;▼▼▼▼▼▼
\end{verbatim}
と表示する．つまり差分の始まりと終りを示す記号が逆転する．
これは， 理論の説明としては差分部分を挟んでいることを
示す上の表示がよいが，みやすさとしては下の表示の方が
見やすいからそうしているのである．
下の表示だと差分部分とそれ以外との境目で，
三角形の底辺が差分部分側に並び差分部分が見やすいのである．
上の表示の方がみやすいという人はプログラムのその部分だけ
書き直せばよい．ちょうど以下のように
\begin{verbatim}
#               print ";▼▼▼▼▼▼\n";
#              print ";▲▲▲▲▲▲\n";
\end{verbatim}
コメントアウトして行があるのでそのコメントを削り，もとのを
コメントアウトするとすぐに表示方法をかえることができる．

プログラム中，\verb+~username+ としている部分があるが，
そのusernameの部分はその UNIX システムに login しているユーザの名前
にしてほしい(例: ``\verb+~murata+'')．
また，二つのプログラムの実行許可は与えておき，
\verb+mdiff+ は環境変数 PATH のとおっているところに，
\verb+~username/bin/Perl/tmpdiff_patch.pl+ は，
\verb+~username/bin/Perl+ のディレクトリに置くこと．

また，mdiff のプログラム中の ``/bin/csh'' と ``/usr/bin/diff'' 
の部分と， \verb+tmpdiff_patch.pl+ のプログラム中の
``/usr/local/bin/perl'' の部分は各マシンごとに，
それらのコマンドがあるディレクトリに書き直すこと．

\subsection{mdiff の使い方}\label{sec:use_mdiff}

上のように二つのプログラムを記述しそれぞれのファイルを
所定の場所におくとあとは以下のように打ち込んで
mdiff を使うだけである．
\begin{verbatim}
    mdiff <ファイル1> <ファイル2>
\end{verbatim}
\verb+<ファイル1>+, \verb+<ファイル2>+ は比較する二つのファイルである．
例えば，二つのファイルが
\begin{verbatim}
------------------------------------------------------------
<ファイル1>
------------------------------------------------------------
    今日
    学校へ
    いく
------------------------------------------------------------
<ファイル2>
------------------------------------------------------------
    今日
    大学へ
    いく
------------------------------------------------------------
\end{verbatim}
であったとする．それで，mdiff を動かすと以下の出力を得る．
\begin{verbatim}
    今日
    ;▲▲▲▲▲▲
    学校へ
    ;●●●
    大学へ
    ;▼▼▼▼▼▼
    いく
\end{verbatim}
「学校へ」と「大学へ」の部分が差分として正しく抽出できる．

あとはうまく行単位にデータを格納したファイルを二つ作り，
これらを上記のように mdiff にかければよい．そうすると
様々な結果が mdiff により出力される．

\acknowledgment

本稿の\ref{sec:sp_merge}節の
話し言葉データと書き言葉データの対応づけの
実験では独立行政法人通信総合研究所内元清貴研究員に実験データなどを
提供してもらった．
また，本稿には筆者が学生であったころの研究室の
同僚のコメントが役に立っている．
ここに感謝する．



\begin{thebibliography}{}

\bibitem[\protect\BCAY{新谷}{新谷}{1995}]{araya_juman}
新谷研 \BBOP 1995\BBCP.
\newblock \JBOQ 日本語形態素解析システムＪＵＭＡＮの精度向上\JBCQ\
\newblock \Jem{京都大学工学部学士論文}.

\bibitem[\protect\BCAY{藤井, 伊藤, 秋葉, 石川}{藤井\Jetal
  }{2001}]{fujii_kaiho_2001}
藤井敦, 伊藤克亘, 秋葉友良,  石川徹也 \BBOP 2001\BBCP.
\newblock \JBOQ 音声言語データの構造化に基づく講演発表の自動要約\JBCQ\
\newblock \Jem{ワークショップ「話し言葉の科学と工学」}.

\bibitem[\protect\BCAY{春野}{春野}{1997}]{haruno_ipsj97}
春野雅彦 \BBOP 1997\BBCP.
\newblock \JBOQ 辞書と統計を用いた対訳アライメント\JBCQ\
\newblock \Jem{情報処理学会論文誌}, {\Bbf 38}  (4).

\bibitem[\protect\BCAY{石間, 藤井, 石川}{石間\Jetal }{1998}]{fujii1998}
石間衛, 藤井敦,  石川徹也 \BBOP 1998\BBCP.
\newblock \JBOQ 日本語形態素・構文解析システム{JEMONI}の開発と評価に
  ついて\JBCQ\
\newblock \Jem{情報処理学会 自然言語処理研究会 98-NL-127}.

\bibitem[\protect\BCAY{加藤, 浦谷}{加藤, 浦谷}{1999}]{Kato1999}
加藤直人,  浦谷則好 \BBOP 1999\BBCP.
\newblock \JBOQ 局所的要約知識の自動獲得手法\JBCQ\
\newblock \Jem{言語処理学会誌}, {\Bbf 6}  (7).

\bibitem[\protect\BCAY{松本, 黒橋, 宇津呂, 妙木, 長尾}{松本\Jetal
  }{1992}]{juman}
松本裕治, 黒橋禎夫, 宇津呂武仁, 妙木裕,  長尾真 \BBOP 1992\BBCP.
\newblock \JBOQ 日本語形態素解析システム {JUMAN} 使用説明書 version 1.0\JBCQ\
\newblock 京都大学工学部 長尾研究室.

\bibitem[\protect\BCAY{望主, 荻野, 太田, 井佐原}{望主\Jetal
  }{2000}]{mochinushi2000}
望主雅子, 荻野紫穂, 太田公子,  井佐原均 \BBOP 2000\BBCP.
\newblock \JBOQ 重要文と要約の差異に基づく要約手法の調査\JBCQ\
\newblock \Jem{情報処理学会 自然言語処理研究会 2000-NL-135}.

\bibitem[\protect\BCAY{村田}{村田}{1995}]{murata_shuuron}
村田真樹 \BBOP 1995\BBCP.
\newblock \JBOQ 日本語文章における名詞の指示対象の推定\JBCQ\
\newblock \Jem{京都大学工学部修士論文}.

\bibitem[\protect\BCAY{村田, 長尾}{村田, 長尾}{1996}]{murata_noun_nlp}
村田真樹,  長尾真 \BBOP 1996\BBCP.
\newblock \JBOQ
  名詞の指示性を利用した日本語文章における名詞の指示対象の推定\JBCQ\
\newblock \Jem{言語処理学会誌}, {\Bbf 3}  (1).

\bibitem[\protect\BCAY{村田, 長尾}{村田, 長尾}{1997}]{murata_deno_nlp}
村田真樹,  長尾真 \BBOP 1997\BBCP.
\newblock \JBOQ
  用例や表層表現を用いた日本語文章中の指示詞・代名詞・ゼロ代名詞の指示対象の推
定\JBCQ\
\newblock \Jem{言語処理学会誌}, {\Bbf 4}  (1).

\bibitem[\protect\BCAY{村田, 馬, 内元, 小作, 内山,
  井佐原}{村田\Jetal }{2000a}]{murata_irex_ir_nlp}
村田真樹, 馬青, 内元清貴, 小作浩美, 内山将夫,  井佐原均 \BBOP
  2000a\BBCP.
\newblock \JBOQ 位置情報と分野情報を用いた情報検索\JBCQ\
\newblock \Jem{言語処理学会誌}, {\Bbf 7}  (2).

\bibitem[\protect\BCAY{村田, 神崎, 内元, 馬, 井佐原}{村田\Jetal
  }{2000b}]{murata_msort_nlp}
村田真樹, 神崎享子, 内元清貴, 馬青,  井佐原均 \BBOP 2000b\BBCP.
\newblock \JBOQ 意味ソートmsort ---
  意味的並べかえ手法による辞書の構築例とタグつきコーパスの作成例と情報提示シス
テム例 ---\JBCQ\
\newblock \Jem{言語処理学会誌}, {\Bbf 7}  (1), 51--66.

\bibitem[\protect\BCAY{村田, 内山, 内元, 馬, 井佐原}{村田\Jetal
  }{2000c}]{murata2000_3_nl}
村田真樹, 内山将夫, 内元清貴, 馬青,  井佐原均 \BBOP 2000c\BBCP.
\newblock \JBOQ
  決定リスト，用例ベース手法を用いたコーパス誤り検出・誤り訂正\JBCQ\
\newblock \Jem{自然言語処理研究会 2000-NL-136}, 49--56.

\bibitem[\protect\BCAY{村田, 内山, 井佐原}{村田\Jetal
  }{2000d}]{murata_QA_nlp2000ws}
村田真樹, 内山将夫,  井佐原均 \BBOP 2000d\BBCP.
\newblock \JBOQ 質問応答システムを用いた情報抽出\JBCQ\
\newblock \Jem{言語処理学会第6回年次大会ワークショップ論文集}, \BPGS\ 33--40.

\bibitem[\protect\BCAY{村田, 内山, 井佐原}{村田\Jetal
  }{2000e}]{murata2000_1_nl}
村田真樹, 内山将夫,  井佐原均 \BBOP 2000e\BBCP.
\newblock \JBOQ 類似度に基づく推論を用いた質問応答システム\JBCQ\
\newblock \Jem{自然言語処理研究会 2000-NL-135}, 181--188.

\bibitem[\protect\BCAY{村田, 馬, 内元, 井佐原}{村田\Jetal
  }{2001a}]{murata_nlc2001}
村田真樹, 馬青, 内元清貴,  井佐原均 \BBOP 2001a\BBCP.
\newblock \JBOQ
  サポートベクトルマシンを用いたテンス・アスペクト・モダリティの日英翻訳\JBCQ\
\newblock \Jem{電子情報通信学会 言語理解とコミュニケーション研究会 NLC2000-78}.

\bibitem[\protect\BCAY{村田, 内山, 内元, 馬, 井佐原}{村田\Jetal
  }{2001b}]{NLP2001}
村田真樹, 内山将夫, 内元清貴, 馬青,  井佐原均 \BBOP 2001b\BBCP.
\newblock \JBOQ 機械学習を用いた機械翻訳用モダリティコーパスの修正\JBCQ\
\newblock \Jem{言語処理学会 第７回年次大会}.

\bibitem[\protect\BCAY{村田, 井佐原}{村田,
  井佐原}{2001c}]{murata_nlp2001ws_true}
村田真樹,  井佐原均 \BBOP 2001c\BBCP.
\newblock \JBOQ 言い換えの統一的モデル --- 尺度に基づく変形の利用 ---\JBCQ\
\newblock \Jem{言語処理学会第7回年次大会ワークショップ論文集}.

\bibitem[\protect\BCAY{村田, 内山, 内元, 馬, 井佐原}{村田\Jetal
  }{2001d}]{murata_nlc2001_wsd}
村田真樹, 内山将夫, 内元清貴, 馬青,  井佐原均 \BBOP 2001d\BBCP.
\newblock \JBOQ 種々の機械学習手法を用いた多義解消実験\JBCQ\
\newblock \Jem{電子情報通信学会 言語理解とコミュニケーション研究会 NLC2001-2}.

\bibitem[\protect\BCAY{村田, 井佐原}{村田,
  井佐原}{2001e}]{murata_nl2001_henkei}
村田真樹,  井佐原均 \BBOP 2001e\BBCP.
\newblock \JBOQ
  同義テキストの照合に基づくパラフレーズに関する知識の自動獲得\JBCQ\
\newblock \Jem{情報処理学会 自然言語処理研究会 2001-NL-142}.

\bibitem[\protect\BCAY{村田, 馬, 内元, 井佐原}{村田\Jetal
  }{2001f}]{modal2001}
村田真樹, 馬青, 内元清貴,  井佐原均 \BBOP 2001f\BBCP.
\newblock \JBOQ 用例ベースによるテンス・アスペクト・モダリティの日英翻訳\JBCQ\
\newblock \Jem{人工知能学会誌}, {\Bbf 16}  (1).

\bibitem[\protect\BCAY{村田, 井佐原}{村田,
  井佐原}{2001g}]{murata_kaiho_2001}
村田真樹,  井佐原均 \BBOP 2001g\BBCP.
\newblock \JBOQ 話し言葉と書き言葉の diff\JBCQ\
\newblock \Jem{ワークショップ「話し言葉の科学と工学」}.

\bibitem[\protect\BCAY{Murata, Utiyama \BBA\ Isahara}{Murata
  et~al.}{1999}]{qa_memo}
Murata, M., Utiyama, M.,  \BBA\ Isahara, H. \BBOP 1999\BBCP.
\newblock
\newblock \BBOQ Question Answering System Using Syntactic Information\BBCQ.
\newblock http://xxx.lanl.gov/abs/cs.CL/9911006.

\bibitem[\protect\BCAY{佐藤}{佐藤}{2001}]{iikae_jws}
佐藤理史 \BBOP 2001\BBCP.
\newblock \Jem{言語処理学会第7回年次大会ワークショップ論文集}.

\bibitem[\protect\BCAY{島内, 有澤, 野下, 浜田, 伏見}{島内\Jetal
  }{1994}]{algo}
島内剛一, 有澤誠, 野下浩平, 浜田穂積,  伏見正則 \BBOP 1994\BBCP.
\newblock \Jem{アルゴリズム辞典}.
\newblock 共立出版株式会社.

\bibitem[\protect\BCAY{内元, 野畑, 太田, 村田, 馬,
  井佐原}{内元\Jetal }{2001}]{uchimoto2001}
内元清貴, 野畑周, 太田公子, 村田真樹, 馬青, 井佐原均 \BBOP
  2001\BBCP.
\newblock \JBOQ 予稿とその講演書き起こしの対応付けおよび書き起こし
  のテキストのテキスト分割\JBCQ\
\newblock \Jem{言語処理学会 年次大会}, 317--321.

\end{thebibliography}



\begin{biography}
\biotitle{略歴}
\bioauthor{村田 真樹}{
1993年京都大学工学部卒業．
1995年同大学院修士課程修了．
1997年同大学院博士課程修了，博士（工学）．
同年，京都大学にて日本学術振興会リサーチ・アソシエイト．
1998年郵政省通信総合研究所入所．研究官．
自然言語処理，機械翻訳，情報検索の研究に従事．
言語処理学会，情報処理学会，人工知能学会，ACL，各会員．}

\bioreceived{受付}
\bioaccepted{採録}
\end{biography}

\end{document}
