日本語入力を支える技術

日本語入力を支える技術 ~変わり続けるコンピュータと言葉の世界

  • 2012/2/8
  • 徳永 拓之 (著)


これまで本ブログで日本語の文字に関する本をいくつか取り上げましたが、今回は日本語入力に関する本を取り上げます。

普段殆ど意識することなく日本語入力していますが、考えてみると、なぜ現在のような入力方式が一般に広がったのか?とか、どのような原理でローマ字入力から漢字交じりの日本語に変換できるのか?など、様々な疑問が湧いてきます。

今回取り上げる本は、そのような疑問に答えてくれる本です。

この本は2012年出版なので少し古い感じもするかもしれません。実は私も新品を買ったのではなく、最近、Amazon の中古品で購入して読みました。

ちなみに、私は先端の日本語入力技術を理解しているわけではありませんので、最新の技術と比較して、この本がどうなのかはわかりません。

しかし、日本語入力技術の経緯や理論的な考え方を、数式とコードを織り交ぜて丁寧に解説してくれており、興味深く読むことができました。理論中心の教科書と違って、コード例を示してくれることで数式の意味も理解しやすいです。

この本に書かれていることは、日本語入力に限らず、一歩進んだ入力支援機能を考える際のヒントが詰まっていると思いましたので、今回取り上げることにしました。

<本の内容>

本書の構成は「はじめに」に以下のように書かれています。
  • 『本書の前半は日本語入力システム全般の知識を解説し、後半ではかな漢字変換を中心に、そこで使われるアルゴリズムやデータ構造などを掘り下げます。かな漢字変換には、自然言語処理という研究分野で用いられる手法がそのまま使えます。逆に、本書を自然言語処理への入門として読むこともできるでしょう。』

【目次】
  • 第1章 日本語と日本語入力システムの歩み
    • 1.1 コンピュータで日本語を扱うということ
    • 1.2 日本語を入力するということ
    • 1.3 日本語入力とかな漢字変換
    • 1.4 日本語入力のはじまり
    • 1.5 かな漢字変換のはじまり
    • 1.6 単文節変換から連文節変換へ
    • 1.7 2強時代の到来~統計・機械学習ベースのアルゴリズムへ
    • 1.8 Web検索各社のかな漢字変換エンジンへの参入
    • 1.9 携帯電話における日本語入力
    • 1.10 まとめ
  • 第2章 日本語入力システムの概観
    • 2.1 ユーザ側から見た日本語入力
    • 2.2 システム側から見た日本語入力
    • 2.3 ひらがなの入力方法
    • 2.4 文字入力フレームワークのアーキテクチャ
    • 2.5 かな漢字変換エンジンのユーザインタフェース
    • 2.6 かな漢字変換エンジンのモジュール構成
    • 2.7 かな漢字変換器の作り方
    • 2.8 まとめ
  • 第3章 かな漢字変換エンジンに用いられるデータ構造
    • 3.1 かな漢字変換とデータ構造
    • 3.2 データ構造とは
    • 3.3 かな漢字変換に用いるデータ構造
    • 3.4 ハッシュテーブル
    • 3.5 カッコウハッシュ
    • 3.6 トライ
    • 3.7 ダブル配列
    • 3.8 LOUDS
    • 3.9 その他データ構造のテクニック
    • 3.10 ライブラリの入手について
    • 3.11 まとめ
  • 第4章 かな漢字変換システムの実装
    • 4.1 かな漢字変換をどうやって実現するか
    • 4.2 グラフの作成
    • 4.3 最短経路問題を解く
    • 4.4 単語間の線の距離を決める
    • 4.5 学習用のデータを作る
    • 4.6 まとめ
  • 第5章 統計・機械学習のアルゴリズムとその応用
    • 5.1 機械学習とは
    • 5.2 二値分類
    • 5.3 構造学習とかな漢字変換
    • 5.4 構造化SVM
    • 5.5 条件付き確率場(CRF)
    • 5.6 統計的かな漢字変換とは
    • 5.7 言語モデル
    • 5.8 かな漢字モデル
    • 5.9 変換精度を評価する
    • 5.10 変換誤りへの対処
    • 5.11 まとめ
  • 第6章 日本語入力のこれから
    • 6.1 日本語入力の未来予想
    • 6.2 予測入力
    • 6.3 かな漢字変換器の改良に向けて
    • 6.4 今後の学習に向けて
    • 6.5 まとめ
  • 付録
    • A.1 数学的な基礎知識
    • A.2 確率の基礎知識
    • A.3 学習アルゴリズムの歴史
    • A.4 機械学習を分類する
    • A.5 いろいろな学習アルゴリズム
    • A.6 CRFの目的関数の勾配の導出

<感想>

日本語の文字の世界を少し知ったとき、何だか哲学的な難しさを感じました。

一方、この本を読むと、日本語入力は技術的な難しさを感じました。

それはこの本が技術的に難しいという意味ではなく(簡単という意味でもありませんが)、日本語入力の諸問題にどのような技術を適用するか、という難しさです。

文字の世界と同様に、日本語入力も先人の工夫の上に成り立っていることをこの本で知ることができます。

本を買う前に目次を見たときは、自然言語処理の本にある理論中心の本かな?と思ったりしましたが、教科書によくある数式をさらっと解説するような内容ではなく、Pythonのコードとともに丁寧に解説してくれているので、理解が深まります。

個人的には、特にトライ木やビタビアルゴリズムなどの考え方や実装が丁寧に説明されており、実用面でも役立ちます。

ところで、日本語入力の機能要求を考えると、理想的な理論の追究というより、デバイスの制限やユースケースなどの厳しい制限の中で最適なものを考える必要がある分野ということが分かります。

例えば、どんなに高性能な日本語変換ができる理論や実装があったとしても、PCやスマホのリソースを半分以上日本語入力システムが使っていたり、反応が悪いと使えません。

このあたり、一般のアプリ開発が抱える課題と似たものを感じて、私としては妙に親近感?を持って読むことができました。

また、入力システム全体の構成の中で、どのあたりに機械学習を適用していくか?のような視点で読むと、自分がシステム設計を行うときのヒントになる気がしました。

私が日本語入力システムを作ることはありませんが(そのような知識や力量もありませんが)、一般教養として、というより、技術の組み合わせ例という観点で、とても有益なヒントをもらった気がします。

本の最後にはより進んだ情報を得るための参考書や学会なども筆者のコメント付きで紹介されています。

この本は、日本語入力技術の原理に興味を持つ方が最初に読むべき本の部類に入ると思いますが、それだけでなく、システム設計や自然言語処理の応用を考える上でも、いろいろなヒントが得られる本だと思います。

関連記事

コメント

このブログの人気の投稿

Google Document AIで画像から表形式データを抽出する(Vision API OCRとの違い)

VirtualBoxのスナップショット機能

Ubuntu/Colab環境でPDFファイルのページを画像化する(pdf2image、pdftoppm、pdftocairo)