หมายเหตุถึงผู้เยี่ยมชม:
python3 manage.py runserver
หากคุณไม่คุ้นเคยกับการใช้ขวดด้วยวิธีนี้ โปรดดูเอกสารสำหรับ Flask-Script ขออภัยในความไม่สะดวก!ณ วันที่ 9 พฤษภาคม 2560 แพ็คเกจหลักของโครงการมีดังนี้:
python3 manage.py runserver
จากมุมมองของผู้ใช้/นักพัฒนา โปรเจ็กต์นี้นำเสนออินเทอร์เฟซที่สะอาดยิ่งขึ้นสำหรับการซ่อมแซมโมเดลตามลำดับ ผลลัพธ์ในอุดมคติคือ Chatbot API ที่สามารถอ่าน Keras ได้ แต่มีความยืดหยุ่นในระดับที่ใกล้เคียงกับ TensorFlow มากขึ้น
ในด้าน 'ไคลเอนต์' การเล่นกับพารามิเตอร์โมเดลและการรันพารามิเตอร์นั้นทำได้ง่ายเหมือนกับการสร้างไฟล์การกำหนดค่า (yaml) การเปิดล่าม Python และการออกคำสั่งจำนวนหนึ่ง ตัวอย่างเช่น ตัวอย่างข้อมูลต่อไปนี้คือทั้งหมดที่จำเป็นในการเริ่มการฝึกอบรมชุดข้อมูล Cornell (หลังจากดาวน์โหลดแล้ว) ด้วยการกำหนดค่าของคุณ:
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
นี่เป็นเพียงวิธีหนึ่งในการเชื่อมต่อกับโปรเจ็กต์ ตัวอย่างเช่น ผู้ใช้ยังสามารถส่งพารามิเตอร์ผ่าน args บรรทัดคำสั่งได้ ซึ่งจะถูกรวมเข้ากับไฟล์กำหนดค่าใดๆ ที่พวกเขาระบุเช่นกัน (ลำดับความสำคัญที่กำหนดให้กับ args บรรทัดคำสั่ง หากมีข้อขัดแย้ง) คุณยังสามารถส่งตำแหน่งของแชทบอตที่บันทึกไว้ก่อนหน้านี้เพื่อฝึกต่อหรือเริ่มการสนทนาได้ ดู main.py
สำหรับรายละเอียดเพิ่มเติม
Ubuntu Dialogue Corpus: วิธีการประมวลผลล่วงหน้าสามารถดูได้ใน ubuntu_reformat.ipynb ในโฟลเดอร์โน้ตบุ๊ก การใช้งานที่ตั้งใจไว้สำหรับชุดข้อมูลคือการจัดอันดับการตอบสนองสำหรับบทสนทนาแบบหลายรอบ แต่ฉันได้ใช้วิธีการที่ค่อนข้างง่ายในการแยกคู่คำพูดและตีความว่าเป็นประโยคเดียวเป็นการตอบกลับครั้งเดียว ซึ่งสอดคล้องกับอินพุตสำหรับตัวเข้ารหัสและตัวถอดรหัส ตามลำดับในรุ่น
Cornell Movie-Dialogs: ฉันเริ่มต้นด้วย Cornell Corpus เวอร์ชันที่ประมวลผลล่วงหน้าแล้ว และทำการแก้ไขเล็กน้อยเพื่อลดเสียงรบกวน
ความคิดเห็น Reddit: ประมาณ. 1.7 พันล้านความคิดเห็น Reddit ขณะนี้กำลังดำเนินการประมวลผลล่วงหน้าและลดชุดข้อมูลขนาดใหญ่นี้ให้อยู่ในรูปแบบที่เหมาะสมสำหรับการฝึกอบรมโมเดลการสนทนา จะโพสต์ลิงก์ดาวน์โหลดชุดข้อมูลที่ประมวลผลเมื่อเสร็จสมบูรณ์!
DynamicBot: ใช้วิธีการเชิงวัตถุมากขึ้นที่นำเสนอโดยคลาสที่กำหนดเองใน model_components.py ผลลัพธ์ที่ได้คือการฝังที่ต่อกันแบบแบทช์ออนไลน์เร็วขึ้น และวิธีการสนทนาที่เป็นธรรมชาติยิ่งขึ้น มันใช้ประโยชน์จาก python API ใหม่ (ที่ยอดเยี่ยม) ใน TensorFlow 1.0 โดยเฉพาะอย่างยิ่ง dynamic_rnn นอกจากนี้ยังปฏิบัติตามแนวทางปฏิบัติในการกำหนดขอบเขตตัวแปรที่ดีและแบบแผนเทนเซอร์โฟลว์ทั่วไปที่ฉันสังเกตเห็นในเอกสารประกอบและซอร์สโค้ด ซึ่งมีผลข้างเคียงที่ดี เช่น การแสดงกราฟที่ชัดเจนใน TensorBoard
SimpleBot: โมเดลที่เก็บข้อมูลแบบง่ายโดยอิงจากโมเดล 'ChatBot' ที่ซับซ้อนกว่าด้านล่าง แม้ว่าจะมีความยืดหยุ่นน้อยกว่าในการปรับแต่งพาร์ติชั่นบัคเก็ต และใช้ softmax แบบกระจัดกระจายเหนือคำศัพท์ทั้งหมด แทนที่จะสุ่มตัวอย่าง แต่ก็มีความโปร่งใสมากกว่ามากในการนำไปปฏิบัติ มันใช้ tf.contrib น้อยที่สุดเมื่อเทียบกับ ChatBot และใช้งานจาก "เริ่มต้น" ไม่มากก็น้อยในแง่ของการพึ่งพาวิธีการเทนเซอร์โฟลว์พื้นฐานเป็นหลัก หากคุณยังใหม่กับ TensorFlow อาจเป็นประโยชน์ในการอ่านการใช้งานอย่างละเอียดเพื่อให้เข้าใจถึงแบบแผนทั่วไปในการเขียนโปรแกรมเทนเซอร์โฟลว์ เนื่องจากเป็นผลมาจากการที่ฉันอ่านซอร์สโค้ดของวิธีการทั้งหมดใน ChatBot และเขียนของตัวเองให้กระชับยิ่งขึ้น การตีความ
ChatBot: เวอร์ชันขยายของโมเดลที่อธิบายไว้ในบทช่วยสอน TensorFlow นี้ ลักษณะทางสถาปัตยกรรม: อินพุตที่ฝากไว้ ตัวถอดรหัสใช้กลไกความสนใจ (ดูหน้า 69 ของบันทึกย่อของฉัน และอินพุตจะถูกฝังด้วยฟังก์ชันง่ายๆ ที่มีให้ในไลบรารี tf.contrib นอกจากนี้ยังใช้ฟังก์ชันการสูญเสีย softmax ตัวอย่างเพื่อให้มีขนาดคำศัพท์ที่ใหญ่ขึ้น (หน้า หมายเหตุเพิ่มเติมที่ 67) เนื่องจากลักษณะของโมเดลที่เก็บข้อมูล จึงใช้เวลานานกว่ามากในการสร้างโมเดลเมื่อเปรียบเทียบกับโมเดลอื่นๆ ปัญหาคอขวดหลักดูเหมือนจะมีขนาดเท่ากับบัคเก็ตที่ใหญ่ที่สุดและวิธีการสร้างการไล่ระดับสีตาม ขนาดถัง
ไดเร็กทอรีหน้าเว็บแสดงวิธีที่ง่ายและประหยัดพื้นที่ในการปรับใช้โมเดล TensorFlow ในแอปพลิเคชัน Flask โมเดลนั้น 'ค้าง' -- ส่วนประกอบทั้งหมดที่ไม่จำเป็นสำหรับการสนทนา (เช่น เครื่องมือเพิ่มประสิทธิภาพ) จะถูกลบออก และตัวแปรที่เหลือทั้งหมดจะถูกแปลงเป็นค่าคงที่ เมื่อผู้ใช้คลิกที่ชื่อโมเดล REST API สำหรับโมเดลนั้นจะถูกสร้างขึ้น เมื่อผู้ใช้ป้อนประโยคลงในแบบฟอร์ม คำขอ (AJAX) POST จะถูกออก โดยที่การตอบกลับคือประโยคการตอบกลับของแชทบอท สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ REST API โปรดดูที่ views.py
แอปพลิเคชัน Flask ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด เช่น การใช้พิมพ์เขียวสำหรับการสร้างอินสแตนซ์ของแอปพลิเคชัน ฐานข้อมูลที่แตกต่างกันขึ้นอยู่กับสภาพแวดล้อมของแอปพลิเคชัน (เช่น การพัฒนาหรือการใช้งานจริง) และอื่นๆ
ที่นี่ฉันจะลงรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการสร้างแบบจำลองและวิธีที่สามารถมองเห็นได้ ส่วนนี้เป็นงานระหว่างดำเนินการและยังไม่เสร็จสมบูรณ์
แทนที่จะใช้อาร์กิวเมนต์ feed_dict
เพื่อป้อนข้อมูลชุดข้อมูลให้กับโมเดล จะเข้ารหัสข้อมูลอินพุตและเทคนิคการประมวลผลล่วงหน้าในโครงสร้างกราฟได้เร็วกว่า มาก ซึ่งหมายความว่าเราไม่ได้ป้อนอะไรให้กับโมเดลในเวลาฝึกอบรม แต่โมเดลจะใช้ลำดับของคิวเพื่อเข้าถึงข้อมูลจากไฟล์ในรูปแบบ protobuf ของ Google ถอดรหัสไฟล์เป็นลำดับเทนเซอร์ แบทช์แบบไดนามิกและแพดลำดับ จากนั้นป้อนแบทช์เหล่านี้ไปยังตัวถอดรหัสที่ฝัง ทั้งหมดอยู่ในโครงสร้างกราฟ นอกจากนี้ การประมวลผลข้อมูลนี้ยังมีการประสานงานโดยหลายเธรดพร้อมกัน เราสามารถใช้เทนเซอร์บอร์ด (และแนวทางปฏิบัติที่ดีที่สุดสำหรับการกำหนดขอบเขตตัวแปร) เพื่อแสดงภาพไปป์ไลน์ประเภทนี้ในระดับสูง
(คำอธิบายเพิ่มเติมเร็ว ๆ นี้!)
มีการวิจัยมากมายเกี่ยวกับโมเดลเหล่านี้ และฉันได้บันทึกบันทึกของฉันในเอกสารที่ "สำคัญ" ที่สุดที่นี่ในส่วนสุดท้ายของบันทึกการเรียนรู้เชิงลึกของฉันที่นี่ หมายเหตุยังรวมถึงวิธีที่ฉันลองแปลเนื้อหาจากเอกสารเป็นโค้ด TensorFlow ฉันจะอัปเดตสิ่งนั้นเมื่อมีแนวคิดจากเอกสารอื่นๆ เข้ามาสู่โปรเจ็กต์นี้
เอกสาร:
แหล่งข้อมูลออนไลน์: