ಉತ್ಪನ್ನ ಹೊಂದಾಣಿಕೆ: ಡಿಸ್ಕವರಿ ಸ್ಕೋರಿಂಗ್ ಹೊಂದಿರುವ ಸೆಮ್ಯಾಂಟಿಕ್ ಸಾದೃಶ್ಯತೆ

ಈ ಲೇಖನವು ಹುಡುಕಾಟ ಪ್ರಶ್ನೆಗಳ ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ಉತ್ಪನ್ನಗಳು, ಪಾರ್ಟ್ಗಳು ಮತ್ತು ಲೇಖನಗಳಿಗೆ ಹೇಗೆ ಹೊಂದಿಸುತ್ತೇವೆ ಎಂಬುದನ್ನು ಸೆಮ್ಯಾಂಟಿಕ್ ಸಾದೃಶ್ಯತೆ ಮತ್ತು ಸಂಬಂಧಿತತೆ, ಟ್ರಾಫಿಕ್ ಮತ್ತು ಪುಟ ರ್ಯಾಂಕ್ ಅನ್ನು ಸಮತೋಲನಗೊಳಿಸುವ ಐಚ್ಛಿಕ ಡಿಸ್ಕವರಿ ಸ್ಕೋರಿಂಗ್ ಮಾದರಿಯನ್ನು ಬಳಸಿ ವಿವರಿಸುತ್ತದೆ.

ಸಮಸ್ಯೆ: ಅತ್ಯುತ್ತಮ ಹೊಂದಾಣಿಕೆಯನ್ನು ಕಂಡುಹಿಡಿಯುವುದು

ಬಳಕೆದಾರರು "ಮಿನಿ ಪಿಸಿ" ಎಂದು ಹುಡುಕಿದಾಗ, ಆ ಪ್ರಶ್ನೆಗೆ ಯಾವ ಉತ್ಪನ್ನ ಪುಟವು ಉತ್ತಮವಾಗಿ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಬೇಕಾಗುತ್ತದೆ. ನಮ್ಮಲ್ಲಿ ಸಾವಿರಾರು ಉತ್ಪನ್ನಗಳು, ಪಾರ್ಟ್ಗಳು ಮತ್ತು ಲೇಖನಗಳಿವೆ—ಯಾವುದನ್ನು ತೋರಿಸಬೇಕು?

ಪ್ರಮುಖ ಸವಾಲೆಂದರೆ ಬಹು ಅಂಶಗಳನ್ನು ಸಮತೋಲನಗೊಳಿಸುವುದು:

  • ಸೆಮ್ಯಾಂಟಿಕ್ ಸಂಬಂಧಿತತೆ: ಪುಟವು ಪ್ರಶ್ನೆಯ ಅರ್ಥಕ್ಕೆ ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ?

  • ಪ್ರಶ್ನೆ ಟ್ರಾಫಿಕ್: ಈ ಪ್ರಶ್ನೆಗೆ ಎಷ್ಟು ಹುಡುಕಾಟ ಟ್ರಾಫಿಕ್ ಸಿಗುತ್ತದೆ?

  • ಪುಟದ ಜನಪ್ರಿಯತೆ: ಪುಟವು ಈಗಾಗಲೇ ಎಷ್ಟು ಟ್ರಾಫಿಕ್ ಪಡೆಯುತ್ತಿದೆ?

ಒಂದು ಸರಳ ವಿಧಾನ (ಶುದ್ಧ ಸೆಮ್ಯಾಂಟಿಕ್ ಸಾದೃಶ್ಯತೆ) "ಮಿನಿ ಪಿಸಿ" ಅನ್ನು ಪರಿಪೂರ್ಣ ಸಾದೃಶ್ಯತೆ ಆದರೆ ಶೂನ್ಯ ಟ್ರಾಫಿಕ್ ಹೊಂದಿರುವ ಅಪರಿಚಿತ ಉತ್ಪನ್ನಕ್ಕೆ ಹೊಂದಿಸಬಹುದು. ಒಂದು ಉತ್ತಮ ವಿಧಾನವು ಎಲ್ಲಾ ಮೂರು ಅಂಶಗಳನ್ನು ಪರಿಗಣಿಸುತ್ತದೆ.

