弱いAI(人工知能)at INFORMATICS
弱いAI(人工知能) - 暇つぶし2ch168:80
10/02/06 13:55:33 0iOuvhnG0
別に僕オリジナルなことはまだ殆ど言ってないし、元より損は無いよ。
この程度の開示ですごいものが出てくるならむしろ利益だw
まぁそういうのは期待出来なくとも、こっちが行き詰まって質問した時に
違う視点を持ってアドバイスくれそうな人がたまに見てくれればそれでいい。

けど忠告はありがとう。

169:47
10/02/07 05:14:47 Pm0tEh6Z0
いろいろ刺激を受けて、イメージがまとまってきた。
こんな感じか?


>オレがガンダムだ
オレがガンダムだ

>私はコンピュータです
オレがガンダムだ
私はコンピュータです

>オレがジャイアンだ
オレが(ガンダム or ジャイアン)だ
私はコンピュータです

>私はガンダムです
オレが(ガンダム or ジャイアン)だ
私は(ガンダム or コンピュータ)です
(オレが or 私は)ガンダム(だ or です)
 (オレが or 私は)(ガンダム or コンピュータ)(だ or です)
  (オレが or 私は)((ガンダム or ジャイアン) or コンピュータ)(だ or です)
   (オレが or 私は)(ガンダム or ジャイアン or コンピュータ)(だ or です)

>オレはジャイアンだ
(オレ(が or は) or 私は)((ガンダム or ジャイアン) or コンピュータ)(だ or です)
 ((オレ or 私)(が or は))(ガンダム or ジャイアン or コンピュータ)(だ or です)

>太郎はラーメンが好きです
((オレ or 私 or 太郎)(が or は))(ガンダム or ジャイアン or コンピュータ or ラーメンが好き)(だ or です)
A=((オレ or 私 or 太郎 or ラーメン)(が or は))
 A(ガンダム or ジャイアン or コンピュータ or A(好き))(だ or です)

っていう処理をすれば、それらしくなる・・・・のか?
なんか80氏の言ってること微妙に違う気もするけど
まぁ、これで実装してみればわかるか?

170:80
10/02/07 11:12:59 oTXoISZW0
イメージつーか外部仕様の話じゃないか…(汗
後、微妙どころか全然違うから。>169で言うなら
一個目はそもそも過去の入力例が無いので出力なし、
二個目も一個目と共通点が全くないので出力なしだ。
三個目は「オレがガンダムだ」と出力していれば良し。

171:47
10/02/08 02:48:50 q9h1InZP0
>>170
すまん、こっちで勝手にすごい勘違いをかましていた。
>>150の仕様をやってみようと、実際に組んでみました。

そのソース
URLリンク(www.ff.iij4u.or.jp)
使用する関数
URLリンク(www.ff.iij4u.or.jp)
使い方は
>ruby MatchOfText.rb 辞書ファイル 入力文字列

出来上がった仕様としては、1文字以上の共通部分を見つけて
共通部分があるなら、過去に入力した文字列から候補を出力する。
字面のみでの判定ってことだから、こういうこと?

ここで作ったものは、単純な全数検索だけど
これを抽象化することで、全数以下(?)にする方法があるってことだよな。
抽象化とかポインタとか、いっぱいヒントがでてるよな

例えば、共通部分が出た文字列毎に、同じ配列に入れる
そいつをインデックスにして、その後ろの文字が共通かを探っていく

ABCDという入力にたいしてAというインデックスからABというインデックスを探す
あれば、つぎにABの中にABCというインデックスがないかを探す
同時にBでも同じことを行う、CでもDでもおこなう
最終的に、ABCDでバラバラに行った結果の中で一番長く共通部分があるものを候補としてあげる

これだと、並列であれば、シリアルでの全数検索より早くなる場合があるな。
しかも、おそらく、文字列が長ければ長いほど、
そして、過去の入力が多ければ多いほど、その傾向が強くなるだろう。
しかも、とりこぼし無しだ。

こっちも、作ってみるかな
でも、並列での実装は難しいから、とりあえずシリアルにしたもので・・・

172:47
10/02/09 21:08:43 3G7udbwX0
URLリンク(www.ff.iij4u.or.jp)

文を貯めこみながら、マッチングするクラスできた~
データ構造としては以下の構造の配列を持っている
とりあえず、「インデックス型配列」とでも、名前を付ける。

["インデックス", [ [ インデックス型配列1 ], [ インデックス型配列2 ], ... ], [ "該当文1", "該当文2", .... ] ]

インデックスは、そのまま共通する文字列がはいっている。
インデックス+αの文字列をインデックスにもつインデックス型配列を、配列として格納している
該当文には、インデックスに該当する元となった文字列が配列として格納されている

この構造により、長い文章の部分一致を素早く見つけることができる。
格納するのには、検索より多くの時間がかかる・・・・
そして、大量のメモリを消費する

そして、作ったあと実験してて、気がついた。
共通部分を分類してるだけだと、初期の蓄積文章が少ないことのルールは、信用できない。
ある程度、文章量がたまってくると、信頼性も上がってくるが
全てに通じるルールには、なりそうにないな・・・

同じものをより分けることが基本路線でいいはずなんだけど
ルール化したものを、なんらかの方法で、使えるものと、使えないものに分けないとだめだな
より多くの文章との比較で格付けとかできるか?
いまは、最も大きな共通部分のみに反応してるけど、他の使い方も出来そうな気もするな

173:名無しさん@お腹いっぱい。
10/02/10 20:43:14 xAplKh+90
で?

174:80
10/02/11 08:57:33 IhonOEnw0
>172ではいくつか欠点が。しかも割と致命的。
①ABCDとAbDで「Aが似ているABCD」「Dが似ているABCD」と重複して判定される。
②ABCDと比較してABCd、abCDのどちらがより似ているか?を判定できない
③類似例を得るのに、毎回インデックス型配列の個数分文字列比較しなきゃならない。

ある入力からできる抽象物は、例えばそれがABCDだった場合
・Aが任意になったもの(-BC) ex)aBC
・Bが任意になったもの(A-C) ex)AbC
・Cが任意になったもの(AB-) ex)ABc
の4通りがまず考えられる。更に抽象化されたものとして
・ABが任意になったもの(--C) ex)abC
・ACが任意になったもの(-B-) ex)aBc
・BCが任意になったもの(A--) ex)Abc
・ABCが任意になったもの(---) ex)abc
となる。入力がn個の部分に分けられるとすると抽象物はn^2-1個考えられるため、インデックス型配列が元の例より少なくなるとは限らない。
また、①に関しても「真ん中だけが違う」というルールをそれ自身として捉え切れていないことになる。

