ഉൽപ്പന്ന പൊരുത്തപ്പെടുത്തൽ: ഡിസ്കവറി സ്കോറിംഗ് ഉള്ള സെമാന്റിക് സാമ്യം

ഈ ലേഖനം എങ്ങനെയാണ് നാം തിരയൽ ക്വറി ക്ലസ്റ്ററുകളെ ഉൽപ്പന്നങ്ങൾ, ഭാഗങ്ങൾ, ലേഖനങ്ങൾ എന്നിവയുമായി സെമാന്റിക് സാമ്യം ഉപയോഗിച്ച് പൊരുത്തപ്പെടുത്തുന്നത് എന്ന് വിശദീകരിക്കുന്നു, ഇതിൽ പ്രസക്തി, ട്രാഫിക്, പേജ് റാങ്ക് എന്നിവ സന്തുലിതമാക്കുന്ന ഒരു ഓപ്ഷണൽ ഡിസ്കവറി സ്കോറിംഗ് മോഡൽ ഉൾപ്പെടുന്നു.

പ്രശ്നം: മികച്ച പൊരുത്തം കണ്ടെത്തൽ

ഉപയോക്താക്കൾ "മിനി പിസി" എന്ന് തിരയുമ്പോൾ, ഏത് ഉൽപ്പന്ന പേജാണ് ആ ക്വറിയെ ഏറ്റവും നന്നായി പ്രതിനിധീകരിക്കുന്നത് എന്ന് നാം നിർണ്ണയിക്കേണ്ടതുണ്ട്. നമുക്ക് ആയിരക്കണക്കിന് ഉൽപ്പന്നങ്ങളും ഭാഗങ്ങളും ലേഖനങ്ങളും ഉണ്ട്—ഏതാണ് നാം കാണിക്കേണ്ടത്?

ഒന്നിലധികം ഘടകങ്ങൾ സന്തുലിതമാക്കുക എന്നതാണ് വെല്ലുവിളി:

  • സെമാന്റിക് പ്രസക്തി: പേജ് ക്വറിയുടെ അർത്ഥത്തോട് എത്രത്തോളം പൊരുത്തപ്പെടുന്നു?

  • ക്വറി ട്രാഫിക്: ഈ ക്വറിക്ക് എത്രത്തോളം തിരയൽ ട്രാഫിക് ലഭിക്കുന്നു?

  • പേജ് ജനപ്രിയത: പേജിന് ഇതിനകം എത്രത്തോളം ട്രാഫിക് ലഭിക്കുന്നു?

ഒരു നിഷ്കപടമായ സമീപനം (ശുദ്ധമായ സെമാന്റിക് സാമ്യം) "മിനി പിസി"യെ പൂർണ്ണമായ സാമ്യമുള്ള എന്നാൽ പൂജ്യം ട്രാഫിക് ഉള്ള ഒരു അപ്രധാനമായ ഉൽപ്പന്നവുമായി പൊരുത്തപ്പെടുത്തിയേക്കാം. മൂന്ന് ഘടകങ്ങളും പരിഗണിക്കുന്ന ഒരു മികച്ച സമീപനം ആവശ്യമാണ്.

രണ്ട് പൊരുത്തപ്പെടുത്തൽ മോഡുകൾ

ഞങ്ങൾ രണ്ട് പൊരുത്തപ്പെടുത്തൽ മോഡുകൾ പിന്തുണയ്ക്കുന്നു:

1. ബൾക്ക് പൊരുത്തപ്പെടുത്തൽ (ഒറിജിനൽ)

ഓരോ ക്ലസ്റ്ററും സ്വതന്ത്രമായി അതിന്റെ മികച്ച പൊരുത്തം കണ്ടെത്തുന്നു. ഒന്നിലധികം ക്ലസ്റ്ററുകൾക്ക് ഒരേ പേജുമായി പൊരുത്തപ്പെടാം:

  • ക്ലസ്റ്റർ A: "മിനി പിസി" → ഉൽപ്പന്നം X (സാമ്യം 0.95)

  • ക്ലസ്റ്റർ B: "ചെറിയ കമ്പ്യൂട്ടർ" → ഉൽപ്പന്നം X (സാമ്യം 0.93)

  • ക്ലസ്റ്റർ C: "കോംപാക്റ്റ് ഡെസ്ക്ടോപ്പ്" → ഉൽപ്പന്നം X (സാമ്യം 0.91)

ഇത് അനാവശ്യത സൃഷ്ടിക്കുന്നു, എന്നാൽ ഓരോ ക്ലസ്റ്ററും അതിന്റെ മികച്ച പൊരുത്തം ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.

2. ഇറ്ററേറ്റീവ് എക്സ്ക്ലൂസീവ് റൗട്ടിംഗ് (1:1 മാപ്പിംഗ്)

ക്ലസ്റ്ററുകൾ ട്രാഫിക് സ്കോർ അനുസരിച്ച് (ഏറ്റവും ഉയർന്നത് ആദ്യം) പ്രോസസ്സ് ചെയ്യപ്പെടുന്നു. ഒരു പേജ് ക്ലെയിം ചെയ്യപ്പെട്ടാൽ, അത് പൂളിൽ നിന്ന് നീക്കം ചെയ്യപ്പെടുന്നു:

  • ക്ലസ്റ്റർ A (10K ട്രാഫിക്): "മിനി പിസി" → ഉൽപ്പന്നം X (ക്ലെയിം ചെയ്തു)

  • ക്ലസ്റ്റർ B (5K ട്രാഫിക്): "ചെറിയ കമ്പ്യൂട്ടർ" → ഉൽപ്പന്നം Y (X ലഭ്യമല്ല)

  • ക്ലസ്റ്റർ C (2K ട്രാഫിക്): "കോംപാക്റ്റ് ഡെസ്ക്ടോപ്പ്" → ഉൽപ്പന്നം Z (X, Y ലഭ്യമല്ല)

ഇത് അടുത്ത-മികച്ച പൊരുത്തങ്ങളിലേക്ക് സ്വയം പിൻവാങ്ങുന്ന യുക്തിസഹമായ ക്വറി പേജുകൾ സൃഷ്ടിക്കുന്നു.

അൽഗോരിതം: സെമാന്റിക് സാമ്യം

ഘട്ടം 1: എംബെഡ്ഡിംഗുകൾ ലോഡ് ചെയ്യുക

ഞങ്ങൾ മുൻകൂട്ടി കണക്കാക്കിയ എംബെഡ്ഡിംഗുകൾ ഇനിപ്പറയുന്നവയ്ക്കായി ലോഡ് ചെയ്യുന്നു:

  1. ക്വറി ക്ലസ്റ്ററുകൾ: ഓരോ ക്ലസ്റ്ററിൽ നിന്നുമുള്ള കേന്ദ്ര ക്വറി
  2. സോഴ്സ് പേജുകൾ: ഉൽപ്പന്നങ്ങൾ, ഭാഗങ്ങൾ, ലേഖനങ്ങൾ (ഘട്ടം 0-ൽ നിന്ന്)

രണ്ടും ഒരേ all-mpnet-base-v2 മോഡൽ ഉപയോഗിക്കുന്നു, താരതമ്യപ്പെടുത്താവുന്ന എംബെഡ്ഡിംഗുകൾ ഉറപ്പാക്കുന്നു.

ഘട്ടം 2: സാമ്യം കണക്കാക്കുക

ഓരോ ക്ലസ്റ്ററിനും, എല്ലാ സോഴ്സ് പേജുകളിലേക്കുള്ള കോസൈൻ സാമ്യം കണക്കാക്കുന്നു:

similarities = util.cos_sim(cluster_embedding, source_embeddings)[0]

ഇത് എല്ലാ സോഴ്സ് പേജിനും ഒരു സാമ്യ സ്കോർ (0.0 മുതൽ 1.0 വരെ) നൽകുന്നു.

ഘട്ടം 3: ഡിസ്കവറി സ്കോറിംഗ് പ്രയോഗിക്കുക (ഓപ്ഷണൽ)

ഡിസ്കവറി സ്കോറിംഗ് പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഞങ്ങൾ മൂന്ന് ഘടകങ്ങൾ സംയോജിപ്പിക്കുന്നു:

50:30:20 ഡിസ്കവറി സ്കോറിംഗ് മോഡൽ:

discovery_score = (similarity * 0.5) + (query_score * 0.3) + (page_rank * 0.2)

ഇവിടെ:

  • സാമ്യം (50%): സെമാന്റിക് പ്രസക്തി (കോസൈൻ സാമ്യം)

  • ക്വറി സ്കോർ (30%): നോർമലൈസ് ചെയ്ത ക്വറി ട്രാഫിക് (ഇംപ്രഷനുകൾ + ക്ലിക്കുകൾ)

  • പേജ് റാങ്ക് (20%): നോർമലൈസ് ചെയ്ത പേജ് ട്രാഫിക് (ലോഗരിഥമിക് സ്കെയിൽ)

