搞了兩個星期, 終於寫到一點了XDD
在這篇討論串中我大概不會多說實作上的困難要事和解釋程式碼的了~
因為要說的話還真的沒完沒了(汗)
先放下載點:
http://ited.yingwa.edu.hk/~ywc-031301/ssp/AI_chat_dl.nar
(內附完成度0.000%的對話系統喔)(被毆)
----------------------------------------------------------
我編寫的這個系統是依照utoto的理論(?)為藍本的, 就是"輸入事物的必有特徵"這基礎上
這個測試版本提供 "特徵輸入" 和 "根據特徵進行聯想" 這兩部分
暫時沒有修改特徵這部分, 原因不想說(死)
話說為什麼我會先實作"必有特徵"部分呢?
因為在研究當中就發現那是無比尋常的難纏......我花了四五天處理理論上的問題囧
首先程式的架構是
儲存已輸入文字的陣列+記錄已輸入文字的屬性的陣列+各種事物相關東西的陣列(具有編號, 編號對照字詞於文字陣列的位置)
當輸入一個屬於事物A的特徵時, 事物A的陣列會儲存這個特徵
前兩個陣列會儲存特徵所用的字詞和特徵的性質(事物/描述)
為什麼要區別特徵的性質呢? 因為一個事物的特徵除了形容之外也可以是事物~ 例如"玻璃杯"的特徵是"玻璃"
每個輸入的東西可以大致上分為"事物"和"描述"性質, 這種區分是很重要的
----------------------------------------------------------
其實utoto的理論(?)忽略了一個很重要的東西:必有特徵上的承繼
例如, "玻璃杯"的必有特徵是"玻璃", "玻璃"的必有特徵是"容易破碎"
於是"玻璃杯"必定會承繼了"容易破碎"這特徵~
這種概念是: 如果[事物A]的特徵是[事物B], 那麼[事物A]會承繼[事物B]的所有[必有特徵]
這是一種很理想化的概念(?) 因為我暫時無視不相容的特徵XD" 還是一步一步完成會比較好~(被轟)
所以暫時不要提出"防碎玻璃杯"之類的東西~~~~
另一個概念是: 如果[字詞A]是描述性質, [字詞A]將不能有任何特徵
這個不難想像吧, 好像我們永遠不會說"紅彤彤的是鮮艷的"之類的怪東西(在此不考慮中文特有的賓主語缺失)
好啦, 以上完全是理論上的東西, 問題是實作上究竟要如何寫出來呢?!
究竟要如何讓偽春菜知道哪些是承繼了的特徵呢?! 在這個方向上, 我想出了兩種寫法
寫法1:在輸入[事物]的[必有特徵]時, 屬於該[事物]的東西(事物)將同時寫入那些[必有特徵]
寫法2:在進行聯想時, 才處理特徵的承繼
我只能說各有好壞處哪~
寫法1的好處是聯想的時候會很直接~因為所有[事物]的特徵都寫在屬於它的陣列中, 壞處當然是佔用的空間會比較大
寫法2的好壞處剛好跟寫法1的完全相反
另一個問題是實際上通常不會聯想事物的必有特徵, 更多的時候是根據必有特徵來聯想事物...
所以如果只記錄事物的特徵的話, 當尋找擁有特定特徵的事物時, 一定要比較所有已輸入的事物
於是乎進行聯想所需的時間進一步提升
解決方法大概是同時記錄擁有某[特徵]的事物, 形成某種雙向的記錄~
聯想所需的時間就會因此大幅減少了~ 因為不再需要比較所有已輸入的事物
當然這種做法的壞處是儲存所需的空間會兩倍化 囧
在這個測試版本中, "直接版"是寫法2+沒有雙向記錄, 佔用空間最小, 但處理聯想所需的時間最大
"複雜版"是寫法1+有雙向記錄, 佔用空間最大, 但處理聯想所需的時間最小
當然實際上是有四種組合, 不過不會花時間寫的了(爆) 除此之外還有等價字詞,對話系統應用等等問題
很累人呀~ 有空才繼續解釋吧~~~
PS: 考試快完結了~~~~~~~~~~~~~~~~~~~