175:80
10/02/11 09:31:02 IhonOEnw0
おっと、ex)てのは使うところが変だな…

176:チンパンジーのAIちゃん
10/02/13 08:30:47 teqvgbsFP
われ思うゆえにわれあい。

177:チンパンジーのAIちゃん
10/02/13 08:33:15 teqvgbsFP
われ思うゆえにわれAI。

178:名無しさん@お腹いっぱい。
10/02/13 20:00:32 qsQpT60f0
我思うが故に宇宙あり。=科学

だってビックバン宇宙の外は観測する対象がないから存在しないって
物理定義だよ。

179:80
10/02/14 01:41:16 pScfshmW0
あ、>174ミスってた
> ある入力からできる抽象物は、例えばそれがABCDだった場合
ABCだった場合、でした。
> の4通りがまず考えられる。更に抽象化されたものとして 
3通りでした。

47氏が戦意喪失してそうな気がするので、多分最後のヒント。
・具体例と抽象物は1つクラスを作って、どちらもそのインスタンスとして表現した方がいい(と言うか配列じゃ表現しきれないと思う)
・具体例から抽象物へは再帰を使ったら十数行で生成できる
ABC→(-BC,A-C,-BC)
-BC→(--C,-B-)
A-C→(--C,A--)
-BC→(--C,-B-)
(但しA-Cからの--Cや-BCからの--C,-B-は既にあるので生成の必要はない)

180:名無しさん@お腹いっぱい。
10/02/14 09:09:20 G8WD/72f0
なるほど、それで終わりか。

181:47
10/02/15 01:37:14 Lb9MQcal0
>>179
なんか、うまくまとまらん

とりあえずの方向として
ABC
?BC
?B?
A?C
A?
?C
?

みたいなかんじでワイルドカードを挟んだ形式のものをつくる関数を作った
これと、別な文字列比較して、確定部分が最大のものが、最も似た形とする
ような感じつくってみるかなぁ

問題点としては、過去の入力の全数検査になるんだよなぁ
これも、方向間違ってるのかな?

ってわけで、生存報告でした。

182:名無しさん@お腹いっぱい。
10/02/15 04:01:41 sk4yDH3G0
>過去の入力の全数検査になるんだよなぁ
ありえねぇwwwww
まるで素人が行うアルゴリズムじゃないか。

183:名無しさん@お腹いっぱい。
10/02/16 05:39:31 1UzxVyfA0
全数て1000件MAXぐらいだから問題ないんじゃね?

184:47
10/02/16 17:48:11 l2GkCGRL0
>>183
1000件程度じゃ、あまり思わしくない結果になりそう
使える単語とか限定すれば、それなりになるかもしれんが
オレの目指すところと大きく離れる

少し形になってきたので、インデックス型配列と組み合わせることにする
これで全件検索よりはまともに動くはず。
入力文字列の文字数に応じて指数関数的に増える似た形にも
ある程度対応可能になるだろう