ഇത് പ്രസക്തിയെ ട്രാഫിക് സാധ്യതയുമായി സന്തുലിതമാക്കുന്നു.

ഘട്ടം 4: സ്കോറുകൾ നോർമലൈസ് ചെയ്യുക

സംയോജിപ്പിക്കുന്നതിന് മുമ്പ്, ഓരോ ഘടകവും [0, 1] ലേക്ക് നോർമലൈസ് ചെയ്യുന്നു:

ക്വറി സ്കോർ നോർമലൈസേഷൻ:

max_query_score = max(cluster.total_score for cluster in clusters)
norm_query_score = query_score / max_query_score

പേജ് റാങ്ക് നോർമലൈസേഷൻ (ലോഗരിഥമിക്, ഉയർന്ന ട്രാഫിക് ഉള്ള പേജുകൾ ആധിപത്യം പുലർത്തുന്നത് തടയാൻ):

max_page_rank = max(traffic_index.values())
norm_page_rank = log1p(page_rank) / log1p(max_page_rank)

ലോഗരിഥമിക് സ്കെയിലിംഗ് എല്ലാ പേജുകൾക്കും ഒരു നീതിയുള്ള അവസരം നൽകുന്നതിന് പരിധി കംപ്രസ് ചെയ്യുന്നു.

ഘട്ടം 5: ചാസിസ് ബൂസ്റ്റ് പ്രയോഗിക്കുക (ഉൽപ്പന്നങ്ങൾക്ക് മാത്രം)

ഉൽപ്പന്ന പൊരുത്തങ്ങൾക്ക്, ചാസിസ് തരം അടിസ്ഥാനമാക്കി സ്കോറുകൾ ബൂസ്റ്റ് ചെയ്യുന്നു:

  • ട്രിയോ ചാസിസ്: +10% (ഏറ്റവും പുതിയതും ജനപ്രിയവുമായത്)

  • എസ്-ചാസിസ്: +5% (കോംപാക്റ്റ്, ഉയർന്ന ഡിമാൻഡ്)

  • എച്ച്-ചാസിസ്: ബൂസ്റ്റ് ഇല്ല (പഴയത്, കുറഞ്ഞ ജനപ്രിയത)

if matched_type == "product":
    sku = matched_key.replace("/p/", "")
    chassis_prefix = sku.split("-")[0]
    if chassis_prefix.startswith("Treo"):
        similarity *= 1.10
    elif chassis_prefix.startswith("S"):
        similarity *= 1.05

സാമ്യം അടുത്തിരിക്കുമ്പോൾ പുതിയ ഉൽപ്പന്നങ്ങൾക്ക് മുൻഗണന ലഭിക്കുന്നുവെന്ന് ഇത് ഉറപ്പാക്കുന്നു.

ഘട്ടം 6: മികച്ച പൊരുത്തം തിരഞ്ഞെടുക്കുക

ബൾക്ക് പൊരുത്തപ്പെടുത്തൽ:

best_idx = similarities.argmax()
if similarities[best_idx] >= threshold:
    matches.append(cluster → source_pages[best_idx])

എക്സ്ക്ലൂസീവ് റൗട്ടിംഗ്:

# ക്ലസ്റ്ററുകൾ ട്രാഫിക് അനുസരിച്ച് (ഉയർന്നത് ആദ്യം) സോർട്ട് ചെയ്യുക
sorted_clusters = sorted(clusters, key=lambda c: c.total_score, reverse=True)

# ... (ഇംപ്ലിമെന്റേഷൻ വിശദാംശങ്ങൾ ഒഴിവാക്കി)

കോൺഫിഗർ ചെയ്യാവുന്ന ത്രെഷോൾഡ്

പൊരുത്തപ്പെടുത്തൽ ത്രെഷോൾഡ് പൊരുത്തപ്പെടുത്തൽ എത്ര കർശനമാണ് എന്ന് നിർണ്ണയിക്കുന്നു:

  • 0.80 (ഡിഫോൾട്ട്): മിതമായ കർശനത, മിക്ക ക്ലസ്റ്ററുകളും പൊരുത്തപ്പെടുന്നു

  • 0.85: കൂടുതൽ കർശനം, കുറച്ച് എന്നാൽ ഉയർന്ന നിലവാരമുള്ള പൊരുത്തങ്ങൾ

  • 0.75: കൂടുതൽ ദയാപരം, കൂടുതൽ ക്ലസ്റ്ററുകൾ പൊരുത്തപ്പെടുന്നു

കോഡ് മാറ്റങ്ങളില്ലാതെ ത്രെഷോൾഡ് കോൺഫ