知識表示

知識表示（粵拼：zi3sik1biu2si6；英文：knowledge representation，KR）係認知科學同人工智能領域當中一個受關注嘅課題，指一個認知系統－無論係人類定係人工智能－內部點樣表示有關「周圍世界點運作」嘅資訊，以及點樣用呢啲資訊對事物作出判斷同預測。
舉個簡單例子說明，想像家陣有一個噉樣嘅神經網絡（neural network）：個網絡有兩層，每層有若干粒神經細胞，第一層表示「見到嗰樣物件嘅特徵」，而第二層表示「將件物件分做乜嘢類」，第二層每粒神經細胞會同第一層嘅某啲細胞有連繫，喺某啲特定嘅第一層細胞啟動嗰時會跟住啟動，即係話，攞第i{\displaystyle i}粒第二層細胞：
假想第一層細胞每粒代表咗一個特徵，而第二層細胞每粒代表咗一個類別。當個網絡望到外界有一件具有「有毛皮」、「有鬚」同「四隻腳」等特徵嘅物件嗰時，呢啲特徵相應嘅第一層細胞就會啟動，而第二層細胞當中同呢柞細胞有連繫嗰粒－例如代表「貓」嗰粒第二層細胞－就會跟住啟動。噉即係話，呢個網絡曉一接收到某啲特徵，就將件物件歸類做某個相應嘅類別－「貓有毛皮、有鬚、四隻腳」係一個知識，而呢個知識就係用一個神經網絡嘅方式「表示」咗出嚟。
對知識表示嘅研究有相當嘅跨學科性：呢個領域會參考神經科學等領域嘅研究，尤其係有關「人腦點做知識表示」嘅研究（已知人腦曉做知識表示，問題係「到底人腦係點做到嘅呢？」），然後人工智能領域嘅研究者就會按呢啲知識，嘗試製作出能夠好似人噉做知識表示嘅電腦系統。
神經細胞（neuron）可以帶有同傳遞資訊：一個腦由極大量嘅神經細胞組成，例如一個正常大人嘅腦據估計有成 860 億粒神經細胞咁多；一粒神經細胞喺接收到某啲特定嘅刺激嗰陣，會用微弱電流等嘅型式傳訊號，例如視網膜上面嗰一大柞感光細胞喺受光刺激嗰時，會射訊號上個腦嘅視覺皮層（visual cortex）嗰度，而每種感光細胞都淨係會對某啲特定刺激有反應，所以每當個腦收到呢啲訊號嗰陣，就可以判斷對眼望到乜－「射緊訊號嘅得感應藍色光嘅感光細胞，對眼梗係望緊啲藍色嘅嘢喇」。神經編碼（neural coding）係神經科學一個子領域，專門研究解讀神經細胞帶同傳嘅資訊。
想像有個由若干粒神經細胞組成嘅神經網絡（neural network）。輸入層（input layer）嗰啲細胞會對某啲外界刺激（例如係光或者聲）有啟動反應，隱藏層（hidden layer）收到輸入層細胞嘅訊號嗰時會啟動，而最後嗰浸輸出層（output layer）收到隱藏層細胞嘅訊號嗰時又會啟動。即係話是但搵粒細胞，佢嘅啟動程度C{\displaystyle C}可以用以下條式計：
而家假想輸出層有 5 粒細胞，每粒都有一個門檻值（threshold），如果嗰粒細胞個C{\displaystyle C}超越門檻值，佢嘅數值會變成 1，否則佢嘅數值會變成 0（睇埋數碼訊號），所以喺是但一個時間點，個神經網絡嘅輸出可以用 5 個 1 同 0 嚟表達－「11000」、「10010」、「10101」等分別代表唔同款嘅輸出。如果柞Wj{\displaystyle W_{j}}數值恆定不變，噉輸入同輸出之間會成某啲特定嘅關係，例如每次輸入層數值等如某個數，輸出都會等如「11000」。呢段關係反應咗個神經網絡對輸入同輸出嘅知識，假想家陣輸入層有 4 粒細胞，而個網絡柞Wj{\displaystyle W_{j}}經已調整好，令輸入同輸出成以下關係：
想像輸入係兩個用二進制表達嘅數，而輸出係一個用二進制表達嘅數，將上述數字變成十進制嘅話：
呢個輸入同輸出關係表示，個神經網絡曉計（兩個輸入都喺 2 以內嘅）乘數－係一個將有關乘法嘅知識「表示」咗出嚟嘅網絡。同一道理，假想有個神經網絡，有數以百億計嘅細胞（好似係人腦），佢會識處理好複雜嘅輸入，俾好複雜嘅輸出，而且仲能夠運算好複雜嘅輸入輸出關係。睇埋人工神經網絡。
聚類分析（cluster analysis）係一種常用嚟教智能系統學識做適當知識表示嘅方法。假想而家有若干個個案，每個個案都係兩個變數x{\displaystyle x}同y{\displaystyle y}上有個數值，再用以下個演算法處理吓柞個案嘅數據：
如果個數據庫當中有 8 個個案，上述段演算法會俾類似以下噉嘅知識表示：
假如柞個案真係有得清楚噉分做兩個聚類嘅話，噉呢個演算法嘅運算過程之中，應該臨尾會出咗兩個c3a{\displaystyle c_{3a}}同c3b{\displaystyle c_{3b}}，跟住c3a{\displaystyle c_{3a}}同c3b{\displaystyle c_{3b}}喺最後嗰步變成一體。聚類分析能夠攞一柞輸入，再俾「將柞個案分做若干類」嘅輸出－所以上述個演算法喺人工智能上可以用嚟模擬人類「睇過一柞物體之後，自動噉喺心目中將柞物體分類」嘅心智過程－由數據嗰度產生「見過嘅物件可以分做邊幾類」嘅知識表示，並且喺下次再撞到個案嗰時，用手上呢個知識表示判斷「呢件物件係乜」。
主成份分析（principal component analysis，PCA）係另一種常用嚟整知識表示嘅分析法。想像而家又係有柞個案，佢哋每個喺兩個變數上都有其數值（睇附圖），跟住可以畫兩條線（附圖嗰兩個箭咀），兩條線分別都可以用一條包含x{\displaystyle x}同y{\displaystyle y}嘅算式表達，當中由圖當中可以清楚睇到，長箭咀嗰條線成功噉捕捉更多嘅變異數（variance）－亦即係話長箭咀嗰條線所代表嗰個「成份」（component）比較能夠用嚟分辨啲個案，所以比較「重要」。
舉個例說明，假想有柞新數據，啲個案係一隻隻動物，而每個個案一係就係隻老鼠，一係就係隻大笨象，x{\displaystyle x}係隻動物嘅大細，而y{\displaystyle y}係隻動物嘅色水；假設柞數據做咗標準化，用同一樣嘅單位表達x{\displaystyle x}同y{\displaystyle y}，喺呢柞數據入面，沿「色水」嘅變異數好細（個箭咀會好短），因為老鼠同大笨象都係灰灰啡啡噉色嘅動物，但沿「大細」嘅變異數就會大得好交關（個箭咀會好長），因為老鼠同大笨象喺體型上差好遠－用 PCA 嘅話，會得出「用x{\displaystyle x}作為重心線做分辨有用啲」嘅結果－ PCA 幫到手由一柞數據嗰度，產生出「邊個成份喺用嚟分辨個案上比較有用」嘅資訊，而個智能系統可以用呢個資訊做一個知識表示，攞個知識嚟對將來撞到嘅個案作出判斷。
喺最簡單嗰種情況下，一個做主成份分析嘅演算法大致上係噉：
語義網絡（semantic network）係知識表示常用嘅一種模型。一個基本嘅語義網絡有以下組成部份：個網絡有若干個節點（node），每個節點代表一個概念，而節點之間會有一啲連繫，兩個概念之間嘅連繫表達佢哋之間嘅關係；語義網絡可以用嚟模擬促發效應（priming effect）－喺是但一個時間點，每個節點都有個數代表佢嘅「啟動程度」（activation level），而一個節點啟動會令佢掕住嘅節點跟住啟動，同佢連繫愈強嘅節點就會掕住啟動得愈勁；而呢點似十足人嘅促發效應－人都係噉，一講起一樣嘢嗰陣傾向諗起啲同嗰樣嘢相關嘅嘢，例如實驗就噉做過，實驗者叫受試者喺聽到個「狼」字嗰陣有咁快得咁快撳個掣，而喺聽「狼」打前聽到（例如）個「狗」字嘅受試者對「狼」嘅反應會變快。
語義網絡可以用機械學習方法產生，例如一個人工智能程式接收咗一柞動物嘅影像，用聚類分析將柞影像分做若干個物種，程式內部每個物種俾個名佢，然後再按聚類分析嘅結果（例：「貓同老虎明顯係兩種動物，但兩者彼此之間嘅差距明顯細過佢哋同狼嘅差距，所以貓同老虎都屬貓科」）產生一個語義網絡（例：貓同老虎都各有一條線「屬於」掕去「貓科」嗰度）。
有認知科學家主張，人同第啲動物嘅心靈係按貝葉斯定理（Bayes' theorem）學習判斷世界嘅系統。假想有兩件事件，A{\displaystyle A}同B{\displaystyle B}，P(A){\displaystyle P(A)}係A{\displaystyle A}發生嘅機會率，P(B){\displaystyle P(B)}係B{\displaystyle B}發生嘅機會率，根據貝葉斯定理，P(A|B){\displaystyle P(A|B)}（已知B{\displaystyle B}發生咗，A{\displaystyle A}發生嘅機會率）可以用以下呢條式計：
舉個例說明，有一個地區，個地區嘅人當中有 0.1% 嘅都有一隻病（P(A)=0.001{\displaystyle P(A)=0.001}）；而家有個新測試（「測試出陽性反應」係B{\displaystyle B}），而打前嘅醫學研究顯示，如果個病人真係有嗰隻病，個測試有 90% 機會呈陽性反應（P(B|A)=0.9{\displaystyle P(B|A)=0.9}），但就算個病人冇嗰隻病（A′{\displaystyle A'}），個測試都有 9% 嘅機會呈陽性反應（P(B|A′)=0.09{\displaystyle P(B|A')=0.09}，P(B){\displaystyle P(B)}大約係 0.1）。家吓有個住喺呢個地區嘅人去做咗個測試，出咗陽性結果，用貝葉斯定理嚟計嘅話，佢真係有嗰種病嘅機會率（P(A|B){\displaystyle P(A|B)}）大約係 10% （個測試唔多靠得住）。
根據主張貝葉斯腦假說（Bayesian brain hypothesis）嘅認知科學家，一個心靈會透過自己過去嘅經驗，計算一大柞P(A|B){\displaystyle P(A|B)}嘅數值，以此表示自己對「世界係點運作」嘅認識，而呢個知識表示就係所謂嘅「對世界嘅內部模型」（internal model of the world）：想像一個心靈，佢內部會記住若干份經驗（有P(A){\displaystyle P(A)}同P(B){\displaystyle P(B)}呢啲資訊），而佢可以按過去嘅經驗計返P(A|B){\displaystyle P(A|B)}－例如係喺一個實驗裏面，研究者定時定候電隻動物，而隻動物冇能力迴避；隻動物記得 10 次俾人電嘅事件（P(A){\displaystyle P(A)}），而喺某幾次事件當中佢有嘗試避開個痛楚（B{\displaystyle B}），喺某幾次入面佢冇（B′{\displaystyle B'}），但次次都一樣遭俾人電；佢個腦計咗之後會發現，自己行動咗跟住受痛楚嘅機率（A|B{\displaystyle A|B}）同自己唔行動而受痛楚嘅機率（A|B′{\displaystyle A|B'}）相約，P(A|B)=P(A|B′){\displaystyle P(A|B)=P(A|B')}－即係一個「我作唔作出行動結果都係會受痛楚」嘅知識表示，令佢進入「發現自己好無助」嘅狀態。
... 等等。
本體工程（ontology engineering）係電腦科學嘅一個子領域，研究點建造本體（ontology）：定義上，一個本體係一柞概念嘅集合，會表明呢啲概念之間嘅啦掕，可以話係語義網絡嘅一種；本體嘅特徵係，佢啲概念要有明確講到出嚟嘅定義（相比之下，語義網絡可以用人工神經網絡等「計到正確答案、但講唔出口」嘅方法整）。例：一個用嚟表示打機相關知識嘅本體噉，會包含「電子遊戲」、「遊戲機」同「遊戲設計」等嘅概念嘅定義，跟住仲會有一柞連結，表明概念之間嘅啦掕，例如「遊戲機」會有條拎（「用嚟玩」）連去「電子遊戲」嗰度，而「遊戲設計」又會有條拎（「做嚟整」）連落「電子遊戲」嗰度－形成一個描述打機相關概念同呢啲概念之間嘅關係嘅本體（所以本體係知識表示嘅一種）。
本體工程對於製作人工智能嚟講相當有用，最幫到手教電腦做自動推理（automated reasoning）嘅工作－一個程式有咗一個本體，就會有能力答「貓屬於貓科，貓科屬於哺乳類，噉貓係咪屬於哺乳類？」等嘅問題，而答呢類問題嘅能力正正係智能嘅一個重要指標。
以下呢段係一段用網絡本體語言（Web Ontology Language；一款專用嚟整本體嘅程式語言）表達嘅一個本體，用嚟描述一啲有關意大利薄餅嘅知識：
舉個例子說明，呢段碼ObjectProperty嗰行會同個程式指明個本體入面某啲物件嘅特性，呢行指令講咗幾樣嘢：首先，「係某某嘅原料」（isIngredientOf）呢個關係係有遞移性嘅（Transitive）－即係教部電腦，如果 A 係 B 嘅原料而 B 係 C 嘅原料，噉佢可以推斷 A 係 C 嘅原料；呢行指令仲表明咗「係某某嘅原料」係「原料包含咗」（hasIngredient）嘅反轉（inverse）－所以運用呢個本體嘅人工智能程式可以做（例如）「夏威夷薄餅原料包含咗菠蘿，所以菠蘿係夏威夷薄餅嘅原料」嘅推理。
本體同相關技術有唔少應用價值，一個簡單嘅例子係攞嚟喺搜尋器嗰度俾建議：當一個用家搜尋某個關鍵字嗰陣，個搜尋器程式可以用一個事先學習（分析咗舊有嘅「啲人耖完呢篇文之後，傾向耖乜文」數據）形成嘅語義網絡，估計個用家跟住最有可能會想搜尋啲乜，然後將最有可能會想搜尋嘅嘢列做「建議」。