หน้าเว็บ

14 กันยายน 2556

179 | คุยกันเรื่อง Ontology

(เผยแพร่ครั้งแรกใน http://www.gotoknow.org/posts/548199/ วันที่ 14 กันยายน 2556)

หลังจากห่างหายไปกว่า 5 ปี อจ.โอม ก็ชวนกลับมาเขียนกันอีกครั้ง ผมเลยมานั่งนึกว่าจะเขียนเรื่องอะไรดีที่พอจะมีประโยชน์กับตัวเอง+ผู้อ่านบ้าง นึกไปนึกมาก็เลยเลือกเอาเรื่องที่กำลังศึกษาอยู่ตอนนี้มาเล่าให้ฟังครับ นั่นก็คือเรื่องของ Ontology (ออนโทโลยี) นั่นเองครับ ซึ่งสิ่งที่จะเล่าต่อไปนี้เป็นสำนวนและการเรียบเรียงของผมเองเพื่อความเข้าใจง่ายๆ อาจไม่ถูกต้องตาม References เป๊ะๆ นะครับ ถือว่าอ่านเพลินๆ ละกัน :)
------------------
เกี่ยวกับ (About Ontology)
Ontology ในทางวงการคอมพิวเตอร์แล้ว มันก็คือ นิยามของอะไรสักอย่างที่เราสนใจซึ่งเป็นความจริงเสมอและไม่มีการเปลี่ยนแปลง เช่น ถ้าเราพูดถึงคน เราจะมองเห็นว่านิยามของคนเนี่ยมีอะไรเป็นส่วนประกอบที่เกี่ยวข้องบ้าง เช่น คนมีแขนสองข้าง, มีขาสองข้าง, มีตาสองดวง, มีเพศชายและหญิง, มีสีผิวขาว เหลือง หรือดำ, มีผมตรง หยิก หรือหยักศก, มีอายุ, มีความสัมพันธ์ในลักษณะของครอบครัว ฯลฯ อะไรต่างๆ เหล่านี้ที่เรานึกออก มันเป็นความจริงเสมอใช่ไหมครับ (ไม่มีคนในประเทศไหนหรือเชื้อชาติใดที่เกิดมามีแขนข้างเดียวทุกคน หรือเกิดมาโดยไม่มีครอบครัวกันทุกคนหรอกเนอะ) ความจริงตรงนี้แหละครับคือความรู้ (Knowledge) ที่เราเอามาออกแบบให้มันเกิดเป็นโครงสร้างที่คอมพิวเตอร์สามารถเรียนรู้และทำความเข้าใจได้ โดยประโยชน์หลักๆ ของ Ontology ก็คือ เอาไปใช้ในงานทางด้าน Semantics เช่น การสืบค้นในเว็บสื่อความหมาย เป็นต้น

การสร้างและออกแบบ (Ontology Development & Design)
โดยทั่วไปเรามักจะเห็นการออกแบบ Ontology อยู่ในรูปแบบของกราฟ เพราะว่ามันดูแล้วเข้าใจง่ายใช่ไหมครับ จริงๆ แล้ว Ontology มันมีรูปแบบเป็นลำดับชั้นที่แตกแขนงความสัมพันธ์ออกมาในลักษณะของ Class และ Subclass อย่างเช่นรูปตัวอย่างข้างล่าง

ตัวอย่าง Ontology
(Z. Yuanfeng and Z. Liang. Curriculum knowledge organization and representation based on ontology. Electrical and Control Engineering (ICECE), 2011 International Conference on, 16-18 Sept. 2011, pp.6465 - 6468)
ซึ่งเวลาเราสร้างหรือออกแบบ Ontology เนี่ย มันจะมี Tools หลายๆ ตัวที่เอามาออกแบบและสร้างได้อย่างง่ายดายในรูปแบบ GUI เช่น Tools ที่ผมชอบและใช้มาตลอดก็คือ Protégé หรืออีกตัวหนึ่งที่ NECTEC ชอบใช้ก็คือ Hozo ซึ่งเวลาเราออกแบบเสร็จแล้วมันจะสร้างไฟล์ออกมาในรูปแบบของ OWL ครับ (ซึ่งโครงสร้างภาษาเป็นแบบ XML) ตัวอย่างของ OWL ก็อย่างเช่น


การสืบค้น (Query)
พูดถึงการสืบค้น ในการสืบค้นข้อมูลจาก Ontology ซึ่งถ้าเราเปรียบเทียบกับฐานข้อมูล มันจะมีตารางเป็นโครงสร้าง และมีข้อมูลจัดเก็บในตารางใช่ไหมครับ สำหรับ Ontology เรามีโครงสร้างในรูปแบบ Class และมีข้อมูลที่เรียกกันว่า Instance (หรือบางแหล่งเรียกว่า Individual) ที่จัดเก็บโดยอ้างอิงกับโครงสร้าง Class เช่นกัน เช่น Class ชื่อ Father (คุณพ่อ) ก็จะมี Instances ประกอบด้วย นาย ก. นาย ข. ฯลฯ เป็นต้น
ถ้าระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (DBMS) ใช้ภาษา SQL ในการสร้างคำสั่งสืบค้นข้อมูลจากตาราง Ontology ก็มีภาษาสืบค้นเหมือนกันครับ นั่นคือ SPARQL (สปาร์เคิล) ซึ่งมีรูปแบบภาษาคล้ายๆ กับ SQL นี่แหละครับ รูปแบบของ SPARQL ก็อย่างเช่นตัวอย่างด้านล่าง

