東京都立産業技術高等専門学校 ものづくり工学科 電子情報工学コース
実習先 株式会社Shannon Lab
1.はじめに
株式会社Shannon Labは人工知能の研究開発を行なっており、主に音声認識や機械学習や対話を用いたシステムを開発している会社である。
今回のインターンシップでは、クローラを用いた動詞・目的語の対応付けに取り組んだ。動詞と目的語の対応を得ることは、文章の自動生成を行なう上で有用である。
たとえば「○○を食べました」という文章を生成するためには、「食べる」という動詞に対応する目的語(つまり食べ物の名前)をコンピュータが知っていなければならない。そこで、そのような動詞と目的語の対応関係を、Web上から収集してデータベースを作ることがこの実習の目標である。
またそれに加えて、動詞だけでなく形容詞との対応付けを行なうシステムの開発も試みた。たとえば「カレー」という名詞には「おいしい」や「濃厚な」などの形容詞が対応する。しかし時間の都合により、形容詞と名詞を対応付けるシステムについては充分な実験が行なえなかった。
2.実習内容
今回の実習で開発したシステムは、以下のような手順で動詞と目的語の関係を収集する。
例:「カレー」に対応する動詞を調べる場合
a)Bingの検索エンジンで「カレー」を検索して、上位の何件かのURLを取得する
b)URLが示すページを開き、本文のみを文字列として取得する
c)本文を解析して「カレー」を目的語とする動詞を探す
d)見つかった動詞を、「カレー」に対応する動詞としてデータベースに登録する
上記のaとbについてはShannon Labが開発したクローラを使用し、cとdの部分の開発を自分で行なった。
本文の解析には、係り受け解析器のCaboChaを使用した。形態素の解析のみであれば、形態素解析器のMeCabでも可能だが、CaboChaを使用することで係り受け解析が可能になり、目的語と動詞の対応を容易に得ることができる。
ただしCaboChaの場合はユーザ辞書を使用できないということが分かったため、MeCabのみを使用した解析方法も検討してみた。
どのような名詞について調べるかという点については、任意の名詞について調べる場合と、Wikipediaとはてなキーワードの辞書からランダムに取得した名詞について調べる場合の、2つの方法で調べられるようにした。
3.結果・考察
実習で開発したシステムを実際に動かしたところ、以下のようなデータが得られた。
表1:「カレー」に対応する動詞と形容詞
動詞 |
出現回数 |
形容詞 |
出現回数 |
食べる |
4 |
美味しい |
4 |
かける |
3 |
青い |
2 |
探す |
2 |
辛い |
2 |
作る |
2 |
やさい |
1 |
混ぜる |
2 |
好きな |
1 |
表1を見ると「食べる」や「美味しい」などの妥当な結果が得られていることが分かる。「やさい」というのは、元の文章が「やさいカレー」であると考えられるため、形容詞として判定されているのは好ましくないが、これは形態素解析器の仕様なので改善は難しいかもしれない。
3.1.辞書による違い
はてなキーワードとWikipediaからランダムに名詞を100個ずつ取得して動詞との対応を調べたところ、結果に大きな差が生まれた。
表1:Wikipediaとはてなキーワードの比較
辞書 |
Wikipedia |
はてなキーワード |
動詞と対応が得られた名詞 |
35 |
74 |
動詞の総数 (重複あり) |
119 |
251 |
表1を見るとWikipediaよりもはてなキーワードのほうが多くのデータを集められていることが分かる。これは、はてなキーワードの辞書の語数が約31万だったのに対してWikipediaの辞書には約140万もの語があり、あまり一般的に使用されない語が多く含まれているためと考えられる。
たとえば、今回Wikipediaの辞書から取得した100語の中には「鶴見臨港鉄道モハ140形電車」のような長大な語が含まれていた。このような語は検索をかけても部分一致の検索結果ばかりが出てくるため、動詞との対応が得られない。
しかし、はてなキーワードは流行語についての辞書であり、一般的すぎる語はあまり掲載されていない。たとえば「声」や「頭」などの名詞は掲載されていないので、はてなキーワードから網羅的なデータベースを作ることは難しいと思われる。
3.2.CaboChaとMeCabの違い
形態素解析にMeCabを使用する場合、係り受けの解析が必要なときは自分で行なわなくてはいけない。そのため係り受け解析の精度は落ちるが、
一方、助動詞や記号などによって細かい場合分けを行なえるというメリットがある。
動詞と目的語を対応付けする際、形態素解析にMeCabを使用してみたところ、CaboChaを使用した場合と比べて半分程度しか動詞が得られなかった。しかしMeCabではユーザ辞書が使えるため、デフォルト辞書に載っていない長い単語(「吾輩は猫である」など)について調べる場合は、CaboChaを使用した場合よりも多くの動詞を得られた。
3.3.改善すべき点
できるだけ正確なデータを集められるように努力したが、時間の都合で改善できなかった点があった。
たとえば、「このような生物を爬虫類という」という文章から「生物」を目的語とする動詞を探すと「いう」が出てくる。しかし、この文章から「生物」という名詞と「いう」という動詞の間に関係性を見出すことは不自然である。そのため、「いう」のような動詞には例外的な処理が必要と思われる。
また、形容詞と名詞の対応付けについては、まだ不適切な出力が多く、実用には堪えないレベルであった。たとえば「冷めているカレー」という文章から「いる」を形容詞として拾ってしまうことがあり、形容詞としての意味が失われてしまう。そのため、「冷めている」を一つの形容詞とするなどの対応が必要である。
3.4.対話システムへの応用
動詞と目的語の対応関係は、文章の自動生成を用いた対話システムでの利用が期待できる。
たとえば、ユーザが「今朝は何を食べましたか」という文章を入力したとする。これが「食べる」という動作の目的語を尋ねる文章であることは、CaboCha(あるいはMeCab)を使って終助詞と動詞を調べれば判定できる。
そこで、あらかじめ「○○を××しました」というテンプレートを用意しておき、これに動詞と名詞を当てはめて文章を返せば、違和感なく会話をさせられるはずである。たとえば、「食べる」という動詞に対して「カレー」という目的語が対応付けられていれば、「カレーを食べました」という文章を返すことができる。
さらに、入力文を解析するときに時制や主語などを判定して複数の返答パターンを使い分ければ、より高度な文章を返すことができるかもしれない。
また、動詞と目的語の対応だけでなく、様々な名詞や形容詞や副詞との相関についてデータを集めれば、より幅広い質問に答えることができるようになるであろう。
4.まとめ
今回の実習で、動詞と目的語の対応付けについては充分な精度の結果を得ることができた。しかし、どのような名詞で検索をかけるかによって得られるデータの量に大きな差があることが分かったので、その点については大きな改善の余地があると感じられた。
a)インターンシップに参加した感想
今回の実習ではとても充実した体験をすることができた。
特に、実習が始まる前からPython言語や開発環境について丁寧な事前指導をして頂けたことがありがたかった。事前指導のおかげで、しっかりと準備を整えた上で実習に臨み、初日から有意義に時間を使うことができた。
また、実習期間中の開発作業は自分で創意工夫しながら進めることができたので、楽しく作業をすることができた。自分は日本語の文章の解析をするのが好きであったため、このテーマについての実習をさせて頂けてとても嬉しく感じた。
今回の実習で得られた知識は、卒業研究などでも役立つものだと思う。
b)後輩へのアドバイス
Shannon Labはインターンシップ生を積極的に受け入れている会社であり、とても熱心に指導をしてくださるので、本格的な開発作業を体験したい人や、自分の知識と技術を高めたい人にとっては良い経験になると思う。
ただし実習でどのようなテーマに沿って作業をするかは自分で決めることになるので、積極的に課題を見付けて努力できる学生が望ましい。また、実習中に分からないことがあっても基本的には自己解決が求められるので、インターネットなどで情報を集めて解決方法を探す能力も必要になる。