意味のある「文」を生成してみよう 動詞と概念ツリー

意味のある「文」を生成してみよう 動詞と概念ツリー

このエントリーをはてなブックマークに追加

さて、今回から、いよいよ、「文」を生成していきます。
動くアプリも用意しましたので、実際に動かしてみてください。

最初に、これから何を作っていくかを説明しておきます。
目指すのは、「意味のある文章」を自動で生成するプログラムです。
「意味のある文章」とは、複数の文からなり、全体として、何らかの言いたいことが存在するものです。
「言いたいこと」とは、ロボマインド・プロジェクトで「認知パターン」と定義しているものと同じです。

そして、最低限の条件として、生成する文は、単語(名詞、動詞、助動詞など)から生成するものとします。
用意された文は使いません。
(理由については、「自然言語処理への提言1」をご覧ください)

そのうえで、まず目指すのは、「おかしくない文」の生成です。
たとえば、

花子はラーメンを食べる。

これは、おかしくない文です。
それでは、「おかしな文」とはどういう文かというと、

昼休みが緑色を食べる

これが、おかしな文です。
「おかしくない文」を作るのは、簡単そうで、意外と難しいのです。
なぜかというと、コンピュータは、常識を持っていないからです。
一言で常識といっても、さまざまな見方があり、一つの手法で解決できるものではありません。
そこで、今回は、「概念」を使って解決していきます。

その前に、まずは、「文」について考えます。
「文」は、述語を中心に組み立てられます。

花子はラーメンを食べる。

の場合、述語は動詞の「食べる」です。
「食べる」の目的語は「ラーメン」です。
「食べる」という動詞は、目的語として取れるのは、ラーメンだけに限らず、料理なら何でもいいわけです。
ラーメンは、料理概念に属する単語となります。

ここで、「概念ツリー」について説明します。
「概念ツリー」については、「言葉の意味をどう定義するか」で詳しく説明していますので、簡単に説明します。
ロボマインド・プロジェクトでは、全ての単語を概念ツリーで管理しています。
概念は上下関係があり、下位の概念はより具体的であり、上位の概念はより抽象的となります。
たとえば、「料理」概念の下には「麺類」概念があり、「料理概念」の上には、「飲食物」概念があります。
最も具体的なものは単語で、たとえば「ラーメン」です。そして、ラーメンは、「麺類」概念に属します。

最上位の概念は、あらゆる言葉を表す「単語」概念です。
「単語」概念の直ぐ下には「具体」概念と「抽象」概念があります。
「単語」概念から「ラーメン」までを並べると

単語-具体-無生物-飲食物ー料理-麺類:ラーメン

となります。

これを概念ツリーと呼んでいます。
概念ツリーの中身は、ロボマインド・プロジェクトで独自に作成していて、適宜、書き換えています。

つぎに、「花子」の概念ツリーは、

単語-具体-生物-動く生き物-知的生命体-人名-名-女性名:花子

となります。

 

 

概念ツリーは名詞だけでなく、動詞も存在します。
動詞の場合は、「抽象」概念以下となります。
したがって、「食べる」の概念ツリーは以下のようになります。

単語-抽象-行為・動作・状況等-身体の動作-顔の動き-口の動作-飲食:食べる

 

さて、話は「文」に戻ります。

花子はラーメンを食べる。

この文を概念で書き直してみます。すると、

「知的生命体」は「料理」を「食べる」

となります。
これが、登録される「文パターン」となります。
そして、概念の部分に、その概念に属する単語をランダムに設定すれば、文が生成されます。
「知的生命体」の一例が、「花子」であり、「料理」の一例が「ラーメン」となるわけです。

概念以下の単語をランダムに設定する
ここが今回のポイントです。
指定された概念に属する単語を設定すれば、「おかしくない文」となる。
このルールが、一種の常識となるわけです。

 

