อัลกอริทึมการจับคู่การตั้งค่า


12

มีโครงการด้านนี้ที่ฉันกำลังทำงานในที่ที่ฉันต้องการจัดโครงสร้างวิธีแก้ไขปัญหาต่อไปนี้

ฉันมีคนสองกลุ่ม (ลูกค้า) กลุ่มAตั้งใจที่จะซื้อและกลุ่มตั้งใจที่จะขายสินค้าที่มีความมุ่งมั่นB Xผลิตภัณฑ์มีชุดของคุณลักษณะx_iและวัตถุประสงค์ของฉันคือเพื่ออำนวยความสะดวกในการทำธุรกรรมระหว่างAและBโดยการจับคู่การตั้งค่าของพวกเขา แนวคิดหลักคือการชี้ให้สมาชิกแต่ละคนของAผลิตภัณฑ์ที่ตรงBกับความต้องการของเขาและในทางกลับกัน

ปัญหาที่ซับซ้อนบางประการของปัญหา:

  1. รายการคุณลักษณะไม่ จำกัด ผู้ซื้ออาจสนใจในลักษณะเฉพาะหรือการออกแบบบางอย่างซึ่งหาได้ยากในหมู่ประชากรและฉันไม่สามารถคาดเดาได้ ก่อนหน้านี้ไม่สามารถแสดงรายการคุณลักษณะทั้งหมด

  2. แอตทริบิวต์อาจเป็นแบบต่อเนื่องแบบไบนารีหรือไม่สามารถวัดได้ (เช่นราคาฟังก์ชันการทำงานการออกแบบ);

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการแก้ไขปัญหานี้และแก้ปัญหาด้วยวิธีอัตโนมัติ?

ฉันจะขอบคุณอ้างอิงบางอย่างเกี่ยวกับปัญหาที่คล้ายกันอื่น ๆ ถ้าเป็นไปได้


คำแนะนำยอดเยี่ยม! ความคล้ายคลึงกันหลายอย่างในวิธีที่ฉันคิดว่าจะเข้าใกล้ปัญหา

ประเด็นหลักในการทำแผนที่คุณลักษณะคือระดับของรายละเอียดที่ควรอธิบายผลิตภัณฑ์ขึ้นอยู่กับผู้ซื้อแต่ละราย ลองยกตัวอย่างรถยนต์ ผลิตภัณฑ์“ รถยนต์” มีคุณสมบัติมากมายตั้งแต่ประสิทธิภาพการทำงานโครงสร้างเครื่องจักรกลราคาและอื่น ๆ

สมมติว่าฉันต้องการรถราคาถูกหรือรถยนต์ไฟฟ้า ตกลงนั่นเป็นเรื่องง่ายที่จะทำแผนที่เพราะมันเป็นคุณสมบัติหลักของผลิตภัณฑ์นี้ แต่ตัวอย่างเช่นฉันต้องการรถที่มีระบบส่งกำลังแบบ Dual-Clutch หรือไฟหน้าซีนอน อาจมีรถยนต์จำนวนมากในฐานข้อมูลที่มีคุณลักษณะนี้ แต่ฉันจะไม่ขอให้ผู้ขายกรอกรายละเอียดในระดับนี้ลงในผลิตภัณฑ์ของพวกเขาก่อนข้อมูลที่มีคนมองอยู่ ขั้นตอนดังกล่าวจะกำหนดให้ผู้ขายทุกรายกรอกแบบฟอร์มที่มีความซับซ้อนและละเอียดมากเพียงพยายามขายรถของเขาบนแพลตฟอร์ม แค่จะไม่ทำงาน

แต่ถึงกระนั้นความท้าทายของฉันคือการพยายามให้รายละเอียดเท่าที่จำเป็นในการค้นหาเพื่อให้ตรงกับที่ดี วิธีที่ฉันคิดคือการทำแผนที่ประเด็นสำคัญของผลิตภัณฑ์ซึ่งอาจเกี่ยวข้องกับทุกคนเพื่อ จำกัด กลุ่มผู้ขายที่มีศักยภาพ

