29このサイトについて本サイトは舞台に立てるロボットを目指して、私が取り組んでいるプロセスを、主として記憶のために書き連ねているものです。文章を終了させるパターンロボットに舞台で喋らせる時、構成した情報について、文章を短くしたい時、要約したい時が頻繁にあったが、ぶち切れのまま喋らせたりしていた。そのため、文章の終わり方については、とても気になる。これまでに示してきた、wikipediaのprolog化した宣言文での文章の終わり方のパターンを調べてみた。全体的な状況を見ると次のグラフのようになる。縦軸は、文章の頻度だ。(ただし、体言止めは、含んでいない:1割以上が体言止めという感じもあるが、文章の正規の終わり方ではないので除外した)一番多いのは、サ変2というパターンである。例としては次のようなものがある。実現(S:サ/C:抽象物)さ(V:する)れている→実現されている発注(S:サ/C:抽象物/D:ビジネス)した(V:する)→発注した成功(S:サ/C:抽象物)し(V:する)なかった→成功しなかったすなわち、サ変の名詞があって、それにするという動詞の活用形がきて、語尾がある(活用形が原型などの場合は、語尾はない)Vの右側は、動詞の原形である。jumanppが提供する。サ変名詞で終わりたい時は、文章的には簡単である。prolog二分木では、サ変名詞を確実に把握できるので、サ変名詞のあるところでは、自由に、自然に、文章を終われる。次に多いのは、動詞1という終わり方である。これは、動詞を最も単純に使って文章を終わりにさせる方法である。示して(V:示す)いる下して(V:下す)いるこなして(V:こなす)いる用い(V:用いる)られる考え(V:考える)られない言わ(V:言う)れる語ら(V:語る)れた描く(V:描く)いう(V:いう)ある(V:ある)など。jumanppは、動詞の原形を必ずくれるので、動詞が来れば、多様な形で文章を終わらせることができる。原型から、活用形を導き出す場合、原型の最後の1文字を変更するのが基本的な方法だが、「行う」が「行って」と「って」になるパターンがある。このルールが、私には複雑でよくわかっていない。データベースに動詞のパターンを登録しておくのが、一番簡単なように思える。次の「動詞2」というのは、終わりのフレーズに動詞が二つある場合だ。なくなっているなどのパターンである。いるなど、普通名詞とサ変名詞が連結しているパターンである。単純な、終句で終わるパターンは、7位と意外に少ない。これは、ほとんどの場合、ノードの値が終わりになっている場合だと思う。縦軸は、文末に現れる頻度である。みにくいが、圧倒的に「である」が多い。あとはカスみたいなものである。Wikipediaは「である」調なので、デスマス調の場合は「です」ということになる。「である」は、その前の言葉にあまり依存しないとても便利な終わりの句である。否定の時は、「ではない」、受け身の時は、「られる」とかにすればよい。10.14.6)にjuman++とknpをいれた。MacProでは、普通に使っていたので、問題なくインストールできるかと思った。昔のことでよく覚えていない。installでいれた。.exit(2)となる。およ!どうなってるの。これでよかったのかどうかはわからない。juman++だけでいいのかもしれない。おんなじことを繰り返さないようにメモしておく。没頭していたというよりも、どうするか苦悶していたので前回書いた時から三週間近く経過してしまった。苦闘の理由は、システムを発展性のあるものにすることだった。基礎的なところで納得できるものになったので、何か書いておくことにした。自然言語解釈のところとprologによるsocket相互通信のシステム構築に手間かけた。自然言語処理のところでは、大きなところは、質問文の解釈の基礎的なところをどのようにするか、設計上の問題に直面した。色々な知識はprolog二分木で表現されていて、その二分木がどのような構造になっているかを踏まえなければならない。二分木は、ノード値と二つのリーフ値の重層的連結になっている。ここに構文情報がはめ込まれてもいる。ノード値は助詞を中心に付随する修飾語から成り立っていて、動詞や名詞はそこには全く入ってこない。したがって、色々な意味で有限である。質問文かどうかは、このノード値を解析すればわかる。主語的なものは、格助詞の「は」などがノード値にあれば、その左のリーフか、ないしは、左側のツリーのいずれかのリーフに主語があるはず。ノード値からの距離が重要で、例えば、格助詞の場合は左側で一番近いところにある名詞が、その主要候補となるだろう。距離に、状況によって左の葉を優先するか、右の葉を優先するかの設定もする。この距離は、ノードやリーフの絶対アドレスから算出する。その絶対アドレスの全てを、それぞれリストにして、最初に一挙に取得してしまうという方法も取り入れた。これは別な形で二分木を分解してしまう方法でもある。すると、文章のほとんどがそのリスト軍の中に写像される。すると文章の意味取得が容易になる。質問に対して、このリストを使って返信が可能になる。通信については、javaを経由すればソケット通信は楽になるが、あくまで、prolog動詞て対話の通信ができるようにした。c++やjavaの時と同様に、ソケットとそのストリームを作成して、あとは自由に相互にやり取りをするというソケット通信の本来の形を実現するのに苦労した。ソケットを作って、一個の文章のやり取りをすることはすぐにできるが、ソケットを二つのシステムの対話の間じゅう維持するのが難しかったのだ。これから、自由な問いかけに、自らの知識(prolog二分木)に基づいて、自由に返答できるシステムにしていこう。形としては、あの巨大なwikipediaの知識を利用できる形にしてあるのだから。自然言語のprolog二分木の中をもっと自由に移動する方法がないかと考えてきたが、アドレスを入れることにした。二分木はルートを持っている。このルートが原点となる。linuxなどのディレクトリ構造のルートと同じである。二分木であるから、分岐は全てバイナリである。そこで、ルートから出発して、左の葉をたどる時には'l'(エル)を加え、右をたどる時には'r'を加えたprologリストを作成することによって、唯一のアドレスを与えることができる。仮想的な二分木を考える。))ルートの値は、aである。左右対称のツリーになっている。これに対し、アドレス[l,r,l]は、値gとなる。