一文章の要約システム(5) :深層学習による最適助詞の推定

色々考えてきたが、ここに及んで、深層学習に頼ることにした。アイデアをより詳しく語ると、word2vecと深層学習をつなげてみようということだ。

まず、日本語ウィキペディアから拾ってきた、名詞+助詞+(名詞・動詞)のデータは、4000万個になった。両脇の名詞、あるいは動詞から、それらをつなぐ間の助詞をどう推定するのか、データを眺めていてもさっぱりラチがあかない。前後の名詞と動詞を品詞化して、次のような感じにして、情報を集めたが、これでもパッとしない。

巡洋艦(名詞,一般,*,*):が(助詞,格助詞,一般):支援(名詞,サ変接続,*,*)
愛知県名古屋市西区(名詞,固有名詞,地域,一般):の(助詞,連体化,*):上小田井駅(名詞,固有名詞,地域,一般)
古代ローマ(名詞,固有名詞,一般,*):は(助詞,係助詞,*):ギリシア(名詞,固有名詞,地域,国)
インクジェットプリンター(名詞,固有名詞,一般,*):に(助詞,格助詞,一般):対象(名詞,一般,*,*)
祭神(名詞,一般,*,*):は(助詞,係助詞,*):博多区(名詞,固有名詞,地域,一般)
処理(名詞,サ変接続,*,*):が(助詞,格助詞,一般):いくつ(名詞,代名詞,一般,*)
キャピタルワン(名詞,固有名詞,一般,*):を(助詞,格助詞,一般):買収(名詞,サ変接続,*,*)
政権(名詞,一般,*,*):を(助詞,格助詞,一般):とる(動詞,自立,*,*)
婚姻(名詞,サ変接続,*,*):の(助詞,連体化,*):20%(名詞,固有名詞,一般,*)
10節(名詞,固有名詞,一般,*):に(助詞,格助詞,一般):定め(動詞,自立,*,*)
サッカー(名詞,一般,*,*):は(助詞,係助詞,*):0(名詞,数,*,*)
ヤン・ヴァーツラフ・ヴォジーシェク(名詞,固有名詞,人名,一般):の(助詞,連体化,*):作曲(名詞,サ変接続,*,*)
男子シングルス(名詞,固有名詞,一般,*):で(助詞,格助詞,一般):最初(名詞,一般,*,*)
たよっ(動詞,自立):て(助詞,接続助詞,*):霧(名詞,一般,*,*)
人物(名詞,一般,*,*):の(助詞,連体化,*):風景(名詞,一般,*,*)
板垣退助(名詞,固有名詞,人名,一般):が(助詞,格助詞,一般):第2次(名詞,固有名詞,一般,*)
前線(名詞,一般,*,*):に(助詞,格助詞,一般):なり(動詞,自立,*,*)
存廃(名詞,一般,*,*):の(助詞,連体化,*):判断(名詞,サ変接続,*,*)
連城(名詞,固有名詞,人名,姓):の(助詞,連体化,*):憧れ(動詞,自立,*,*)
型(名詞,接尾,一般,*):の(助詞,連体化,*):吸入(名詞,サ変接続,*,*)
地区(名詞,一般,*,*):も(助詞,係助詞,*):発生(名詞,サ変接続,*,*)
王座(名詞,一般,*,*):を(助詞,格助詞,一般):アグスティン(名詞,固有名詞,人名,一般)
ELMS(名詞,固有名詞,組織,*):の(助詞,連体化,*):LMP(名詞,一般,*,*)
たち(名詞,接尾,一般,*):は(助詞,係助詞,*):11月23日(名詞,固有名詞,一般,*)
舞台(名詞,一般,*,*):は(助詞,係助詞,*):ポルトガル(名詞,固有名詞,地域,国)
1944年(名詞,固有名詞,一般,*):に(助詞,格助詞,一般):主税局(名詞,固有名詞,組織,*)
現象(名詞,一般,*,*):について(助詞,格助詞,連語):幾分(名詞,一般,*,*)
湾(名詞,接尾,一般,*):の(助詞,連体化,*):北(名詞,一般,*,*)
代(名詞,接尾,一般,*):に(助詞,格助詞,一般):結婚(名詞,サ変接続,*,*)
上番(名詞,一般,*,*):や(助詞,並立助詞,*):平安時代(名詞,固有名詞,一般,*)
3月(名詞,固有名詞,一般,*):は(助詞,係助詞,*):永田鉄山(名詞,固有名詞,人名,一般)
シュテティーン(名詞,一般,*,*):で(助詞,格助詞,一般):商業(名詞,一般,*,*)
ホルティ(名詞,一般,*,*):は(助詞,係助詞,*):反共主義者(名詞,固有名詞,一般,*)
冏(名詞,一般,*,*):を(助詞,格助詞,一般):討つ(動詞,自立,*,*)
プラットフォーム(名詞,一般,*,*):の(助詞,連体化,*):合計(名詞,サ変接続,*,*)
ショパン(名詞,固有名詞,人名,姓):によって(助詞,格助詞,連語):フルート(名詞,一般,*,*)

品詞を使うことも考えたが、品詞情報はとても弱い。助詞の選択は、品詞で機械的にも止まるものではなく、前後に使われている名詞や動詞の意味に連結しているのだ。

そこで、深層学習を利用しようということになった。前後の言葉を入れると、最適助詞を選び出すようなニューラルネットワークを構築すれば良い。深層学習のjavaプログラムはすでに作ってある。自己符号化型のものだが。

ただ、言葉膨大にある。入力ユニット数を数万に増やすわけには行かない。そこで、言葉をword2vecを用いて、200次元ベクトルで表し、前後の言葉で、合計400次元にすれば、難なく、深層学習で扱える。出力は、助詞のいずれか一つが選択されるように、助詞の数だけのユニットだから、それは、限られた数で良い。せいぜい数十個だろう。

4000万個のうち、3000万個くらいを学習させて、残りの1000万個でテストすれば良い。早速データを作ろう。