ที่นี่เราจะเรียนรู้เกี่ยวกับแนวคิดหลักบางประการของระบบการแนะนำ

สงสัยว่า 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 ของฉันได้:ที่นี่