ระบบผู้แนะนำ — คู่มือฉบับสมบูรณ์สำหรับโมเดลแมชชีนเลิร์นนิง
ใช้ประโยชน์จากข้อมูลเพื่อช่วยให้ผู้ใช้ค้นพบเนื้อหาใหม่
ระบบผู้แนะนำ: ทำไมและอย่างไร
ระบบผู้แนะนำเป็นอัลกอริทึมที่ให้คำแนะนำส่วนบุคคลสำหรับรายการที่เกี่ยวข้องกับผู้ใช้แต่ละคนมากที่สุด ด้วยการเติบโตอย่างมากของเนื้อหาออนไลน์ที่มีอยู่ ผู้ใช้จึงมีตัวเลือกมากมาย ดังนั้น แพลตฟอร์มเว็บจึงจำเป็นอย่างยิ่งที่จะต้องให้คำแนะนำสินค้าแก่ผู้ใช้แต่ละคน เพื่อเพิ่มความพึงพอใจและการมีส่วนร่วมของผู้ใช้
รายการต่อไปนี้แสดงตัวอย่างแพลตฟอร์มเว็บที่มีชื่อเสียง ซึ่ง มีเนื้อหาที่มีอยู่จำนวนมากซึ่งต้องการระบบผู้แนะนำที่มีประสิทธิภาพเพื่อให้ผู้ใช้สนใจ
- ยูทูบ . ทุกนาทีมีคนอัปโหลดวิดีโอ 500 ชั่วโมงกล่าวคือ ผู้ใช้ 1 คนจะใช้เวลา 82 ปีในการดูวิดีโอทั้งหมดที่อัปโหลดในชั่วโมงสุดท้าย
- สป อติฟาย ผู้ใช้สามารถฟังเพลงและพอดแคสต์มากกว่า80ล้านเพลง
- อเมซอน ผู้ใช้สามารถซื้อผลิตภัณฑ์ ต่างๆ ได้มากกว่า 350 ล้านรายการ
ข้อเสนอแนะที่ชัดเจนกับข้อเสนอแนะโดยนัย
ในระบบผู้แนะนำ โมเดลแมชชีนเลิร์นนิงใช้เพื่อทำนายคะแนนrᵤᵢของผู้ใช้uในรายการi ในเวลาอนุมาน เราแนะนำให้ผู้ใช้แต่ละรายuรายการที่มีคะแนนสูงสุดที่คาดการณ์ไว้rᵤ ᵢ
ดังนั้นเราจึงจำเป็นต้องรวบรวมคำติชมของผู้ใช้ เพื่อให้เรามีความจริงพื้นฐานสำหรับการฝึกอบรมและการประเมินโมเดลของเรา ต้องมีการแยกความแตกต่างที่สำคัญระหว่าง ข้อเสนอแนะที่ ชัดเจนและ ข้อ เสนอแนะโดยนัย
ข้อเสนอแนะที่ชัดเจน คือการให้คะแนนอย่างชัดเจนโดยผู้ใช้เพื่อแสดงความพึงพอใจต่อรายการ ตัวอย่าง ได้แก่ จำนวนดาวในระดับตั้งแต่ 1 ถึง 5 ที่ได้รับหลังจากซื้อผลิตภัณฑ์ การให้นิ้วหัวแม่มือขึ้น/ลงหลังจากดูวิดีโอ ฯลฯ ข้อเสนอแนะนี้ให้ข้อมูลโดยละเอียดว่าผู้ใช้ชอบสินค้ามากน้อยเพียงใด แต่เป็นการยากที่จะ รวบรวมเนื่องจากผู้ใช้ส่วนใหญ่มักไม่เขียนรีวิวหรือให้คะแนนอย่างชัดเจนสำหรับแต่ละรายการที่ซื้อ
ในทางกลับกัน คำติชมโดยปริยายจะถือว่าการโต้ตอบระหว่างผู้ใช้กับรายการเป็นการบ่งชี้ถึงการตั้งค่า ตัวอย่างเช่น: การซื้อ/ประวัติการเข้าชมของผู้ใช้ รายชื่อเพลงที่ผู้ใช้เล่น เป็นต้น ข้อเสนอแนะนี้มีมากมายมหาศาลแต่ในขณะเดียวกันก็มีรายละเอียดน้อยกว่าและมีเสียงดังกว่า (เช่น บางคนอาจซื้อผลิตภัณฑ์เป็นของขวัญให้ คนอื่น). อย่างไรก็ตาม สัญญาณรบกวนนี้กลายเป็นเรื่องเล็กน้อยเมื่อเทียบกับขนาดที่แท้จริงของข้อมูลประเภทนี้ที่มีอยู่ และระบบผู้แนะนำสมัยใหม่ส่วนใหญ่มักอาศัยการตอบกลับโดยปริยาย
เมื่อเรารวบรวมความคิดเห็นที่ชัดเจนหรือโดยปริยายแล้ว เราสามารถสร้าง เมทริกซ์การ ให้คะแนนผู้ใช้และรายการrᵤᵢ สำหรับความคิดเห็นที่ชัดเจน แต่ละรายการในrᵤᵢเป็นค่าตัวเลข เช่นrᵤᵢ = "ดาวที่คุณมอบให้กับภาพยนตร์i "—หรือ "?" หากผู้ใช้ไม่ได้ให้คะแนนรายการi สำหรับการตอบกลับโดยปริยาย ค่าในrᵤᵢเป็นค่าบูลีนที่แสดงถึงการมีอยู่หรือขาดการโต้ตอบ เช่นrᵤᵢ = “ผู้ใช้คุณดูภาพยนตร์iหรือไม่” สังเกตว่าเมทริกซ์rᵤᵢมีน้อยมาก เนื่องจากผู้ใช้โต้ตอบกับบางรายการในเนื้อหาที่มีอยู่ทั้งหมด และพวกเขาตรวจสอบรายการน้อยลงด้วยซ้ำ!
แนวทางการกรองตามเนื้อหาเทียบกับแนวทางการกรองร่วมกัน
ระบบผู้แนะนำสามารถจำแนกตามประเภทของข้อมูลที่ใช้ในการทำนายการตั้งค่าของผู้ใช้เป็นตามเนื้อหาหรือการกรองแบบทำงานร่วมกัน
วิธีการตามเนื้อหา
วิธีการตามเนื้อหาจะอธิบายผู้ใช้และรายการ ตาม ข้อมูลเมตา ที่รู้จัก แต่ละรายการ iจะแสดงด้วยชุดแท็กที่เกี่ยวข้อง เช่น ภาพยนตร์ของแพลตฟอร์ม IMDbสามารถแท็กเป็น "แอ็คชั่น" "ตลก"เป็นต้น ผู้ใช้แต่ละคน uจะแสดงด้วยโปรไฟล์ผู้ใช้ ซึ่งสามารถสร้างจากข้อมูลผู้ใช้ที่รู้จัก— เช่น เพศและอายุ—หรือจากกิจกรรมที่ผ่านมาของผู้ใช้
ในการฝึกโมเดลการเรียนรู้ของเครื่องด้วยวิธีนี้ เราสามารถใช้โมเดลk-NN ตัวอย่างเช่น หากเราทราบว่าผู้ใช้uซื้อสินค้าiเราสามารถแนะนำสินค้าที่มีคุณลักษณะคล้ายกับiมาก ที่สุดให้กับ คุณ
ข้อดี ของ แนวทางนี้คือสามารถทราบข้อมูลเมตาของรายการล่วงหน้าได้ ดังนั้นเราจึงสามารถนำไปใช้กับสถานการณ์ Cold-Startที่มีการเพิ่มรายการหรือผู้ใช้ใหม่ลงในแพลตฟอร์ม และเราไม่มีการโต้ตอบระหว่างผู้ใช้กับรายการเพื่อฝึกโมเดลของเรา . ข้อเสียคือเราไม่ได้ใช้ชุดที่สมบูรณ์ของการโต้ตอบระหว่างผู้ใช้กับรายการที่รู้จัก (ผู้ใช้แต่ละรายได้รับการปฏิบัติโดยอิสระ) และเราจำเป็นต้องทราบข้อมูลเมตาสำหรับแต่ละรายการและผู้ใช้
แนวทางการกรองร่วมกัน
วิธีการกรองแบบทำงานร่วมกัน จะไม่ใช้รายการหรือข้อมูลเมตาของผู้ใช้ แต่พยายามใช้ประโยชน์จากผลตอบรับหรือประวัติกิจกรรมของผู้ใช้ทั้งหมด แทน เพื่อคาดการณ์การให้คะแนนของผู้ใช้ในรายการที่กำหนดโดยการอนุมานการพึ่งพาระหว่างผู้ใช้และรายการจากกิจกรรมที่สังเกต
ในการฝึกโมเดลแมชชีนเลิร์นนิงด้วยวิธีนี้ เรามักจะพยายามจัดกลุ่มหรือแยกตัวประกอบของเมทริกซ์การให้คะแนนrᵤᵢเพื่อคาดการณ์คู่ที่ไม่ได้สังเกต ( u,i ) เช่น โดยที่rᵤᵢ = “?” ในบทความนี้เราจะนำเสนออัลกอริทึมการแยกตัวประกอบเมทริกซ์ซึ่งเป็นวิธีที่ได้รับความนิยมมากที่สุดในคลาสนี้
ข้อดี ของ วิธีนี้คือใช้การโต้ตอบระหว่างผู้ใช้กับไอเท็มทั้งชุด (เช่น เมทริกซ์rᵤᵢ ) ซึ่งโดยทั่วไปจะช่วยให้ได้รับความแม่นยำสูงกว่าการใช้โมเดลตามเนื้อหา ข้อเสียของแนวทางนี้คือต้องมีการโต้ตอบกับผู้ใช้เล็กน้อยก่อนที่จะสามารถติดตั้งโมเดลได้
แนวทางแบบผสมผสาน
สุดท้าย ยังมีวิธีการแบบผสมที่พยายามใช้ทั้งข้อมูลเมตาที่รู้จักและชุดของการโต้ตอบระหว่างผู้ใช้กับรายการที่สังเกตได้ วิธีนี้เป็นการรวมข้อดีของทั้งวิธีการกรองตามเนื้อหาและแบบทำงานร่วมกัน และช่วยให้ได้ผลลัพธ์ที่ดีที่สุด ในบทความนี้ เราจะนำเสนอLightFMซึ่งเป็นอัลกอริธึมที่ได้รับความนิยมมากที่สุดในบรรดาเมธอดประเภทนี้
การกรองร่วมกัน: การแยกตัวประกอบเมทริกซ์
อัลกอริทึมการแยกตัวประกอบของเมทริกซ์น่าจะเป็นวิธีการกรองแบบทำงานร่วมกันที่ได้รับความนิยมและมีประสิทธิภาพมากที่สุดสำหรับระบบผู้แนะนำ การแยกตัวประกอบเมทริกซ์เป็นแบบจำลองตัวประกอบแฝงโดยสมมติว่าสำหรับผู้ใช้แต่ละราย uและรายการ iมีการแทนเวกเตอร์แฝงpᵤ, qᵢ ∈ R ᶠ st rᵤᵢสามารถแสดงได้ไม่ซ้ำกัน — เช่น “แยกตัวประกอบ” — ในรูปของ pᵤและ qᵢ Python library Surprise นำเสนอวิธีการเหล่านี้ที่ยอดเยี่ยม
การแยกตัวประกอบเมทริกซ์สำหรับข้อเสนอแนะที่ชัดเจน
แนวคิดที่ง่ายที่สุดคือการสร้างแบบจำลองการโต้ตอบระหว่างผู้ใช้กับสินค้าผ่านแบบจำลองเชิงเส้น หากต้องการเรียนรู้ค่าของpᵤและqᵢเราสามารถลดการสูญเสีย MSE ที่ทำให้เป็นมาตรฐานให้เหลือน้อยที่สุด เหนือชุดKของคู่ ( u , i ) ที่รู้จักrᵤᵢ อัลกอริทึมที่ได้รับเรียกว่าการแยกตัวประกอบเมทริกซ์ความน่าจะเป็น (PMF )
ฟังก์ชันการสูญเสียสามารถย่อให้เล็กสุดได้สองวิธี วิธีแรกคือการใช้stochastic Gradient Destination (SGD ) SGD นั้นง่ายต่อการใช้งาน แต่อาจมีปัญหาบางอย่างเนื่องจากทั้ง คู่ไม่รู้จัก pᵤและqᵢดังนั้นฟังก์ชันการสูญเสียจึงไม่นูนออกมา ในการแก้ปัญหานี้ เราสามารถแก้ไขค่าpᵤและqᵢและรับปัญหาการถดถอยเชิงเส้นนูนที่สามารถแก้ไขได้ง่ายด้วยกำลังสองน้อยที่สุดธรรมดา (OLS ) วิธีที่สองนี้เรียกว่ากำลังสองน้อยที่สุดสลับกัน (ALS)และช่วยให้สามารถขนานและเพิ่มความเร็วได้อย่างมาก
อัลกอริทึม PMF ได้รับการทำให้เป็นแบบทั่วไปในภายหลังโดยอัลกอริทึมการ สลายตัวของ ค่าเอกพจน์ (SVD)ซึ่งนำเงื่อนไขอคติ มาใช้ ในแบบจำลอง โดยเฉพาะอย่างยิ่งbᵤ และbᵢวัดความเบี่ยงเบนของคะแนนที่สังเกตได้ของผู้ใช้uและรายการiตามลำดับ ในขณะที่μเป็นคะแนนเฉลี่ยโดยรวม คำศัพท์เหล่านี้มักจะอธิบายถึงการให้คะแนนที่สังเกตได้ส่วนใหญ่rᵤᵢเนื่องจากบางรายการได้รับการให้คะแนนดีขึ้น/แย่ลง และผู้ใช้บางรายก็เอื้อเฟื้อมากขึ้น/น้อยลงอย่างสม่ำเสมอกับการให้คะแนนของพวกเขา
การแยกตัวประกอบเมทริกซ์สำหรับการตอบรับโดยปริยาย
เมธอดSVD สามารถ ปรับ ให้ เข้ากับ ชุด ข้อมูลคำ ติชมโดยปริยาย แนวคิดคือการดูผลตอบรับโดยนัยเป็นการวัดความมั่นใจทางอ้อม สมมติว่าความคิดเห็นโดยปริยายtᵤᵢวัดเปอร์เซ็นต์ของภาพยนตร์iที่ผู้ใช้คุณเคยดู — เช่นtᵤᵢ = 0 หมายความว่าคุณไม่เคยดูi , tᵤᵢ = 0.1 หมายความว่าเขาดูแค่ 10% ของเรื่องนี้tᵤᵢ = 2 หมายความว่าเขาดู มันสองครั้ง โดยสัญชาตญาณแล้ว ผู้ใช้มักจะสนใจภาพยนตร์ที่พวกเขาดูซ้ำสองครั้ง มากกว่าที่จะดูหนังที่ไม่เคยดูมาก่อน เราจึงกำหนดก เมทริกซ์ความเชื่อมั่นcᵤᵢและเมทริกซ์การให้คะแนนrᵤᵢ ดังนี้
จากนั้น เราสามารถจำลองrᵤᵢ ที่สังเกตได้ โดยใช้แบบจำลองเชิงเส้นเดียวกันกับที่ใช้สำหรับ SVD แต่มีฟังก์ชันการสูญเสียที่แตกต่างกันเล็กน้อย อันดับแรก เราคำนวณการสูญเสียของคู่ ( u , i ) ทั้งหมด — ซึ่งแตกต่างจากกรณีที่ชัดเจน หากผู้ใช้uไม่เคยโต้ตอบกับiเราจะได้rᵤᵢ = 0 แทนที่จะเป็นrᵤᵢ = “?” . ประการที่สอง เราให้น้ำหนักแต่ละคำที่สูญเสียตามความเชื่อมั่นที่คุณชอบ
สุดท้าย สามารถใช้อัลกอริทึม SVD++ เมื่อเราสามารถเข้าถึงการตอบรับทั้งแบบชัดแจ้งและโดยนัย สิ่งนี้มีประโยชน์มาก เพราะโดยปกติแล้วผู้ใช้จะโต้ตอบกับหลายรายการ (= feedabck โดยปริยาย) แต่ให้คะแนนเพียงส่วนย่อยเล็กน้อยเท่านั้น (= ข้อเสนอแนะที่ชัดเจน) สมมติว่า สำหรับผู้ใช้แต่ละรายuชุดN(u) ของรายการที่ คุณ โต้ตอบด้วย จากนั้น เราถือว่าการโต้ตอบโดยปริยายกับไอเท็มjนั้นสัมพันธ์กับเวกเตอร์แฝงใหม่zⱼ ∈ R ᶠ อัลกอริทึม SVD++ แก้ไขแบบจำลองเชิงเส้นของ SVD โดยรวมการเป็นตัวแทนผู้ใช้ด้วยผลรวมถ่วงน้ำหนักของปัจจัยแฝงzⱼ เหล่านี้
วิธีไฮบริด: LightFM
วิธีการกรองร่วมกันตามการแยกตัวประกอบของเมทริกซ์มักจะให้ผลลัพธ์ที่ยอดเยี่ยม แต่ในสถานการณ์ที่เริ่มเย็น — ซึ่งมีข้อมูลการโต้ตอบเพียงเล็กน้อยหรือไม่มีเลยสำหรับรายการและผู้ใช้ใหม่ — พวกเขาไม่สามารถคาดการณ์ได้ดีเนื่องจากขาดข้อมูลที่จะประเมินปัจจัยแฝง แนวทางแบบผสมผสานแก้ปัญหานี้โดยใช้ประโยชน์จากรายการที่รู้จักหรือข้อมูลเมตาของผู้ใช้เพื่อปรับปรุงโมเดลการแยกตัวประกอบของเมทริกซ์ Python library LightFMใช้หนึ่งในอัลกอริธึมไฮบริดที่ได้รับความนิยมสูงสุด
ใน LightFM เราถือว่าผู้ใช้แต่ละรายuเราได้รวบรวมชุดคำอธิบายประกอบแท็กAᵁ(u) — เช่น“ชาย” , “อายุ < 30” , … — และเช่นเดียวกัน แต่ละรายการiจะมีชุดคำอธิบายประกอบAᴵ(i) — เช่น“price > 100 $” , “book” , … จากนั้นเราจะสร้างแบบจำลองแท็กผู้ใช้แต่ละแท็กโดยใช้ปัจจัยแฝงxᵁₐ ∈ R ᶠ และโดยใช้คำที่มีอคติbᵁₐ ∈ Rและเราถือว่าการแทนเวกเตอร์ผู้ใช้pᵤและอคติที่เกี่ยวข้องbᵤสามารถแสดงง่ายๆ เป็นผลรวมของเงื่อนไขเหล่านี้xᵁₐและbᵁₐตามลำดับ เราใช้วิธีการเดียวกันกับแท็กสินค้า โดยใช้ปัจจัยแฝงxᴵₐ ∈ Rᶠ และเงื่อนไขอคติbᴵₐ ∈ R เมื่อเรากำหนดpᵤ, qᵢ, bᵤ, bᵢโดยใช้สูตรเหล่านี้แล้ว เราสามารถใช้โมเดลเชิงเส้นเดียวกันของ SVD เพื่ออธิบายความสัมพันธ์ ระหว่างข้อกำหนดเหล่านี้กับrᵤᵢ
ขอให้สังเกตว่ามีสามกรณีที่น่าสนใจของแนวทางแบบผสมผสานของ LightFM
- เริ่มเย็น หากเรามีไอเท็มใหม่iที่มีแท็กที่รู้จักAᴵ(i)เราก็สามารถใช้เวกเตอร์แฝงxᴵₐ (ที่ได้มาจากการติดตั้งโมเดลของเรากับข้อมูลก่อนหน้านี้) เพื่อคำนวณการฝังqᵢและดังนั้นจึงประเมินสำหรับผู้ใช้ใดๆuให้คะแนนrᵤᵢ .
- ไม่มีแท็กที่ใช้ได้ หากเราไม่มีข้อมูลเมตาที่รู้จักสำหรับรายการหรือผู้ใช้ คำอธิบายประกอบเดียวที่เราสามารถใช้ได้คือฟังก์ชันตัวบ่งชี้ กล่าวคือ คำอธิบายประกอบa ที่แตกต่างกัน สำหรับผู้ใช้แต่ละรายและแต่ละรายการ จากนั้น เมทริกซ์คุณลักษณะผู้ใช้และรายการจะเป็นเมทริกซ์ข้อมูลประจำตัว และ LightFM จะลดขนาดลงเป็นวิธีการกรองร่วมกันแบบคลาสสิก เช่น SVD
- ตามเนื้อหาเทียบกับไฮบริด หากเราใช้เฉพาะแท็กผู้ใช้หรือรายการโดยไม่มีคำอธิบายประกอบ LightFM เกือบจะเป็นโมเดลตามเนื้อหา ดังนั้น ในทางปฏิบัติ เพื่อใช้ประโยชน์จากการโต้ตอบระหว่างผู้ใช้กับรายการ เรายังเพิ่มคำอธิบายประกอบตัวบ่งชี้ที่แตกต่างจากผู้ใช้และแต่ละรายการไปยังแท็กที่รู้จัก
- ระบบผู้แนะนำใช้ประโยชน์จากอัลกอริธึมการเรียนรู้ของเครื่องเพื่อช่วยให้ผู้ใช้มีตัวเลือกมากมายในการค้นหาเนื้อหาที่เกี่ยวข้อง
- ข้อเสนอแนะที่ชัดเจนและโดยนัย : ข้อแรกใช้ประโยชน์ได้ง่ายกว่า แต่ข้อที่สองมีมากมายกว่า
- โมเดล ตามเนื้อหาทำงานได้ดีในสถานการณ์ที่เริ่มเย็น แต่จำเป็นต้องทราบข้อมูลเมตาของ ผู้ใช้และรายการ
- โมเดล การกรองร่วมกันโดยทั่วไปใช้การแยกตัวประกอบแบบเมทริกซ์: PMF, SVD, SVD สำหรับการป้อนกลับโดยปริยาย, SVD++
- โมเดลแบบไฮบริดใช้ประโยชน์จากการกรองตามเนื้อหาและการทำงานร่วมกันได้ดีที่สุด LightFMเป็นตัวอย่างที่ดีของแนวทางนี้
- วิกิพีเดีย ระบบ ผู้แนะนำ
- “เซอร์ไพร์ส” เอกสารแพ็คเกจ Python
- (S. Funk 2006), การอัปเดต Netflix: ลองสิ่งนี้ที่บ้าน
- (R. Salakhutdinov 2007), การแยกตัวประกอบเมทริกซ์เชิงความน่าจะเป็น.
- ( Y. Hu 2008), การกรองร่วมกันสำหรับชุดข้อมูล คำติชมโดยปริยาย
- (Y. Koren 2009), เทคนิคการแยกตัวประกอบเมทริกซ์สำหรับระบบผู้แนะนำ .
- (Y. Koren 2008) การแยกตัวประกอบตรงตามพื้นที่ใกล้เคียง: แบบจำลองการกรองร่วมกันหลายแง่มุม
- ( M. Kula 2015), การฝังข้อมูลเมตาสำหรับผู้ใช้และคำแนะนำในการเริ่มเย็นของสินค้า