ขั้นตอนต่อไปจะเป็น "การค้นหาที่ละเอียดอ่อน" เพื่อหลีกเลี่ยงการสร้างแบบฟอร์มที่มีรายละเอียดมากเกินไปฉันอาจขอให้ผู้ซื้อและผู้ขายเขียนข้อความฟรีของข้อกำหนดของพวกเขา จากนั้นใช้อัลกอริทึมการจับคู่คำเพื่อค้นหาการจับคู่ที่เป็นไปได้ แม้ว่าฉันเข้าใจว่านี่ไม่ใช่วิธีแก้ปัญหาที่เหมาะสมเนื่องจากผู้ขายไม่สามารถ“ เดา” สิ่งที่ผู้ซื้อต้องการได้ แต่อาจทำให้ฉันเข้าใกล้

เกณฑ์การถ่วงน้ำหนักที่แนะนำนั้นยอดเยี่ยม มันช่วยให้ฉันสามารถวัดระดับที่ผู้ขายตรงกับความต้องการของผู้ซื้อ ส่วนการปรับอาจเป็นปัญหาเนื่องจากความสำคัญของแต่ละแอตทริบิวต์แตกต่างกันไปตามไคลเอนต์ ฉันกำลังคิดถึงการใช้การจดจำรูปแบบบางประเภทหรือเพียงแค่ขอให้ผู้ซื้อป้อนระดับความสำคัญของแต่ละแอตทริบิวต์

คำตอบ:


9

ข้อเสนอแนะแรกของฉันคือการแมปแอตทริบิวต์ที่ไม่สามารถวัดได้กับปริมาณด้วยความช่วยเหลือของฟังก์ชั่นการทำแผนที่ที่เหมาะสม มิฉะนั้นเพียงปล่อยพวกเขาออก

ประการที่สองฉันไม่คิดว่าคุณต้องสมมติว่ารายการคุณลักษณะไม่ จำกัด วิธีมาตรฐานและใช้งานง่ายคือการแสดงแต่ละแอตทริบิวต์เป็นมิติส่วนบุคคลในพื้นที่เวกเตอร์ แต่ละผลิตภัณฑ์นั้นเป็นเพียงจุดในพื้นที่นี้ ในกรณีนี้หากคุณต้องการเพิ่มคุณสมบัติเพิ่มเติมแบบไดนามิกคุณเพียงต้องทำการแมปเวกเตอร์ผลิตภัณฑ์ใหม่ในพื้นที่คุณลักษณะใหม่ (พร้อมมิติเพิ่มเติม)

ด้วยการเป็นตัวแทนนี้ผู้ขายเป็นจุดในพื้นที่คุณลักษณะที่มีคุณสมบัติของผลิตภัณฑ์และผู้ซื้อเป็นจุดในพื้นที่คุณลักษณะเดียวกันกับแอตทริบิวต์การตั้งค่า งานคือการหาจุดผู้ซื้อที่คล้ายกันมากที่สุดสำหรับจุดผู้ขายที่กำหนด

หากชุดข้อมูลของคุณ (เช่นจำนวนผู้ซื้อ / ผู้ขาย) ไม่ใหญ่มากคุณสามารถแก้ปัญหานี้ด้วยวิธีเพื่อนบ้านที่ใกล้เคียงที่สุดที่ดำเนินการด้วยความช่วยเหลือของต้นไม้ kd

สำหรับข้อมูลขนาดใหญ่มากคุณสามารถใช้วิธี IR จัดทำดัชนีชุดของผู้ขาย (เช่นแอตทริบิวต์ของผลิตภัณฑ์) โดยให้แต่ละแอตทริบิวต์เป็นคำที่แยกต่างหากโดยมีการกำหนดน้ำหนักคำตามค่าของแอตทริบิวต์ แบบสอบถามในกรณีนี้คือผู้ซื้อซึ่งถูกเข้ารหัสในพื้นที่คำเป็นเวกเตอร์แบบสอบถามที่มีน้ำหนักคำที่เหมาะสม ขั้นตอนการดึงข้อมูลจะส่งคืนรายการ K ที่เหมือนกันมากที่สุดให้คุณ


ไรท์ ปัญหาหลักที่นี่คือจำนวนมิติเช่นระดับรายละเอียดที่ฉันต้องการใช้ คุณช่วยอธิบาย“ วิธีการแบบ IR” ให้ฉันได้ไหม
RD

1
โดย IR ฉันหมายถึงการดึงข้อมูล คุณอาจคิดว่าเอกสาร (ผู้ขาย) ในคอลเลกชันของคุณและแบบสอบถาม (ผู้ซื้อ) เป็นเวกเตอร์ทั้งหมดที่ฝังอยู่ในพื้นที่คำ (แอตทริบิวต์) ดังที่ฉันได้กล่าวมาแล้ววิธีการดังกล่าวจำเป็นต้องมีมิติข้อมูลที่กำหนดไว้ล่วงหน้าเพื่อใช้งาน
Debasis

