単語と文字の話

海野 裕也
リサーチャー

2011-05-29 22:01:28

4月からPFIで働いてます。海野です。
今日は単語の話をします。読み物的な話なので軽く読んでください。

テキストデータなどの自然文を機械処理するときには、まず最初に単語に分割するということをよく行います。一般的にはMeCabやChasenといった形態素解析エンジンに投げて行います。形態素と単語の区別という話もあるのですが、ここでは大雑把に「連続した文字列の単位」くらいの意味で話します。
検索という文脈ですと形態素インデックスという言葉がありますが、これは検索の最小単位を文字単位ではなくて形態素の単位にするということです。例えば「東京都」は「東京」「都」に分かれるため、「京都」というクエリに対して見つかるのを防ぐなど、精度を上げる効果があります。反面、深刻な検索漏れを引き起こす可能性があるため嫌われることが多いです。こうした漏れは検索に限らず、テキストマイニングなどの文脈でも問題となることが多いです。
主な原因は2つあります。ひとつは解析精度の問題。しかし、もっと根本的な問題として、解析単位の問題があります。システムが仮定する単語の単位は、往々にしてユーザーが仮定する単位と異なります。例えば、「登山家」という単語があった場合、「登山」というクエリはここにヒットすべきでしょうか? システムが「登山家」を最小単位として取り扱っている限り、「登山」というクエリがヒットする事はありません。そもそも「登山家」は「登山」「家」という形態素だ、という意見もあるでしょう。では、「登山」に対して「山」は見つかるべきでしょうか? そこまでくると文字単位で処理すればいいように思いますが、先の「東京都」の例は見つからなくていい気がします。単語単位と文字単位の間で、柔軟な処理をすることはできないか。今回紹介する論文は、この間を狙った研究です。

“Character-Level Dependencies in Chinese: Usefulness and Learning”, Hai Zhao. EACL 2008.

日本語同様、単語境界にスペースを入れない言語の代表格、中国語言語処理界隈では今でも単語分割の研究は盛んに行われているようです。近年の単語分割の研究は、多くの場合人手で分割したデータを再現できるかという軸で行います。しかし、この中の分割単位で一悶着あるのです。例えば、先程の「登山家」の例でも、これは「登山家」なのか「登山」「家」なのか。日本語もそうですが、「東京特許許可局」のようにいくらでも漢字をつなげると長い単語ができてしまいます。この単語単位が、正解と仮定するデータによって異なっていたら・・・。ここにおける単語単位とはなんだろうか? 細分割してしまうと、究極的には文字単位になってしまう。そこで単語という単位を捨てて、「文字間の関係」で「単語」が表現できていればいいのではないか、という提案がこの論文の主旨です。

関係の表現方法として2つの実験をしています。まず、従来の単語分割のモデルだと、例えば「日比谷でビールを飲んだ」という文をMeCabに食わせると、以下のような6つの単語の連続になります。

単語分割の例

これを文字間の係り関係で表現してあげます。単語内では単純に直後に、そして単語間では先頭文字同士に関係をもたせます。論文では、逆向き(後ろから前)方向への関係のもたせ方も解説していますが、ここでは省略します。

文字係り受けの例

この構造は、係り受け構文解析(dependency parsing)と同じ形をしています。係り受け解析解析は今までたくさん研究されていますので、それをそのまま適用できます。これだけで、従来の単語分割手法と大差ない程度の精度を達成できたよというのが、一つ目の実験結果です。提案する表現方法が、従来の単語分割方式と遜色ないということを示しています。また、transition-baseの手法をとっているため、線形時間で前から後ろにたどるだけで単語分割ができてしまうのもうれしいところです。

次に、単語内の係り関係を人手で与えてあげて実験しています。例えば、「米国大使館」という単語だったら、下のように「米国」と「大使館」に関係を与えてあげます。ちなみに、論文中の例は全部中国語だったため全くわかりませんでした。

単語内係り受けの例

できた構造は先ほどと同じように、構文解析技術を適用できます。筆者らは、最終的には単語間の係り受け関係(依存関係)も取り入れようとしています。そうすると、全体で文字の係り受け木を作っていることになります。すると、もはや「単語」という単位はいらないのではとい議論に及びます。

これらの方法に穴がないわけではないでしょう。例えば、単語境界とみなすべきかはっきりしない箇所があったとします。仮に単語という単位が必要ないのなら単語境界とみなしたときとそうでない時でできる構造は同じであって欲しいですが、上記の変換で生成される構造は異なります。ただ、注目して欲しいのは従来の単語というしがらみから開放されて、文字という単位を見なおしたほうがいいのではないかということです。
形態素解析という処理は、言語学的な文の解析という文脈で生まれた処理です。一方で、検索という技術はどちらかと言えば文字列処理の延長で生まれた技術です。この両者の境界に我々の求めている最適な何かが隠れているのかもしれません。検索という文脈で最適な言語処理とは何か、というのはまだ探る余地がありそうです。

2 Responses to “単語と文字の話”

  1. Graham Neubig Says:

    非常に面白いポストありがとうございます。形態素解析の研究をやっている人として、通常扱っている「単語」単位でしょっちゅう迷っています。例えば「日米」や「イケメン」は今扱っているコーパスで1つの単語になっていますが、こうなると「日米」と「日伊」の関係や「イケメン」と「ヲタメン」の関係が扱えなくなります。

    ただ、完全に文字ベースに移行しようとするとカタカナ語やローマ字語のような、各文字の情報量が比較的少ないところの解析精度が落ちたりします。また、解析スピードの問題も生じます。日本語の平均単語長が2文字であれば、O(n)のアルゴリズムが2倍、構文解析などのO(n^3)のアルゴリズムが8倍のスピードがかかります。どちらも致命的な問題ではないですが、応用によって考慮する必要はあるかもしれません。

  2. 海野 裕也 Says:

    コメントありがとうございます。単語境界問題は以前から考えていたのですが、すでにGrahamさんと森さんが取り組んでいたのでちゃんとはやっていませんでした 🙂 個人的には、アプリケーションで必要な粒度に、少ない労力で適応出来ればいいと思っています。

    速度の問題もありますね。現状で単語分割が速度面でボトルネックになっているので。速度と精度のトレードオフを調整できるような仕組みができるとよさそうですね。

Leave a Reply