SELECT ?name ?age
WHERE
{
Person:hasName ?name;
Person:hasAge ?age;
}
ORDER BY ?name LIMIT 3

อธิบายคำสั่งข้างบนคร่าวๆ คือ ต้องการเลือกข้อมูลชื่อ และอายุของคนใดๆ จาก Ontology ชื่อ Person โดยเลือกเอาจาก Class ที่มี Object Properties คือ hasName (มีชื่อ) และ hasAge (มีอายุ) โดยที่ ?name และ ?age ก็เปรียบเสมือนตัวแปรที่เราสร้างมารองรับผลลัพธ์นั่นเอง โดยต้องการให้ผลลัพธ์เรียงลำดับตามชื่อ และเอาแค่ 3 Records เท่านั้น เห็นไหมครับว่าคล้ายกับภาษา SQL มากอยู่พอสมควรเลย

การอนุมาน (Inference)
ความน่าสนใจอีกอย่างของ Ontology ก็คือ เราสามารถใช้การอนุมาน (Inference) ผ่านกฏที่เราสร้างขึ้น เพื่อให้ Ontology ที่ออกแบบและสร้างไว้แล้ว สามารถเรียนรู้ความรู้ใหม่ๆ ได้เสมอผ่านกฏของเรา ภาษากฏที่ใช้กับ Ontology ชื่อว่า SWRL (ไม่รู้อ่านว่าอะไร 55555) โดยใช้ร่วมกับ Rule Engine เพื่อการอนุมานกฏ ซึ่งตัวที่นิยมใช้กันเยอะๆ ก็คือ JESS ครับ
ภาษา SWRL มีรูปแบบของภาษาดังตัวอย่างนี้ครับ

Person(?x) ^ hasFather(?x, ?y) ^ hasBrother(?y, ?z) -> hasUncle(?x, ?z)

อธิบายคำสั่งข้างบนก็คือ ?x เป็นคน (Class Person) ?x มีพ่อ (Object Property hasFather) คือ ?y และ ?y มีพี่ชาย (Object Property hasBrother) คือ ?z ดังนั้น ?x จะมี ?z เป็นลุงนั่นเอง (Object Property hasUncle)

การสร้างกฏและอนุมานกฏนี้มีประโยชน์มากครับ เพราะเราสามารถให้ความรู้ใหม่ๆ กับ Ontology ที่เราสร้างขึ้นได้เรื่อยๆ เช่น เราสร้าง Ontology เกี่ยวกับคน ซึ่งมีการกำหนดความสัมพันธ์ของคนในครอบครัวไว้บ้างแล้ว เช่น ความเป็นพ่อ, แม่, พี่น้อง, สามีภรรยา เราก็สามารถสร้างกฏเกี่ยวกับความเป็นลุง, ป้า, ปู่, ย่า, ตา, ยาย ฯลฯ ให้ Ontology สามารถอนุมานความสัมพันธ์เพิ่มเติมตามกฏได้
และหากในอนาคตเกิดเราต้องการความสัมพันธ์ของคนในรูปแบบ พี่เขย หรือพี่สะใภ้ เพิ่มเติมขึ้นมา เราไม่จำเป็นต้องไปแก้ไข Ontology หรือออกแบบใหม่ให้วุ่นวายครับ แค่เขียนกฏความเป็นพี่เขยและกฏของความเป็นพี่สะไภ้ขึ้นมา แล้วทำการอนุมานได้เลย แค่นี้ก็เรียบร้อย สะดวกดีไหมครับ :)
ดังนั้นถ้าเราออกแบบดีๆ และสร้างกฏที่ค่อนข้างครอบคลุมแล้ว Ontology เราสามารถเอาไปใช้ประโยชน์ได้หลากหลายและ (แทบจะ) ไม่ล้าสมัยแน่นอนครับ
------------------
ที่เล่ามาเหล่านี้ทั้งหมดก็คือเรื่องราวเกี่ยวกับ Ontology ที่ผมกำลังสนใจอยู่ตอนนี้ครับ หวังว่าคงจะมีประโยชน์บ้างสำหรับคนที่สนใจศึกษาหรือต้องการทำวิจัยเกี่ยวกับ Ontology หรือไม่ก็ถือว่าเอาความรู้มาแลกเปลี่ยนกันครับ ทั้งนี้หากผู้อ่านมีข้อเสนอหรือข้อชี้แนะใดๆ ผมยินดีรับฟังและแก้ไขด้วยความขอบคุณยิ่งครับ
ถ้ามีโอกาสคราวหน้าจะมาเล่าถึงงานวิจัยที่กำลังทำอยู่ตอนนี้ (Ontology Mapping) แล้วพบกันใหม่ครับ :)

ไม่มีความคิดเห็น: