วันศุกร์ที่ 22 ธันวาคม พ.ศ. 2560

เรื่อยเปื่อยกับ argumentation

โพสนี้อยู่ในหมวด เรียนรู้ logic programming + argumentation นะคะ
ต้องขอโทษด้วยนะคะที่ไม่ได้อัพบล็อกเสียนาน ช่วงที่ผ่านมามีอะไรต้องจัดการเยอะมาก เกือบจะอีกหนึ่งปีผ่านไปแล้ว แต่ละอย่างที่ตั้งใจไว้ว่าจะทำเราก็ยังไม่ได้ทำ ตอนนี้ก็หันมาจัดการเวลาตัวเองเสียใหม่ จะได้เริ่มต้นทำโครงการอะไรดีๆ อย่างที่วางแผนไว้เสียที

เอาล่ะ มาเข้าเรื่องกันเลยดีกว่า วันนี้จะขอพร่ำเพ้อเรื่อยเปื่อยตามประสาคนที่ยังไม่รู้ว่าจะเรียบเรียงสิ่งที่อยู่ในหัวยังไงดีนะคะ ฮ่าๆๆ คนอ่านคงแบบว่า อยากจะตื้บคนเขียนเสียจริง ถ้ายังไม่รู้จะเขียนอะไร แกจะมาเขียนทำมายยยย(ขอใช้ภาษาวิบัติเพื่อความสมจริงนะคะ อิๆ)

เรื่องที่อยากจะพร่ำเพ้อวันนี้คือ อะไรคือ argumentation หรือ แล้วมันมีบทบาทยังไงกับงานด้าน AI ล่ะ
.
.
.
.
นั่นสินะ เราเคยเล่าไว้ในโพสก่อนๆว่า มีงานวิจัยด้าน practical reasoning หรือ พูดง่ายๆว่า จะทำการจำลองว่ามนุษย์มีกระบวนการคิดยังไง แล้วไอ้งานวิจัยด้านนี้ มีแนวทางหนึ่งที่เรากำลังศึกษา ก็ชื่อว่า argumentation นั่นเอง ....แล้วเราก็ไม่เคยได้อธิบายแนวคิดที่มาที่ไปของมันเสียที

งั้นวันนี้เรามาพร่ำเพ้อถึงมันกันสักหน่อยดีไหมคะ

ก่อนอื่นเลย เรามานึกถึงงานด้าน AI ก่อนว่ามันคือระบบที่เรากำลังพยายามจะทำให้มันมีความสามารถเลียนแบบมนุษย์ได้ใช่ไหมคะ งานด้านนึงของ AI ก็คือเราอยากจะเลียนแบบวิธีคิดของมนุษย์ ทำยังไงล่ะจะให้คอมพิวเตอร์สามารถคิดตัดสินใจแบบมนุษย์ได้

คำถามต่อมาคือ แล้วมนุษย์มีการคิดแบบไหนล่ะ มีการตัดสินใจแบบไหน ก็มีงานวิจัยมากมายพยายามทำการศึกษาวิธีการคิดของมนุษย์ ลองค้นหาคำว่า human reasoning หรือ practical reasoning อะไรทำนองนี้ก็จะพบว่ามีการศึกษากันอย่างมากมาย
ก็ยังไม่ได้ข้อสรุปที่แน่นอนล้านเปอร์เซ็นต์หรอกนะคะที่จะตอบได้แน่ๆเลยว่า เนี่ยมนุษย์มีพฤติกรรมการคิดการตัดสินใจแบบนี้แบบนั้น

แต่ทว่าก็มีการศึกษาที่เป็นที่ยอมรับกันอย่างกว้างขวางว่า มนุษย์เนี่ยมีรูปแบบการคิดแบบที่เป็นเหตุเป็นผลอยู่นะ(ถือซะว่าเราละตอนที่มนุษย์โมโห ตัดสินใจอะไรมั่วซั่วตามแต่อารมณ์ออกไปละกันนะคะ)

ก่อนอื่นของพูดถึงลักษณะของการทำ reasoning ก่อน ว่าจะมีอยู่ 2 ลักษณะใหญ่ๆ คือ monotonic reasoning กับ non- monotonic reasoning
เรามาลองทำความเข้าใจจากตัวอย่างกันดีกว่านะคะ

ยกตัวอย่างให้เห็นภาพ เช่น เราบอกว่าถ้าฝนตก แล้วเสื้อผ้าจะเปียก
แล้วเรามีข้อเท็จจริงอยู่ว่า ฝนตก แน่นอนว่า เราจะสรุปได้ว่า เสื้อผ้าเปียก
เมื่อเพิ่มข้อเท็จจริงใหม่เข้าไปว่า ฝนตก + ฉันเดินเล่น ก็ยังคงสรุปได้ว่า เสื้อผ้าเปียกถูกไหมคะ
อย่างนี้คือ monotonic reasoning

เพราะว่า monotonic reasoning นิยามไว้ว่า ถ้าเซต P  สามารถให้ข้อสรุป Q ได้แล้ว แล้วเอา เซต PU{a} ก็ต้องยังคงข้อสรุป Q ได้เหมือนเดิม พูดง่ายๆก็คือ ต่อให้ข้อมูลเพิ่มขึ้นแค่ไหน เราก็ยังควรจะสรุปข้อสรุปเดิมได้

แต่ถ้า เราเพิ่มข้อเท็จจริงไปว่า ฝนตก + ฉันเดินเล่น + ฉันเดินกางร่ม อย่างนี้แล้ว เราจะไม่สามารถสรุปว่า เสื้อผ้าเปียกได้ ก็จะเห็นว่าจริงๆแล้ว practical reasoning เป็น non-monotonic reasoning ค่ะ เพราะว่าในโลกของความจริงแล้วบางครั้งพอข้อเท็จจริงเพิ่มขึ้น ข้อสรุปเดิมก็เปลี่ยนเป็นข้อสรุปใหม่ใช่ไหมคะ


ทีนี้เรามาดู แนวทางต่างๆ ที่ใช้ในการทำ reasoning ก็มีแนวทางมีคนนำเสนอแนวคิดมากมายเลยค่ะ แรกเริ่มเดิมทีก็มี classical logic ใช่ไหมคะ ซึ่งมันมีลักษณะแค่อย่างเดียวคือ monotonic reasoning  ดังนั้นเราจะใช้แค่ classical logic มาทำการจำลองการทำ practical reasoning/ human reasoning ก็ไม่ได้


ดังนั้นเราก็ต้องมองหาแนวทางอื่นๆ ที่มีลักษณะของ non-monotonic reasoning ร่วมด้วย ซึ่งก็มีคนนำเสนอแนวทางไว้เยอะแยะมากมายเลยค่ะ แต่ที่เราจะคุยกันวันนี้คือ แนวทางที่ชื่อว่า argumentation

Argumentation  ก็ความหมายตามนั้นเลยค่ะ คือการโต้เถียงกันใช่ไหมคะ เดิมทีแล้วคำๆนี้เนี่ย ถูกพูดถึงในงานด้าน philosophy หรือพวกแนวคิดปรัชญาทั้งหลาย แต่ว่าก็ยังไม่มีใครเอามาพูดถึงหรือหยิบมาใช้ในงานด้านระบบปัญญาประดิษฐ์(หรือ AI) อย่างจริงจังเสียที

ก็มีการนำเสนอวิธีการเอา แนวคิด argumentation มาออกแบบว่าเราจะทำการ implement ในระบบคอมพิวเตอร์ได้อย่างไรค่ะ โดยที่ก็เกริ่นถึงไอเดียของ argumentation ก่อน และโชว์ให้ดูว่า logic programming  เป็นเครื่องมือนึง ที่สามารถใช้ implement แนวคิด argumentation ได้ค่ะ

ทีนี้มาดูกันว่า แล้วไอเดียหลักที่อยู่บนแนวคิดของargumentation คืออะไร

ก็ลองมองไปที่ human reasoning เลยค่ะว่า ถ้าเราจะโมเดลการคิดของคนแบบตัวอย่างข้างต้น ที่จะเห็นว่า มันเป็น  non-monotonic reasoning เนี่ย จะทำยังไง
ถ้าเราใช้ classical logic ก็ไม่ตอบโจทย์ใช่ไหมคะ เพราะ classical logic มีลักษณะเป็น  monotonic

(จากนี้จะอธิบายไอเดียของ abstract argumentation  นะคะ คือเป็นคอนเซปที่กว้างที่สุดแล้ว)
ทีนี้ argumentation ก็ตอบโจทย์ตรงที่ว่า โอเค เราไม่ต้องสนใจนะว่า คนเราควรจะคิดให้คำตอบยังไง ไม่เหมือนหลักใน classical logic ที่ว่า ถ้ามีข้อเท็จจริงนี้แล้ว ควรจะคิดแบบนี้  ควรจะได้ข้อสรุปนี้ พูดง่ายๆคือ ไม่มี intended model ที่แน่นอนเพียงอันเดียว (intended model เป็นความอุดมคติตามหลักการเหตุผลว่า ควรจะต้องคิดแบบนี้ ตอบแบบนี้ )