ಎರಡು ಹೊಂದಾಣಿಕೆ ಮೋಡ್ಗಳು

ನಾವು ಎರಡು ಹೊಂದಾಣಿಕೆ ಮೋಡ್ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತೇವೆ:

1. ಬಲ್ಕ್ ಹೊಂದಾಣಿಕೆ (ಮೂಲ)

ಪ್ರತಿ ಕ್ಲಸ್ಟರ್ ಸ್ವತಂತ್ರವಾಗಿ ಅದರ ಅತ್ಯುತ್ತಮ ಹೊಂದಾಣಿಕೆಯನ್ನು ಕಂಡುಕೊಳ್ಳುತ್ತದೆ. ಬಹು ಕ್ಲಸ್ಟರ್ಗಳು ಒಂದೇ ಪುಟಕ್ಕೆ ಹೊಂದಿಕೊಳ್ಳಬಹುದು:

  • ಕ್ಲಸ್ಟರ್ ಎ: "ಮಿನಿ ಪಿಸಿ" → ಉತ್ಪನ್ನ ಎಕ್ಸ್ (ಸಾದೃಶ್ಯತೆ 0.95)

  • ಕ್ಲಸ್ಟರ್ ಬಿ: "ಸಣ್ಣ ಕಂಪ್ಯೂಟರ್" → ಉತ್ಪನ್ನ ಎಕ್ಸ್ (ಸಾದೃಶ್ಯತೆ 0.93)

  • ಕ್ಲಸ್ಟರ್ ಸಿ: "ಕಾಂಪ್ಯಾಕ್ಟ್ ಡೆಸ್ಕ್ಟಾಪ್" → ಉತ್ಪನ್ನ ಎಕ್ಸ್ (ಸಾದೃಶ್ಯತೆ 0.91)

ಇದು ಪುನರಾವರ್ತನೆಯನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ ಆದರೆ ಪ್ರತಿ ಕ್ಲಸ್ಟರ್ಗೆ ಅದರ ಅತ್ಯುತ್ತಮ ಹೊಂದಾಣಿಕೆ ಸಿಗುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

2. ಪುನರಾವರ್ತಿತ ವಿಶಿಷ್ಟ ಮಾರ್ಗನಿರ್ದೇಶನ (1:1 ಮ್ಯಾಪಿಂಗ್)

ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ಟ್ರಾಫಿಕ್ ಸ್ಕೋರ್ (ಹೆಚ್ಚಿನದು ಮೊದಲು) ಮೂಲಕ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ. ಒಮ್ಮೆ ಪುಟವನ್ನು ಹಿಡಿದುಕೊಂಡ ನಂತರ, ಅದನ್ನು ಪೂಲ್ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ:

  • ಕ್ಲಸ್ಟರ್ ಎ (10ಕೆ ಟ್ರಾಫಿಕ್): "ಮಿನಿ ಪಿಸಿ" → ಉತ್ಪನ್ನ ಎಕ್ಸ್ (ಹಿಡಿದುಕೊಂಡಿದೆ)

  • ಕ್ಲಸ್ಟರ್ ಬಿ (5ಕೆ ಟ್ರಾಫಿಕ್): "ಸಣ್ಣ ಕಂಪ್ಯೂಟರ್" → ಉತ್ಪನ್ನ ವೈ (ಎಕ್ಸ್ ಲಭ್ಯವಿಲ್ಲ)

  • ಕ್ಲಸ್ಟರ್ ಸಿ (2ಕೆ ಟ್ರಾಫಿಕ್): "ಕಾಂಪ್ಯಾಕ್ಟ್ ಡೆಸ್ಕ್ಟಾಪ್" → ಉತ್ಪನ್ನ ಝಡ್ (ಎಕ್ಸ್, ವೈ ಲಭ್ಯವಿಲ್ಲ)

ಇದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮುಂದಿನ-ಅತ್ಯುತ್ತಮ ಹೊಂದಾಣಿಕೆಗಳಿಗೆ ಪತನವಾಗುವ ವಿಶಿಷ್ಟ ಪ್ರಶ್ನೆ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.

ಅಲ್ಗಾರಿದಮ್: ಸೆಮ್ಯಾಂಟಿಕ್ ಸಾದೃಶ್ಯತೆ

ಹಂತ 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: ಹೆಚ್ಚು ಸಡಿಲ, ಹೆಚ್ಚಿನ ಕ್ಲಸ್ಟರ್ಗಳು ಹೊಂದಿಕೊಳ್ಳುತ್ತವೆ

ಮಿತಿಯನ್ನು ಕೋಡ್ ಬದಲಾವಣೆಗಳಿಲ್ಲದೆ ಸಂರಚನಾ ಫೈಲ್ ಮೂಲಕ ಸರಿಹೊಂದಿಸಬಹುದು.

ಮಿತಿ ವಿಶ್ಲೇಷಣೆ ಮೋಡ್

ಪೂರ್ಣ ಪೈಪ್ಲೈನ್ ಚಲಾಯಿಸುವ ಮೊದಲು, ನಾವು ಮಿತಿಯ ಪ್ರಭಾವವನ್ನು ವಿಶ್ಲೇಷಿಸಬಹುದು:

python 6_match_source_data.py --analyze-threshold

ಇದು ಸಾದೃಶ್ಯತೆ ಶ್ರೇಣಿಗಳಾದ್ಯಂತ ಮಾದರಿಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ:

  • 0.90-1.00: ಪರಿಪೂರ್ಣ ಹೊಂದಾಣಿಕೆಗಳು

  • 0.80-0.90: ಬಲವಾದ ಹೊಂದಾಣಿಕೆಗಳು

  • 0.70-0.80: ಮಧ್ಯಮ ಹೊಂದಾಣಿಕೆಗಳು

  • 0.60-0.70: ದುರ್ಬಲ ಹೊಂದಾಣಿಕೆಗಳು

  • 0.50-0.60: ಬಹಳ ದುರ್ಬಲ ಹೊಂದಾಣಿಕೆಗಳು

  • 0.40-0.50: ಕಳಪೆ ಹೊಂದಾಣಿಕೆಗಳು

ಒಂದು ವೆಬ್ ಯುಐ ಈ ಮಾದರಿಗಳನ್ನು ಕೈಯಾರೆ ಪರಿಶೀಲನೆಗೆ ಪ್ರದರ್ಶಿಸುತ್ತದೆ. ಮಿತಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ ನಂತರ, ಪೈಪ್ಲೈನ್ ಮುಂದುವರಿಸಿ:

python 6_match_source_data.py --resume-after-threshold

ಇದು ಯುಐ ನಿರ್ಧಾರದಿಂದ ಮಿತಿಯನ್ನು ಲೋಡ್ ಮಾಡಿ ಹೊಂದಾಣಿಕೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುತ್ತದೆ.

ಹೆಚ್ಚಳಕಾರಿ ಎಂಬೆಡ್ಡಿಂಗ್

ನಾವು ಪ್ರಶ್ನೆಗಳು ಮತ್ತು ಮೂಲ ಪುಟಗಳ ಎರಡಕ್ಕೂ ಎಂಬೆಡ್ಡಿಂಗ್ಗಳನ್ನು ಕ್ಯಾಶ್ ಮಾಡುತ್ತೇವೆ. ಹೊಸ ಡೇಟಾ ಬಂದಾಗ:

  1. ಅಸ್ತಿತ್ವದಲ್ಲಿರ