今回のプログラムについて、もう少し解説します。
動詞「食べる」は、「行為・動作・状況等」概念の下位概念となります。
「行為・動作・状況等」概念を使った文パターンとして、

「暦・季節・日時」に、「動く生き物」が、「場所」で、「行為・動作・状況等」(する)。

というものがあります。
平たく言えば、「いつ、どこで、誰が、何をする」という文パターンです。
この文パターンと、「食べる」の文パターンを合成すると、

「暦・季節・日時」に、「知的生命体」が、「場所」で、「料理」を、「食べる」

となります。
さらに、これらをすべて出力するのでなく、何を出力するかランダムに選びます。
すると、たとえば、

「暦・季節・日時」に、「知的生命体」が、「料理」を、「食べる」

となり、その上で、概念に単語を設定していきます。
そうすると、たとえば、

クリスマスに、総理大臣が、ざるそばを食べる。

といった文が生成されます。
念のため言っておきますが、今回は、面白い文を生成しようとしているわけではないです。
逆に、面白くとも何ともない、当たり前の文を生成するのが目的です。
じつは、それが結構難しいのですが。

それでは、さっそく、文を生成してみましょう。
以下の「文生成」ボタンを押してみてください。

文が生成されるとともに、その下には、使われた文パターンと、単語の概念ツリーが表示されます。
なお、単語は複数の概念に属することができますので、2行、または3行の概念ツリーが表示されることがあります。
概念ツリーは右に行くほど上位概念となっていて、一番右は、必ず「単語」となります。
単語の右に表示される数字は単語のIDです。ここではあまり気にする必要はありません。
不自然な文も生成されると思いますが、今後、少しずつ改良していく予定です。
では、ゆっくりお楽しみください。

このエントリーをはてなブックマークに追加
 

“意味のある「文」を生成してみよう 動詞と概念ツリー” への8件のフィードバック

  1. 大和 より:

    「AI vs …」読後、いろいろ調べていて、こちらにたどり着きました。
    RSTやその結果を基に行われた埼玉県の小学校での取り組みなどについて知見が広まったことは良いとして、前半のAIに関する説明やRSTの結果を踏まえての問題提起に引っかかるものを感じていた次第です。
    「AI vs …」への批評記事は私にとって正鵠を射る内容でした。
    で、前後の記事も大変興味深く、たのしく、一気読みしてしまいました。
    (ヘレンケラーの記事は、特に!)

    無知を晒すことになり恥ずかしくもありますが、質問を一つ。
    このプログラムに対する今後の改良とは、実装されている認知パターンを増やすこと、もしくは最適化ということになるのでしょうか?
    (あまりにも的外れなことを聞いているようでしたら、お手数ですがコメントごと削除してください)

    • 田方 篤志 田方 篤志 より:

      コメントありがとうございます。
      ヘレンケラーの記事が気に入ってくれたとのこと、かなり嬉しいです。
      個人的にずっと気になっていたことを記事にしたのですが、あまり反応がないので、普通の人には、そんなに驚く話でもないのかと思っていましたが、ちゃんと伝わる人もいて安心しました。

      質問の、今後のプログラムの改良ですが、いろんなことを考えています。
      認知パターンを増やすことはもちろんですが、認知パターンを実装するまでが大変で、まずは、認知パターンを実装することが目標です。

      今、実装しようとしているのが、動詞、助動詞の活用の実装です。
      たとえば動詞「食べる」の場合、今は「食べる」しか出ませんが、「食べた」や「食べたかった」「食べたかっただろう」といった動詞、助動詞を自由に活用してランダムに出力できるようにしようとしています。
      (かなりてこずっていますが・・・)

      その次は、今はランダムに選んでいる単語を、has-a関係を使って、もう少し意味の繋がりのある文を生成しようと思っています。
      たとえば、「学校」は「校長室」を持っていて、「校長室」は「校長先生」を持っていて、・・・というhas-aの関係から
      「学校に行くと、校長室で校長先生が、ざるそばを食べながら辞書を教頭先生に投げつけようとしていた。」
      といった文を生成できます。
      このぐらいになると、ちょっと面白くなってきますね。

      その次は、「場面」や「出来事」といったもので文を管理していきます。
      その後、接続詞を使って文をつなげていきます。
      複数の文を扱えるようになると、ようやく認知パターンが出てきて、簡単な物語を自動生成できるようになると思います。
      まだまだ道は長いですが、楽しみにしていてください。

  2. hoge より:

    「鈴木が消印を、鉛筆で書く」
    意味不明ではありませんが、消印を鉛筆で書くのは変です。
    概念ツリー以外に、何か別の考え方が必要に思いますが、全くノーアイデアです。

    • 田方 篤志 田方 篤志 より:

      コメントありがとうございます。
      おっしゃるとおり、概念ツリーをつかっただけでは、まだまだ、意味不明な文が多く生成されてしまいます。
      今後は、Has-aツリーを使うなどして、少しずつ改良を重ねて、意味のある文章を作成していこうと思っています。
      少しずつ、システムを改良してブログで公開していきますので、ブログの更新を見守っていただければと思います。

  3. 通りすがりの兎 より:

    なんか楽しい。「点取り占い」とか「自由律俳句」彷彿として、自分から面白味?みたいのを探ってる。ひと昔あった「ボケテ」だったかな、みたいなもので「描いて」って感じで文から絵を描いてもらってそれを、「いいね」かなんかでフィードバックしたら、AIから人間がスキムしてそのスキムしたもの人間が評価して、AIにフィードバックしたら面白そうだなぁと。

    「AIに代替されない人」というようなAIに人間が脅かされるみたいな、
    ネガティブな表現より、
    楽しくないことはAIがやってくれて、
    楽しいことを人がやるみたいなポジティブなものが増えてくれると嬉しいです。
    いくらAIが役立つものをやってくれても結局は道具で、
    楽しいことは人がやるみたいな楽観的でいいと思うのです。
    でもなんかこれだとAIが奴隷のようで「Detoroit」がちらつきますが、
    AIができないのは楽しい仕事で、AIが仕事に楽しいとは抱かなくて、
    なんだか冗長になってまとまらなくなってきたので終わりにします。
    AIが楽しいを獲得したらどうなるんでしょうかね。

    • 田方 篤志 田方 篤志 より:

      コメントありがとうございます。
      このプログラムは、まだまだ未熟で、今は、意味不明な文が生成されますが、少しずつ改良していくつもりです。
      目指すのは、自動で面白い文を生成するプログラムです。
      AIが「笑い」を理解して、自分で笑える文を作り出していくものです。
      便利なAIは、他の人に任せて、ぼくは、人の相手をしてくれる面白いAIを目指しています。

  4. 通りすがりの兎 より:

    自動で面白い文ができるプログラム楽しみです。
    「まだまだ未熟で、今は、意味不明な文」そんなに未熟でもないですよ、現にここに少し面白がってる人がいます!
    この意味不明な文に「ツッコミ」がはいれば、ちゃんと面白い文になって、そうやってちょっと遊んでました。
    例えば
    AI「クリスマスが、始まる」(ちゃんとプログラムで、出たワードです)
    ツッコミ「まだ夏なのに!気が早い!」
    ツッコミは意味や状況理解と、状況の中に照応対応とかいろいろあってやっぱり難しそうですね。

    面白いAI楽しみにしています。

    • 田方 篤志 田方 篤志 より:

      お返事、ありがとうございます。
      そうなんですよ!
      今がいつとか、季節と行事の関係といった知識まで持たせれば、そういうツッコミもできるようになるんです。
      そのためには、まずは、時間といった概念を理解させないといけません。
      そういった基本的な概念まで持たせれば、後は、単語を登録していくだけなのですが。
      今は、地道な作業の段階です・・・。

コメントを残す