辞書整備は大変だ
言語処理の単語解析器を支える解析用「辞書」の整備は大変です。
後輩とああだこうだと議論しています。
辞書は言語処理における1つの方法であり、辞書を頼りに言語を解体および分析します。
ほとんどの日本語形態素解析器は辞書を頼りとして、形態素に分割しています。
人間ならば「りんご」と「リンゴ」と「林檎」が同じ単語であることは言うまでもありません。
しかしながら、コンピュータ君がこれら3つの表記を同じものとは見なしてくれません。
そこで、これら3つが同じ単語だよということを辞書という知識により与えます。
上記は単純な例ですが、実際は多種多様に渡ります。
シソーラスは単語間の意味を上位・下位で分類したもので、これも辞書の1つと捉えることができます。
他に動詞の振る舞いを抽象化したものなどもあります。
「辞書」という単語を聞くと、森羅万象すべての語を網羅しているように感じますがそうではありません。
自分はネイティブだから網羅できるかというと、そんなわけありません。
また、解析システムと辞書の体系がかけあわさって表出する、複合的な問題もあります。
基本的に辞書は人手でメンテナンスされます。
新しい単語の扱いの問題や、そもそものデータ構造の理解が難しい問題。
他には、複数人が関わるとどうしても基準が揺らいできます。
そこをどのように制御するかという問題があります。
この時点でできる限りの致命的な構造の欠点を修正します。
これで、「完璧な辞書が作れない」ということを認識すること。
つまり妥協点と目標をすりあわせることです。
小さな規模で作成してみると、作業時間がどれくらいのものか分かってきます。
かなり難しいのが、整備や追加にかかる作業時間の見積もりです。
勘としか言いようがないですが・・・
簡潔なデータ構造とは、変更を加える際に変更する点が少なくかつ明確な構造です。
明確な設計思想は、作業者が判断のよりどころにするためのものです。
作業を1人でやろうが複数人であろうが、人間の基準は曖昧で揺れます。
これをできるだけ、設計思想や例で補います。
最後にメンテナンスツールです。
いかに簡単に変更を加えることができ、またその変更による影響はどのようなものかということを可視化できることが大事です。
これにより変な変更や、変更によるストレスを軽減することができます。
様々な問題を抱えながら、1つの終着点にたどり着く辞書作成がいかに難しいかを痛感しています。
辞書整備の難しさはなかなか共有しにくいものですので、何かコメントやその他チップスなど教えて頂けると幸いです。
後輩とああだこうだと議論しています。
そもそも「辞書」とは
ここでの辞書とは、国語辞典や大辞林のような人間向けの辞書ではなく、プログラムが利用する知識のことです。辞書は言語処理における1つの方法であり、辞書を頼りに言語を解体および分析します。
ほとんどの日本語形態素解析器は辞書を頼りとして、形態素に分割しています。
例えばどんな記述か。
表記ゆれ解消辞書の例をあげます。人間ならば「りんご」と「リンゴ」と「林檎」が同じ単語であることは言うまでもありません。
しかしながら、コンピュータ君がこれら3つの表記を同じものとは見なしてくれません。
そこで、これら3つが同じ単語だよということを辞書という知識により与えます。
上記は単純な例ですが、実際は多種多様に渡ります。
シソーラスは単語間の意味を上位・下位で分類したもので、これも辞書の1つと捉えることができます。
他に動詞の振る舞いを抽象化したものなどもあります。
辞書整備の難しさ
完璧な辞書はないよ
完璧な辞書は作れないと言うことです。「辞書」という単語を聞くと、森羅万象すべての語を網羅しているように感じますがそうではありません。
想定外のことが起きまくる
思いの及ばないような表現がたくさんあります。自分はネイティブだから網羅できるかというと、そんなわけありません。
また、解析システムと辞書の体系がかけあわさって表出する、複合的な問題もあります。
メンテナンスが大変だ
決まり文句のように言われることです。基本的に辞書は人手でメンテナンスされます。
新しい単語の扱いの問題や、そもそものデータ構造の理解が難しい問題。
他には、複数人が関わるとどうしても基準が揺らいできます。
そこをどのように制御するかという問題があります。
では、どうしましょう
問題ばかりと嘆いていても仕方がありませんから、作りましょう。小さな規模で作ってみよう
小さな規模で辞書を作成すると、なんとなく粗が見えてきます。この時点でできる限りの致命的な構造の欠点を修正します。
これで、「完璧な辞書が作れない」ということを認識すること。
つまり妥協点と目標をすりあわせることです。
小さな規模で作成してみると、作業時間がどれくらいのものか分かってきます。
かなり難しいのが、整備や追加にかかる作業時間の見積もりです。
勘としか言いようがないですが・・・
メンテナンスの負荷の軽減に
簡潔なデータ構造と明確な設計思想(ドキュメント)、メンテナンスツールが肝かと思います。簡潔なデータ構造とは、変更を加える際に変更する点が少なくかつ明確な構造です。
明確な設計思想は、作業者が判断のよりどころにするためのものです。
作業を1人でやろうが複数人であろうが、人間の基準は曖昧で揺れます。
これをできるだけ、設計思想や例で補います。
最後にメンテナンスツールです。
いかに簡単に変更を加えることができ、またその変更による影響はどのようなものかということを可視化できることが大事です。
これにより変な変更や、変更によるストレスを軽減することができます。
おわりに
辞書整備をしていて思うのが、先の偉大な研究者の方々が作成した辞書があまりにも素晴らしいということです。様々な問題を抱えながら、1つの終着点にたどり着く辞書作成がいかに難しいかを痛感しています。
辞書整備の難しさはなかなか共有しにくいものですので、何かコメントやその他チップスなど教えて頂けると幸いです。