185:名無しさん@お腹いっぱい。
10/03/30 13:32:12 rvXujR5w0
270だけどもう一つ質問。

単語の相互関係を使って、コンピュータに言葉の意味を分からせようとする研究を良く見るけど
これってかなり良い結果は出せたとしても、絶対どこかで失敗すると思うんだ。

例えば痛みの意味をコンピュータに教えるにはコンピュータに痛みを実感させないとだめだと思う。
それを実現するには強い人工知能がいるんだろうけど。
でも相互関係だけじゃどこかでつまづくと思う。

言語処理を研究している人達はこのへんどう考えてるの?

186:名無しさん@お腹いっぱい。
10/03/30 13:33:17 rvXujR5w0
>>185
すいません最初の一行は無視してください。

187:名無しさん@お腹いっぱい。
10/03/30 13:48:26 TLIv7XLP0
>>185
それは記号着地問題として昔から有名な問題つか、疑惑。

だから、最近では肉体を持ったロボットの研究が盛んに行われている。

記号処理だけでは本当の知能が生まれようが無いのは恐らく皆、認識している。

188:名無しさん@お腹いっぱい。
10/04/25 13:17:51 C8blnb3+0
10 DIM WORD$(4,8),QA$(8)
20 FOR C=1 TO 4
30 FOR K=1 TO 8
40 READ WORD$(C,K)
50 NEXT K
60 NEXT C
70 DATA きゅうきゅうしゃ,くるま,おおきめ,しろい,はやい,しかくい,わからない,かんじゃさんをたすける
80 DATA ぞう,けもの,おおきい,はいいろ,のろい,やまみたいだ,くさい,はながながい
90 DATA おかあさん,おかあさん,おおきい,しろい,はやい,うつくしい,いいにおい,やわらかい
100 DATA メルヘンひじきごはん,ばか,ちいさい,ばっちい,のろい,いまいちだ,はながもげる,へんてこりんだ
110 INPUT PROMPT "なにがしりたいの?":A$
120 IF A$(1:8)=WORD$(1,1) THEN GOTO 130 ELSE GOTO 200
130 FOR C=1 TO 8
140 LET QA$(C)=WORD$(1,C)
150 NEXT C
200 IF A$(1:2)=WORD$(2,1) THEN GOTO 210 ELSE GOTO 300
210 FOR K=1 TO 8
220 LET QA$(K)=WORD$(2,K)
230 NEXT K
300 IF A$(1:5)=WORD$(3,1) THEN GOTO 310 ELSE GOTO 400
310 FOR C=1 TO 8
320 LET QA$(C)=WORD$(3,C)
330 NEXT C
400 IF A$(1:10)=WORD$(4,1) THEN GOTO 410 ELSE GOTO 500
410 FOR K=1 TO 8
420 LET QA$(K)=WORD$(4,K)
430 NEXT K
500 IF MID$(A$,CC,4)="ってなに" THEN PRINT QA$(1);"は";QA$(2);"だよ" ELSE GOTO 505
502 GOTO 1500
505 IF MID$(A$,CC,7)="どんなおおきさ" THEN PRINT QA$(1);"は";QA$(3);"よ" ELSE GOTO 600
510 GOTO 1500
600 IF MID$(A$,CC,5)="どんないろ" THEN PRINT QA$(1);"は";QA$(4);"よ" ELSE GOTO 700
610 GOTO 1500
700 IF MID$(A$,CC,6)="どんなはやさ" THEN PRINT QA$(1);"は";QA$(5);"よ" ELSE GOTO 800
710 GOTO 1500
800 IF MID$(A$,CC,6)="どんなかたち" THEN PRINT QA$(1);"は";QA$(6);"よ" ELSE GOTO 900
810 GOTO 1500
900 IF MID$(A$,CC,6)="どんなにおい" THEN PRINT QA$(1);"は";QA$(7);"よ" ELSE GOTO 1000
910 GOTO 1500
1000 IF MID$(A$,CC,8)="どんなとくちょう" THEN PRINT QA$(1);"は";QA$(8);"よ" ELSE GOTO 1100
1010 GOTO 1500
1100 LET CC=CC+1
1200 IF CC>=LEN(A$) THEN GOTO 1300 ELSE GOTO 1400
1300 FOR C=1 TO 1000
1301 FOR K=1 TO 64
1302 NEXT K
1303 NEXT C
1310 PRINT "ねえほかのこと"
1350 GOTO 110
1400 GOTO 500
1500 INPUT PROMPT "もっときいてくれる?":B$
1600 IF B$="うん" OR B$="いいよ" THEN GOTO 1760
1700 IF B$="ううん" OR B$="やめる" THEN GOTO 1800
1750 PRINT "じゃあつづけちゃうよ"
1760 LET CC=1
1770 GOTO 110
1800 END


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch