ที่นี่เราจะเรียนรู้เกี่ยวกับแนวคิดหลักบางประการของระบบการแนะนำ
สงสัยว่า Google คิดค้นภาพยนตร์ที่คล้ายกับภาพยนตร์ที่คุณชอบได้อย่างไร หลังจากอ่านโพสต์นี้ คุณจะมีความคิดที่ดีว่าระบบการแนะนำทำงานอย่างไร
โดยทั่วไปมีระบบการแนะนำสี่ประเภท:
- ระบบการแนะนำตามความนิยม
- เครื่องมือแนะนำตามเนื้อหา
- เครื่องมือแนะนำตามการกรองแบบร่วมมือกัน
- ระบบการแนะนำแบบไฮบริด โดยพื้นฐานแล้วเป็นการผสมผสานระหว่างระบบการแนะนำตามการกรองเนื้อหาและการกรองร่วมกัน
ในโพสต์นี้ เราจะเน้นไปที่การกรองตามเนื้อหา
เครื่องมือแนะนำเนื้อหาตาม:
ระบบการแนะนำตามเนื้อหาจะแนะนำรายการให้กับผู้ใช้โดยใช้ความคล้ายคลึงกันของรายการ ระบบผู้แนะนำนี้จะแนะนำผลิตภัณฑ์หรือรายการตามคำอธิบายหรือคุณสมบัติ โดยระบุความคล้ายคลึงกันระหว่างผลิตภัณฑ์ตามคำอธิบาย นอกจากนี้ยังพิจารณาประวัติก่อนหน้าของผู้ใช้เพื่อแนะนำผลิตภัณฑ์ที่คล้ายคลึงกัน
คำถามหลักคือเราจะวัดความคล้ายคลึงกันได้อย่างไร
ความคล้ายคลึงกัน:
การวัดความคล้ายคลึงกันคือการวัดว่าวัตถุข้อมูลสองชิ้นมีความเหมือนกันมากเพียงใด การวัดความคล้ายคลึงกันคือบริบทการทำเหมืองข้อมูลหรือการเรียนรู้ของเครื่องคือระยะทางที่มีมิติที่แสดงถึงคุณลักษณะของวัตถุ หากระยะห่างน้อย วัตถุสองชิ้นจะเหมือนกันมาก ไม่อย่างนั้นพวกมันจะไม่เหมือนกัน
โดยทั่วไป ความคล้ายคลึงกันจะวัดในช่วง 0 ถึง 1 ในโลกของแมชชีนเลิร์นนิง คะแนนนี้ในช่วง [0, 1] เรียกว่าคะแนนความคล้ายคลึง
การพูดทางคณิตศาสตร์ :
ความคล้ายคลึงกัน =1 ถ้า X=Y มิฉะนั้น 0
โดยที่ X และ Y คือวัตถุสองชิ้น
ในที่นี้จะพูดถึงการวัดระยะทางที่คล้ายคลึงกันซึ่งได้รับความนิยมมากที่สุด
ความคล้ายคลึงกันของโคไซน์:
ตัวชี้วัดความคล้ายคลึงโคไซน์ค้นหาผลคูณดอทที่ทำให้เป็นมาตรฐานของแอตทริบิวต์ทั้งสอง ด้วยการพิจารณาความคล้ายคลึงของโคไซน์ เราจะพยายามค้นหาโคไซน์ของมุมระหว่างวัตถุทั้งสองอย่างมีประสิทธิภาพ
ความคล้ายคลึงกันของโคไซน์ถูกใช้เป็นพิเศษในปริภูมิเชิงบวก โดยที่ผลลัพธ์มีขอบเขตอย่างเรียบร้อยใน [0,1] สาเหตุหนึ่งที่ทำให้ความคล้ายคลึงโคไซน์ได้รับความนิยมก็คือ การประเมินมีประสิทธิภาพมาก โดยเฉพาะเวกเตอร์กระจัดกระจาย
ระยะทางแบบยุคลิด:
ระยะทางแบบยุคลิดเรียกอีกอย่างว่าระยะทาง เมื่อข้อมูลมีความหนาแน่นหรือต่อเนื่อง นี่คือการวัดความใกล้เคียงที่ดีที่สุด
ระยะห่างแบบยุคลิดระหว่างจุดสองจุดคือความยาวของเส้นทางที่เชื่อมต่อจุดทั้งสอง ทฤษฎีบทพีทาโกรัสให้ระยะห่างนี้ระหว่างจุดสองจุด
ระยะทางแมนฮัตตัน:
ระยะทางแมนฮัตตันคือหน่วยเมตริกที่ระยะห่างระหว่างจุดสองจุดถูกคำนวณเป็นผลรวมของความแตกต่างสัมบูรณ์ของพิกัดคาร์ทีเซียน พูดง่ายๆ ก็คือผลรวมของผลต่างระหว่างพิกัด x และพิกัด y
รวบรวมข้อมูล:
สำหรับปัญหานี้ ฉันตัดสินใจใช้ชุดข้อมูลที่มีภาพยนตร์ยอดนิยมเกือบ 5,000 เรื่องจาก TMDB ไฟล์ CSV มีอยู่สองประเภท ไฟล์หนึ่งประกอบด้วยข้อมูลเกี่ยวกับงบประมาณ รหัสประเภทภาพยนตร์ และอื่นๆ ประกอบด้วยไฟล์เกี่ยวกับชื่อเรื่อง นักแสดง และทีมงานของภาพยนตร์
ตอนนี้เรามาทำการเข้ารหัสกัน มาดูกันว่าชุดข้อมูลของเรามีอะไรบ้าง
ขั้นแรก เราจะรวมชุดข้อมูลทั้งสองนี้เข้าด้วยกัน:
ที่นี่เราจะไม่ทำงานกับคุณสมบัติทั้งหมดของชุดข้อมูลที่รวมเหล่านี้ แต่เราจะเลือกคุณลักษณะบางอย่างที่เราเชื่อว่ามีประสิทธิผลมากที่สุดสำหรับโครงการนี้แทน นี่คือรหัสสำหรับสิ่งนั้น:
ตอนนี้เราจะตรวจสอบค่าที่หายไปของข้อมูลของเรา:
ที่นี่เราจะทิ้งค่าที่หายไปเหล่านั้น เนื่องจากมีค่าที่ขาดหายไปเพียงสามค่าในคอลัมน์ภาพรวม
ต่อไปเราจะทำวิศวกรรมคุณลักษณะบางอย่าง ดังที่เราจะเห็นได้ว่ารูปแบบของแต่ละคอลัมน์ไม่ใช่รูปแบบที่ต้องการ เป้าหมายของเราคือการแปลงองค์ประกอบของแต่ละคอลัมน์ให้เป็นรายการ เพื่อให้เราสามารถแปลงให้เป็นค่าตัวเลขได้ เพื่อที่เราจะได้เขียนโค้ดต่อไปนี้:
ในทำนองเดียวกันเราจะเปลี่ยนคอลัมน์อื่นๆ ในคอลัมน์ลูกเรือ เราจะแยกเฉพาะชื่อผู้กำกับเท่านั้น จากคอลัมน์นักแสดงเราใช้เพียงสี่ชื่อแรกเท่านั้น ต่อไป เราจะสร้างคอลัมน์ใหม่โดยการรวม 'ภาพรวม', 'คำหลัก', 'นักแสดง', 'ลูกเรือ' และ 'ประเภท' และชื่อของคอลัมน์ใหม่คือ 'แท็ก' ต่อไปนี้เป็นชุดข้อมูลสุดท้ายของเรา:
ต่อไปเราจะใช้การนึ่งในคอลัมน์ 'tag' เพื่อให้คำในคอลัมน์ 'tag' สามารถกลายเป็นรูปแบบรากได้ ที่นี่เราจะใช้แพ็คเกจ nltk สำหรับการกั้น
ตอนนี้เราพร้อมที่จะแปลงคอลัมน์ 'แท็ก' เป็นค่าตัวเลขแล้ว เราจะใช้ฟังก์ชัน CountVectorizer จากแพ็คเกจ sklearn
ตอนนี้เราจะหาระยะห่างระหว่างภาพยนตร์สองเรื่องโดยใช้ความคล้ายคลึงโคไซน์ผ่านคอลัมน์ movie_id
โดยพื้นฐานแล้วเราใช้ระยะความคล้ายคลึงโคไซน์ นี่คือโค้ดสำหรับภาพยนตร์ที่คล้ายกันสำหรับภาพยนตร์เรื่องหนึ่งๆ
ต่อไปเราจะแปลงมันเป็นเว็บแอปพลิเคชันผ่านงานเฟรมสตรีมไลท์ เพื่อที่เราจะแปลงข้อมูลและ cos_distance ของเราเป็นไฟล์ดองดังนี้:
ต่อไป เราจะดึงโปสเตอร์ภาพยนตร์และเรตติ้งของภาพยนตร์เรื่องใดเรื่องหนึ่งผ่านคีย์ API ซึ่งสามารถพบได้จาก https://www.themoviedb.org/
นี่คือผลลัพธ์สุดท้ายของโครงการของเรา:
สำหรับรายละเอียดการใช้งาน คุณสามารถตรวจสอบลิงก์ GitHub ของฉันได้:ที่นี่