ブロック玩具に学ぶ文章生成ツール
HaoriBricks
HaoriBricks: A Construction Set for Japanese Text
名古屋大学大学院工学研究科教授

佐藤理史

京都大学大学院工学研究科電気工学第二専攻博士課程研究指導認定退学。博士（工学）。
北陸先端科学技術大学院大学、京都大学を経て、2005 年より現職。現在、言語処理学会
副会長。

1 はじめに長いからである。

形態素解析や構文解析といった日本語の解析系ツーであり、そこで採用したのが、ブロック玩具を模したブルはかなり整ってきたが、その一方で、日本語の生成系ロックモデルである [3]。ブロック玩具では、基本となツールは存在しないに等しい。我々は、短編小説の自動る部品が提供され、それを組み合わせることで、色々な生成の研究において、ストーリー文法に従って文章を組モノを作り上げることができる。たとえば、ブロック玩

み立てる GhostWriter と、その配下で文を組み立てる具の代表格であるレゴでは、建物や乗り物、動物や植文生成器 Haori を作成した [1]。そして、その経験を踏物、架空の宇宙船など、ほとんどありとあらゆるものの

まえ、現在、それぞれの改良版である GhostWriter2ミニュチュアモデルを作ることができる。HaoriBricksと HaoriBricks を開発している。このうち、本稿でははこれに倣い、文章を構成する基本的な部品を提供し、HaoriBricks を紹介する。

それらを組み合わせることによって、任意の文章の合成その実現のために、新たに設計したのが HaoriBricksを可能にすることを目標としている。その模式図を図１

2 HaoriBricks の基本設計に示す。

我々が対象としている短編小説は、いわゆるショート部品（マクロブロック）を、基本部品とまったく同じよショートと呼ばれるもので、その長さはおおよそ原稿用うに使えるようにする。これはちょうど、プログラミン紙 20 枚（8000 字）以内が目安である。「日経星新一グにおいてサブルーチンを定義することに相当する。こ賞」[2] の制限字数は１万字で、これよりは少し長い。の機能により、典型的な日本語表現のライブラリを実装

2016 年 3 月に開催した星新一賞への応募報告会で、し、記述量の削減を目論む。

さらに、いくつかの部品を組み合わせて作った大きなSF・ファンタジー作家の長谷敏司氏より、「制限字数に近い分量の作品を応募しないかぎり入賞は望めない」と338のコメントをいただいた。そのため、我々は、１万字程

3 具体例

度の小説を作ることを次の目標の１つに設定している。

図２に、「鈴木さんは車の調子が悪いことに気づいた」

この長さの文章を生成するプログラムを作るためにという文を生成するための HaoriBricks のコードを示

は、それ相応の準備が必要である。その１つが、文章をす。それぞれのブロックは関数（正確にはプログラミン生成するプログラムをできるだけ簡便に（少ない記述量グ言語 Ruby のメソッド）として実装されている。こで）書けるようにすることである。なぜなら、自動生成のコードは、次の 14 個のブロックから構成されている。

するテキストとして、1 万字という長さはとてつもなく（スラッシュの後の数字は引数の数を表す。）

!

5HaoriBricks の模式図

産業日本語関連

図１

ブロックを組み合わせて文を合成する。HaoriBricks は、そのための基本ブロックを提供する。

1. 主題 /2
2. は /1

提題構造を作る。
副助詞「は」を付与する。

3. : 鈴木さん

14. : 調子

名詞「調子」を作る。

これらのブロックのうち、コロンで始まるブロックが内容語に対応し、それ以外のブロックは、機能語に対応時制を過去（有標）に設定する。

するブロックか、あるいは、文の構造を規定するブロッ

4. タ /1

名詞「鈴木さん」を作る。

5. 動詞 /n

動詞を述語とする述語構造を作る。

クである。これらのブロックは、いずれも同等の働きを

6.	: 気づく語「気づく」を作る。その品詞は 5. によ持つブロックと置き換え可能である。

り動詞と設定され、活用型は子音動詞型と自動推定される。
7. に /1

ある特定の文を作って、それを出力するだけであれば、このように文をブロックで組み立てる必要はない。

格助詞「に」を付与する。

8.	補足節こと /1

形式名詞「こと」を伴う補足節を作る。

ブロックで組み立てる利点は、プログラムで条件によって異なる文を生成したり、組み立てたブロックを再利用したりすることができる点にある。たとえば、先のコー

9. 形容詞 /n形容詞を述語とする述語構造を作る。

ドに、ブロック「ない」を追加すれば、「鈴木さんは車語「悪い」を作る。その品詞は 9. により形の調子が悪いことに気づかなかった」を生成することが容詞と設定され、活用型はイ形容詞型と自動推定さできる。さらに、これにブロック「丁寧」追加して、「鈴れる。

木さんは車の調子が悪いことに気づきませんでした」を

10.	: 悪い

11. が /1

格助詞「が」を付与する。

生成することもできる（図１）。そして、こうして組み12. の /2 「A の B」の構造を作る。

立てた任意のコードを、新たなマクロブロックとして定13. : 車 名詞「車」を作る。

義することが可能である。

YEAR BOOK 2O17 339

x0 = haori{ 主題(は(:鈴木さん),
タ(動詞(:気づく,に(補足節こと(形容詞(:悪い,が(の(:車, :調子)))))))) }print x0.surface_string, "\n"# => 鈴木さんは車の調子が悪いことに気づいた
x1 = haori{ ない(x0) }print x1.surface_string, "\n"# => 鈴木さんは車の調子が悪いことに気づかなかった
x1 = haori{ 丁寧(x1) }print x1.surface_string, "\n"# => 鈴木さんは車の調子が悪いことに気づきませんでした
図２ HaoriBricks コードの例
ブロックの組み合わせは、関数合成と同じ要領。コードは haori{ } で囲う。
表層文字列は、surface_string メソッドで生成される。

4 Basic パッケージの書き手や発話の話し手を陽に制御する機構（これも、現時点において、HaoriBricks の原子ブロック（あ現時点では、話し手によって言い方を変えるために専用らかじめ定義されている組み込みブロック）は、実はのプログラムを書かなければならないが、この点に関し22 種類しかない。この原子ブロックと Ruby の機能をても自動化の研究を進めている [5]。

ブロックとして実装される）をあらかじめ組み込んだ。

使って、日本語の主要な機能語と構造に対応するブロックを定義している。この方式は、プログラミング言語

参考文献

Lisp に倣っている。なお、機能語の辞書は内部に組み[1] 佐藤理史 .『コンピュータが小説を書く日－ AI 作

込まれており、文法情報はこの辞書から供給される。内家に「賞」は取れるか』. 日本経済新聞出版社 ,容語の辞書は外付けで用意することもできるが、一部の2016.

例外的な語を除けば、事実上不要である。
現在、編纂を進めているのが Basic パッケージと名[3] 佐藤理史 . HaoriBricks: ブロック玩具に学ぶ日本付けたブロック集合で、約 1,200 種類のブロックが定語文章生成ライブラリ . 言語処理学会第 23 回年義されている。このパッケージは、通常の日本語の文章次大会発表論文集 , pp.20-23, 2017.に現れる機能語と構造をカバーすることを目指していyoutu.be/hRtlRB2wa9E

る。より具体的には、益岡・田窪の『基礎日本語文法−改訂版−』[4] の例文（約 1,100 件）を違和感なく記述できることを目標としている。
小説には複数人の会話も含まれる。以前のシステムではこの扱いに苦労したため、HaoriBricks では、文章

340[2] 日経星新一賞 . http://hoshiaward.nikkei.co.jp

https://[4] 益岡隆志 , 田窪行則 .『基礎日本語文法－改訂版－』. くろしお出版 , 1992.
[5] 夏目和子 , 刀山将大 , 佐藤理史 . 発話文自動生成のための日本語表現文型辞書の作成 . 言語資源活用
ワークショップ 2016, pp.126-136, 2017.

産業日本語関連

5YEAR BOOK 2O17 341