Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

自由文思考プログラミング環境における手続的機能の実装

141 views

Published on

自然言語等の自由な語彙・文型を用いて誰もが推論規則を書きやすくしたシステムを開発している。これにIF文、WHILE文、代入文、比較文、四則演算、文字列処理等を導入することにより、プログラミング的論理的思考と一般の論理的思考の両方に対応したプログラミング環境を、小中高校の教育現場や思考の補助の目的で提供したい。

Published in: Education
  • Login to see the comments

  • Be the first to like this

自由文思考プログラミング環境における手続的機能の実装

  1. 1. 自由文思考プログラミング環境 における 手続的機能の実装 2020.1.11 ナレルシステム株式会社 中村圭介 安藤建剛 情報処理学会第61回プログラミング・シンポジウム
  2. 2. 本日の内容 • もともとの機能の動機・特徴・紹介デモ • 手続的機能実装の背景 • 制御文実装の目的 • 問題点 • 解決方針と結果デモ • 手法詳細 • 考察 • まとめと今後の課題 2
  3. 3. 背景:自由文による推論系開発の動機 • 誰もが、ふだんの自由な言葉で、気軽に論理プログラミングを • 任意の自然言語文に変数を埋め込んで簡単な述語論理のできる Prolog風の処理系を作った 規則 $Xは$Yボレ :- $Xは生きもん ; $Xは$Yのそばおる ; 事実 太郎は生きもん 事実 太郎は花子のそばおる 推論 太郎は花子ボレ 3 記号・形式言語・ 標準語以外も可 ホーン節(結論は左辺の1つ)
  4. 4. 特徴(自然言語の曖昧さを幅優先で) $Xと$Yは兄弟 ・・・条件1 太郎と次郎と三郎は兄弟 ($X,$Y)={ (太郎,次郎と三郎), (太郎と次郎,三郎) } 4 幅の優先管理
  5. 5. 特徴(自然言語の曖昧さを幅優先で) $Xは人間 ・・・条件2 太郎は人間 次郎は人間 三郎は人間 ($X)={(太郎),(次郎),(三郎)} 5
  6. 6. 特徴(自然言語の曖昧さを幅優先で) $Xと$Yは兄弟 ・・・条件1 ($X,$Y)={ (太郎,次郎と三郎), (太郎と次郎,三郎) } $Xは人間 ・・・条件2 ($X)={ (太郎),(次郎),(三郎) } 6 ✕ ✕ ✕ ($X,$Y)= {(太郎,次郎と三郎)} 結果
  7. 7. 紹介デモ①推移律(A=CかつC=BならA=B) 7 $Aは$B :- $Aは$C ; $Cは$B ;
  8. 8. 紹介デモ②動的引用(実行直前に取込み) 8 「///@<URL>」で <URL>内容をインライン展開
  9. 9. 紹介デモ③再帰的な解合成 9 $Xから$Yと$Zで$Dに行ける ← $Xから$Yで$Cに行ける かつ $Cから$Zで$Dに行ける
  10. 10. 紹介デモ④言語を問わない解合成/英語 10 $Xから$Aと$Bで$Zに行ける ← $Xから$Aで$Yに行ける かつ $Yから$Bで$Dに行ける
  11. 11. 紹介デモ⑤独自価値観の定義と運用 11 大事さの順序
  12. 12. 紹介デモ⑥科学的・道徳的な否定 12 !〇〇〇 [ :-] →証明の成立を 監視して否定
  13. 13. 既存機能のまとめと制御文開発の背景 〇推論規則内は幅優先探索 ⇒ バックトラックによる再マッチング回避 〇自然言語ネット知識の動的引用(事前コンパイル無) ⇒ 更新力 〇価値観と程度の運用 ⇒ 実用力 〇オントロジのない自由な文から再帰的に解を合成 ⇒ 創造力 〇証明の失敗による否定と科学/道徳による否定の両立 ⇒ 常識力 〇音声対話、異なる作者が物語をつなげたAVG、等 ⇒ 生きがい補助力 ⇒ 実用(現場)的な思考力の教育や補助に資する.しかし・・ ⇔ IF文やWHILE文が扱えないため(演算,代入,比較は以前から実装済) ①プログラム言語としての汎用性(アルゴリズム表現力・計算効率)が弱点 ②小中高プログラミング教材としても注目されにくい? 13
  14. 14. 目的:自由文の推論規則に制御文を導入 ◆自由文・・・マッチの再列挙コスト回避のため幅優先の解候補管理 ◆手続・・・文字/数値演算、比較、代入、順次、条件分岐、繰返し ⇒ 条件分岐や繰返しが「深さ優先処理系」より困難! ◆解候補組($X,$Y)の集合{ (1,a), (5,love) , …}は・・・ ①既定義の変数を参照する成立条件が追加されると? ②未定義の変数を参照する成立条件が追加されると? ③否定形の条件では? ④一部の解候補のみに新しい変数が定義される場合は? ⑤条件分岐の両側や繰返しの途中で全解候補が消滅する場合は? ⑥IF文やWHILE文にそもそも入らない解候補は? 14
  15. 15. 分析:既定義の変数を参照する成立条件 15 単調減少
  16. 16. 分析:未定義の変数を参照する成立条件 16 単調増加
  17. 17. 分析:否定形の条件 17 単調減少
  18. 18. 場合① 一部解候補のみに新しい変数を定義 18 DC (Don’t care) 導入
  19. 19. 場合② 条件分岐の両側で全解候補が消滅 19 then節 8番 9番 条件分岐 else節 5番 #IF <条件> ・・・→FALSE (6,9) #ELSE ・・・→FALSE (1,2) (3,6) #FI ⇒ 文脈をFALSEで終了
  20. 20. 場合③ 繰り返しの途中で全解候補が消滅 20 可能な $B が b(8) で 8 しかない (0,2) (2,6) (5,9)のいずれもb=8でない ⇒ 文脈をFALSEで終了 4番
  21. 21. 場合④ IF/WHに全然入らない解候補 21 IFやWHILEブロックが そもそもなかったかのように 処理される
  22. 22. 制御ブロックネストを表現するスタック 1 2 3 4 Func($X,$Y) :- a($X,$Y); {#IF $X>1} ; {$X=$X-1} ; {#WH $Y>5} ; 5 6 7 {$Y=$Y/2} ; {#HW} ; {#FI} ; 22 4 WH 2 IF 成立条件番号 (左から) IF/EL/WH (の識別フラグ)
  23. 23. 解候補のネストブロック層での処理要フラグ ※幅優先の解候補管理 23 $X $Y 処理の要/不要 1 a ーTF 5 love ーTT ・・・ ・・・ ・・・
  24. 24. 考察 〇標準的Prolog 等の「深さ優先探索」ではこれらをしなくても ⇒ 一つ一つの解候補ごとに自然と判断することになる 〇動的引用機能等により事前コンパイルが難しい処理系では 前述した不規則なパターンマッチングの再実行が,必要 ⇒ 本処理系の幅優先探索が有利な場合も多いと考える. 24
  25. 25. まとめ 自然言語等を含むパターン対の不規則なパターンマッチングと, バックトラックによる冗長な単一化コストを回避するため 解の幅優先探索を採用する論理プログラミング処理系において, IF 文,WHILE 文(表記はWH) 及びその入れ子の制御文を導入して 手続的な処理を容易化するため方針について示し, 実装デモを行った. 25
  26. 26. 今後の課題 1) 深さ優先探索を行う処理系との演算速度比較実験 2)条件分岐における条件式の自由度の拡大 3)elseif 文 4)for 文 5)四則演算のoperator 優先順位の定義(括弧を省略可能化) 6)float 型(現状は整数と文字列) 7)多次元配列変数又は連想配列 8)printf のような書式つき表示(又は返信) 等 26
  27. 27. デモ① WINDOWS端末 27 第61回プロシンの ・シンポジウム会場にて ※WINDOWS従来バージョンは hhttps://github.com/keisukebecome/humanote_for_public
  28. 28. デモ② Web端末用チャットボットUI https://coyell.net/h/ ⇒「ゲストログイン」から ※IF/WHILE等の制御文は未対応 28
  29. 29. 1.小学生でも自由な言葉で 本格的な論理プログラミング 自然言語等による(連立)言葉方程式を使ったPrologライクな思考プログラミング言語 アイスクリームは冷たい 冷たいは涼しくなる $Aは$B :- $Aは$C ; $Cは$B ; ⇒?アイスクリームは$X 例題1 1_アイスクリーム.jpl
  30. 30. 2.標準的なPrologとの違い Prologの標準的な仕様のサブセットを以下の観点で独自に拡張 A.自由な文型・語彙で事実や規則を記述 B.()や,のない無境界ユニフィケーション C.変数の束縛(探索)は基本的に幅優先 D.ネット等から最新知識の動的引用可能 E.強いNOT、各種OR、価値観定義等可 F.主プログラムを動的に切替え文脈管理
  31. 31. 3.最新知識の動的な引用 PCやLAN,インターネット上のテキスト(ルールも含んでよい)を動的にインライン化 ///@1_アイスクリーム.jpl 好きなものはアイスクリーム 私が食べているものは$A :- 好きなものは$X ; $Xは$A ; ⇒?私が$X 例題2 2_私が.jpl
  32. 32. 4.再帰的探索による解合成 記号デリミタやリスト構造を使わず文字列をマージして再帰的探索(移動手段系列の合成) 金沢から車で能登に行ける 大阪からJR北陸線で金沢に行ける 大阪から新幹線で盛岡に行ける 盛岡から徒歩でぎゅうタン屋に行ける 豊中から阪急宝塚線で大阪に行ける 能登から船でへぐら島に行ける $Xから$Yと$Zで$Dに行ける :- $Xから$Yで$Cに行ける ; $Cから$Zで$D に行ける ; ⇒ ?豊中から$X 例題3 3_豊中から.jpl
  33. 33. 5.価値観の定義と比較 程度を順位で示す構文と順位を確認する構文を追加して、価値観に沿ったアイディア合成も <%一般的に大事 家族の結婚式 親友の結婚式 赤ちゃんの誕生日 ペットの誕生日 >%一般的に大事 $Xは$Yより一般的に大事 :> %一般的に大事 ; $X>$Y ; $Xがあるので旅行を楽しむ :- $Xは親友の結婚式より一般的に大事 ; ⇒ ?$Xので旅行を楽しむ 例題4 4_申請アイディア.jpl
  34. 34. 6.「べきでない」の強い否定 Prologの場合は証明できなかったことを示すNOT⇒証明の成立を監視して否定も可能 !$Xに$Yを食べさせて儲ける :- $Xは家畜 ; $Yは毒 ; $Xを使った$Yの廃棄物処理方法 :- $Xに$Yを食べさせて儲ける ; $Xに$Yを食べさせて儲ける :- $Xは$Yを食べる ; ヤギは家畜 ヒ素のついた紙は毒 ヤギは菜種油のついた紙を食べる ヤギはヒ素のついた紙を食べる ⇒ ?$X儲ける 例題5 5_処理アイディア.jpl

×