งั้นแล้ว ข้อสรุปที่ควรจะได้ล่ะจะเอามาจากไหน ถ้าเราไม่มี intended model ที่แน่นอน

argumentation ก็บอกว่า ก็ดูจากการยอมรับ arguments ที่คนถกเถียงกันไงล่ะ ถ้าเกิดว่าใครเถียงชนะ ไม่ว่าทุกคนในวงจะเชื่อหรือไม่ก็ตาม(เราจะไม่พูดถึง belief) แต่เราจะต้องยอมรับข้อสรุปของคนที่เถียงชนะ(ใช่ไหมคะ)

ดังนั้น framework ของ argumentation ก็มีแค่ argument ที่แต่ละคนยกขึ้นมา กับ attack relation ก็คือดูว่า  argument อันไหน attack อันไหนบ้าง

สุดท้ายแล้วเราก็จะได้ว่า  argument ใดบ้างที่ยอมรับได้ ก็กลายเป็นข้อสรุปไป

ยกตัวอย่างเช่น

นาย ก บอกว่า A1:  "นกบินได้ และ เพนกวินเป็นนก ดังนั้น เพนกวินบินได้"
นาย ข บอกว่า A2:  "แต่ว่า เพนกวินบินไม่ได้"

เราจะเห็นว่า argument A1 ของนาย ก แพ้ให้กับ A2 ของนาย ข (คือนาย ก ไม่มีอะไรจะเถียงต่ออีกแล้ว ก็แพ้ไปใช่ไหมคะ) ดังนั้น การถกเถียงกันครั้งนี้ argumentation framework เรามีแค่ 2 arguments และ attack relationship ก็คือ A2 attacks A1 ก็จะได้ว่า A2 เป็น arguments ที่ยอมรับได้
เมื่อเรายอมรับ A2 ก็ถือว่าข้อสรุปคือ เพนกวินบินไม่ได้

จะเห็นว่าพอโมเดลด้วยไอเดียนี้แล้ว ทำให้การทำ reasoning จำลองการคิดแบบมีเหตุผลดูง่ายขึ้นไหมคะ

ซึ่งเปเปอร์ที่อธิบาย abstract argumentation นี้จะนำเสนอ semantic อยู่สองแบบหลัก เพื่อจำลองบุคคลสองประเภทค่ะ คือ skeptical กับ credulous ซึ่งหมายถึง กรณีที่เถียงกันไปแล้วหาข้อสรุปไม่ได้ ถ้าเป็นคนที่ skeptical ก็จะเลือกไม่เชื่อฝั่งไหนเลยใช่ไหมคะ แต่ถ้าเป็น credulous แล้วก็จะเลือกเชื่อฝั่งใดฝั่งหนึ่งไว้ก่อนค่ะ

นอกจากนี้ในเปเปอร์ ก็โชว์ให้เห็นว่า semantic ของ  argumentation นั้นตรงกันกับ semantic หลายๆแบบใน  approach อื่นๆที่เสนอแนวทางการพัฒนา non-monotonic reasoning ด้วย ไม่ว่าจะเป็น well-founded semantic, stable model, etc.

ที่สำคัญ ก็โชว์ให้เห็นว่าตรงกับ semantic ของ logic programming ซึ่งเป็นการบอกว่า argumentation ไม่ใช่แค่ไอเดียต่อไปแล้วนะ ถ้าอยากจะ implement ณ ตอนนี้เราก็มีเครื่องมือที่สามารถจะ implement มันได้แล้ว ซึ่งก็คือ logic programming นั่นเองค่ะ

และเนื่องจากว่าอาจจะมีคนสงสัยว่า แล้วจะรู้ได้ไงว่าแนวคิดนี้มันถูกหรือผิด ก็มีการยกตัวอย่างเอาปัญหาที่โด่งดังสองเรื่องมาทำการโมเดลในแบบของ argumentation เป็นการทำให้เห็นว่า semantic ของ argumentation ได้ข้อสรุปตามที่ยอมรับกันทั่วไปค่ะ

ทั้งหมดนั้นเราอธิบายไว้แบบคร่าวๆมาก เพื่อให้เห็นภาพรวมที่มาที่ไปก่อน ยังมีรายละเอียดของ semantic ที่ยังไม่ได้พูดถึง ถ้าหากใครสนใจแนะนำให้อ่านเปเปอร์นี้ เพิ่มเติม แล้วมาคุยกันได้นะคะ :)