อิงตามโค้ด repo TC-Bot และ Paper End-to-End Task-Completion Neural Dialogue Systems repo นี้เป็น TC-Bot เวอร์ชันที่เรียบง่าย แต่ทำงานในระดับความแม่นยำใกล้เคียงกัน แม้ว่าจะเทียบเคียงกันโดยตรงไม่ได้ก็ตาม
ข้อมูลนี้แสดงวิธีฝึกอบรมตัวแทน DQN แบบง่ายด้วยการเรียนรู้แบบเสริมกำลังเชิงลึกเป็นแชทบอตที่มุ่งเน้นเป้าหมายโดยใช้โปรแกรมจำลองผู้ใช้แบบง่าย โค้ดนี้เป็นเวอร์ชันที่เรียบง่ายของ TC-Bot โดย MiuLab โดยมีข้อแตกต่างที่สำคัญคือโค้ดนี้ไม่รวมส่วนประกอบ NLG หรือ NLU แต่เพียงฝึกผู้จัดการบทสนทนาเท่านั้น ส่วนประกอบ NL ไม่จำเป็นต้องเข้าใจว่าแชทบอต GO ได้รับการฝึกฝนด้วย DRL อย่างไร ดังนั้นจึงไม่มีการนำไปใช้งาน
นี่คือไดอะแกรมจากรายงานสำหรับ TC-Bot และคล้ายกับโฟลว์ของบทสนทนาที่ใช้ในโปรเจ็กต์นี้ นอกเหนือจากส่วนประกอบ LU และ NLG:
นอกเหนือจากการลบ NL แล้ว ยังมีการเปลี่ยนแปลงเงื่อนไขความสำเร็จ เครื่องมือเพิ่มประสิทธิภาพเอเจนต์ DQN และการเปลี่ยนแปลงเล็กน้อยอื่นๆ อีกเล็กน้อย ดังนั้นจึงไม่ควรเปรียบเทียบความแม่นยำระหว่าง TC-Bot กับ Repo นี้โดยตรง
ฐานข้อมูลเป็นฐานข้อมูลตั๋วหนัง ซึ่งเป็นฐานข้อมูลเดียวกับที่ใช้ใน TC-Bot สามารถดูข้อมูลทั้งเวอร์ชันดองและข้อความได้ในไดเร็กทอรีข้อมูล
คุณสามารถดูชุดบทช่วยสอน 5 ส่วนที่อธิบายและอ่านโค้ดนี้โดยละเอียดได้ในสื่อที่นี่!
คุณสามารถฝึกอบรมตัวแทนตั้งแต่เริ่มต้นด้วย python train.py
ใน Constants.json คุณสามารถเปลี่ยนไฮเปอร์พารามิเตอร์ รวมถึง "save_weights_file_path" และ "load_weights_file_path" (ทั้งสองเส้นทางสัมพัทธ์) เพื่อบันทึกและโหลดน้ำหนักตามลำดับ ตัวอย่างเช่น หากต้องการใช้ตุ้มน้ำหนักที่ฝึกไว้ล่วงหน้าในโฟลเดอร์ Weights ให้ตั้งค่า "load_weights_file_path" เป็น "weights/model.h5" น้ำหนักสำหรับทั้งโมเดลเป้าหมาย (tar) และพฤติกรรม (beh) keras จะถูกบันทึกทุกครั้งที่อัตราความสำเร็จในปัจจุบันอยู่ที่จุดสูงสุดใหม่
คุณยังสามารถทดสอบเอเจนต์ด้วย python test.py
ได้ แต่อย่าลืมโหลดน้ำหนักโดยการตั้งค่า "load_weights_file_path" ใน Constants.json ให้เป็นเส้นทางสัมพันธ์ที่มีทั้งพฤติกรรมและน้ำหนักเป้าหมาย
ค่าคงที่ทั้งหมดค่อนข้างอธิบายได้ด้วยตนเอง นอกเหนือจาก "vanilla" ภายใต้ตัวแทนซึ่งหมายถึง DQN (จริง) หรือ Double DQN (เท็จ) ค่าเริ่มต้นคือ vanilla DQN
หมายเหตุ: หากคุณได้รับข้อผิดพลาดในการคลายข้อผิดพลาดในรถไฟหรือการทดสอบ ให้รัน python pickle_converter.py
และนั่นควรแก้ไข
คุณสามารถทดสอบเอเจนต์ได้โดยการป้อนการกระทำของคุณเองในฐานะผู้ใช้ (แทนที่จะใช้ซิมผู้ใช้) โดยการตั้งค่า "usersim" ภายใต้การรันใน Constants.json เป็นเท็จ คุณป้อนการกระทำและตัวบ่งชี้ความสำเร็จทุกขั้นตอนของตอน/การสนทนาในคอนโซล รูปแบบของอินพุตการดำเนินการคือ: ช่องเจตนา/แจ้ง/ช่องคำขอ
ตัวอย่างอินพุตการกระทำ:
นอกจากนี้ คอนโซลจะถามตัวบ่งชี้ว่าตัวแทนทำสำเร็จหรือไม่ (นอกเหนือจากหลังจากอินพุตการดำเนินการเริ่มต้นของตอน) อินพุตที่อนุญาตคือ -1 สำหรับการสูญเสีย, 0 สำหรับยังไม่มีผลลัพธ์, 1 สำหรับความสำเร็จ
ใช้ไฮเปอร์พารามิเตอร์จาก Constants.json
ตารางตอน (ทุกๆ 2,000 จาก 40,000) ตามอัตราความสำเร็จสูงสุดของช่วงเวลา/ความถี่ของรถไฟ (ทุกๆ 100 ตอน) จนถึงตอนนั้น: