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

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

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

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

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

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

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

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

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

昼休みが緑色を食べる

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

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

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

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

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

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

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

となります。

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

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

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

となります。

 

 

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

  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楽しみにしています。

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

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

  5. 阿久津東真 より:

    はじめまして

    facebookで友人とやり取りをしていて、ROBO Mindさんのことが紹介されていたので、来てみて、ん旧開発ブログを読み、大変感心したので、コメントさせて頂きました。私も自然文を処理するデータベースを研究開発していたことも在り、進めておられる内容が本道を往くものだと実感します。

    なにかお手伝いできそうなことがあれば幸いです。
    「規則文章作成装置」でastamuseで検索して頂ければおわかりいただけると思います。

    ご研究・開発が成果を結ばれることを祈念しています。

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

      コメント、ありがとうございます。

      進めておられる内容が本道を往くものだと実感します。

      こういっていただけるのが、一番うれしいです。
      自然言語処理をきちんとやっておられる方からみれば、邪道といわれても仕方がない方法ですし。
      阿久津さんも、本道で自然言語処理に取り組もうとしておられるようですね。
      この道は、いばらの道で、僕も、まだ道半ばですが、質問・相談などありましたら、気軽に問い合わせいただければと思います。
      知っていることは全てお答えしますので。
      お互い、この道で結果を残したいですね。

  6. 梶が谷 より:

    はじめまして。
    辞書レベルで人間の語彙を「概念ツリー」の元組み立てるというのは、膨大な時間がかかりそうですが良い試みだと感じました。

    質問なのですが、例えば「この車はガソリンを食う」のような比喩的な表現や慣習的・間接的な表現などについてはどのような対応が可能そうでしょうか?

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

      梶が谷様
      ご質問ありがとうございます。

      比喩の問題は、難しいですが、次に解決すべき課題だと考えています。
      一番簡単な解決方法は、「ガソリンを食う」といった表現を慣用句として登録しておくといった方法ですね。
      ただ、この方法では、新たな比喩表現が出てきた場合に対応できません。

      そこで、次に考えられるのは、概念にいくつかの意味を登録しておく方法です。
      たとえば、「食べる」には「消費する」という第二の意味を登録するとか。

      または、「車」は「乗り物」概念の下位に存在し、「乗り物」には「馬」などの動物も存在するので、「馬が餌を食べる」と「車がガソリンを消費する」とを対比させて、「食べる」は「消費する」の意味で使っていると推測することも可能だと思います。

  7. M. Andoh より:

    なんか面白そうなことを言っている人がいるなーと思って読んでみましたが、残念ながら、「概念ツリー」のような考え方は20年前くらいから世界中で研究されている「オントロジー」のあたりですでに行われております。で、やっぱりうまく行っていません。一連の意味と情報量の関係や、自身の客観視について論じておられるのは面白いのですが、数学的モデルとして(つまりコンピュータで実行可能な定義として)明示されない限り説得力はないです。
    面白いことをやっておられるようなので、あえてコメントさせて頂きました。

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

      M. Andoh様

      コメント、ありがとうございます。

      「概念ツリー」のような考え方は20年前くらいから世界中で研究されている「オントロジー」のあたりですでに行われております。で、やっぱりうまく行っていません。一連の意味と情報量の関係や、自身の客観視について論じておられるのは面白いのですが、数学的モデルとして(つまりコンピュータで実行可能な定義として)明示されない限り説得力はないです。

      こういったコメントは、そのうち来るだろうなぁと思っていましたが、やっぱり来ましたね。
      おそらく、「概念ツリー」を使っている点を指して、今までと同じと言っているのだと思いますが、ブログを最初から読んでもらえれば、ロボマインド・プロジェクトは、今までの「オントロジー」の研究と全く違うことがわかると思います。
      ロボマインド・プロジェクトが目指しているのは、人間と自然な会話ができるAIです。
      つまり、質問応答のような答えが限定される会話でなく、雑談のように、答えが決まっていない、普通の日常会話ができるAIを目指しています。
      ロボマインド・プロジェクトの意味理解の基本的な考えは、認知パターン(感情)を抽出することで、話し手の言いたいことを抽出することにあります。
      詳しくは、「認知パターン」をお読みください。
      このような手法で意味理解を行うことは、今まで世界中のどこでも行われてなかったことです。

      それとも、これだけではコンピュータで実行可能な定義にならないということが言いたいのでしょうか?
      率直に言って、「説得力はない」との言い回しは、説明を回避するための逃げにしか聞こえないのですが。
      もしそうでないなら、どういった場合にコンピュータで実行可能でないのか、具体的に例を挙げて説明していただけないでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です