7

เป็นข้อเสนอแนะ, ป่าไป ก่อนอื่นให้แก้ไขฉันถ้าฉันผิด:

  • มีคุณสมบัติเพียงไม่กี่อย่างสำหรับแต่ละผลิตภัณฑ์
  • ไม่มีรายการคุณลักษณะขั้นสูงสุดและลูกค้าสามารถเพิ่มคุณสมบัติใหม่ให้กับผลิตภัณฑ์ของตนได้

ถ้าเป็นเช่นนั้นการสร้างตารางคุณลักษณะผลิตภัณฑ์แบบเต็มอาจมีราคาแพง และตารางข้อมูลสุดท้ายจะกระจัดกระจายมาก

ขั้นตอนแรกคือการ จำกัด รายการลูกค้า (ผลิตภัณฑ์) ให้แคบลงสำหรับการจับคู่ มาสร้างกราฟสองส่วนที่ผู้ขายจะเป็นโหนดประเภท 1 และผู้ซื้อจะเป็นโหนดประเภทที่ 2 สร้างขอบระหว่างผู้ขายและผู้ซื้อทุกครั้งที่พวกเขาอ้างอิงคุณลักษณะของผลิตภัณฑ์ที่คล้ายกันดังในภาพร่างต่อไปนี้:

กราฟ

การใช้กราฟด้านบนสำหรับผลิตภัณฑ์ของผู้ขายที่ไม่ซ้ำกันทุกคนคุณสามารถเลือกเฉพาะผู้ซื้อที่สนใจคุณสมบัติที่ตรงกับผลิตภัณฑ์ (เป็นไปได้ที่จะกรองคุณลักษณะทั่วไปอย่างน้อยหนึ่งรายการจับคู่ชุดคุณลักษณะทั้งหมดหรือกำหนดระดับเกณฑ์) แต่แน่นอนว่ายังไม่เพียงพอ ขั้นตอนต่อไปคือการเปรียบเทียบค่าคุณลักษณะดังที่อธิบายโดยผู้ขายและผู้ซื้อ มีหลากหลายรูปแบบ (เช่น k- เพื่อนบ้านที่ใกล้ที่สุด) แต่ทำไมไม่ลองแก้คำถามนี้โดยใช้กราฟที่มีอยู่ ลองเพิ่มน้ำหนักให้กับขอบ:

  • สำหรับคุณสมบัติต่อเนื่อง (เช่นราคา):

    price_weight

  • สำหรับคุณสมบัติไบนารีและที่ไม่สามารถนับจำนวนได้ - เป็นเพียงเหตุผลแบบสองเงื่อนไข:

    feature_weight

แนวคิดหลักที่นี่คือการปรับขนาด[0, 1]คุณลักษณะทุกช่วงเวลา นอกจากนี้เราสามารถใช้สัมประสิทธิ์คุณลักษณะเพื่อกำหนดคุณสมบัติที่สำคัญที่สุด ตัวอย่างเช่นสมมติว่าราคามีความสำคัญเป็นสองเท่าของความพร้อมของฟังก์ชั่นที่หายาก:

adj_w_1

adj_w_2

หนึ่งในขั้นตอนสุดท้ายคือการทำให้โครงสร้างกราฟง่ายขึ้นและลดขอบจำนวนมากให้เป็นหนึ่งขอบที่มีน้ำหนักเท่ากับผลรวมของน้ำหนักที่คำนวณไว้ก่อนหน้าของแต่ละคุณสมบัติ ด้วยโครงสร้างที่ลดลงดังกล่าวลูกค้า / ผลิตภัณฑ์ทุกคู่จึงมีเพียงหนึ่งขอบเท่านั้น (ไม่มีขอบขนาน) ดังนั้นในการหาข้อตกลงที่ดีที่สุดสำหรับผู้ขายที่แน่นอนคุณต้องเลือกผู้ซื้อที่เชื่อมต่อกับขอบถ่วงน้ำหนักสูงสุด

ความท้าทายในอนาคต: แนะนำวิธีราคาถูกสำหรับการถ่วงน้ำหนักในขั้นตอนแรก :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.