ਸੰਬੰਧਿਤ ਖੋਜ ਜਨਰੇਸ਼ਨ: ਤਿੰਨ-ਟੀਅਰ ਸਮਾਨਤਾ ਮੈਚਿੰਗ

ਇਹ ਲੇਖ ਦੱਸਦਾ ਹੈ ਕਿ ਅਸੀਂ ਸਾਈਟ ਦੇ ਹਰੇਕ ਪੰਨੇ ਲਈ ਸੰਬੰਧਿਤ ਖੋਜ ਲਿੰਕ ਕਿਵੇਂ ਬਣਾਉਂਦੇ ਹਾਂ, ਇੱਕ ਤਿੰਨ-ਟੀਅਰ ਰਣਨੀਤੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਜੋ ਸਮਾਨਤਾ ਸੰਬੰਧਿਤਤਾ, ਟ੍ਰੈਫਿਕ ਵੰਡ, ਅਤੇ ਕੁਐਰੀ ਵਿਭਿੰਨਤਾ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰਦੀ ਹੈ।

ਸਮੱਸਿਆ: ਸੰਬੰਧਿਤ ਨੈਵੀਗੇਸ਼ਨ ਲਿੰਕ

ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਹੋਰ ਸਮੱਗਰੀ ਲੱਭਣ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ ਹਰੇਕ ਪੰਨੇ ਨੂੰ ਸੰਬੰਧਿਤ ਖੋਜ ਲਿੰਕਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਪਰ ਸਾਨੂੰ ਕਿਹੜੀਆਂ ਕੁਐਰੀਆਂ ਦਿਖਾਉਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ?

ਚੁਣੌਤੀ ਕਈ ਟੀਚਿਆਂ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰਨਾ ਹੈ:

  • ਸੰਬੰਧਿਤਤਾ: ਲਿੰਕ ਮੌਜੂਦਾ ਪੰਨੇ ਨਾਲ ਸਮਾਨਤਾ ਦੇ ਰੂਪ ਵਿੱਚ ਸੰਬੰਧਿਤ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ

  • ਟ੍ਰੈਫਿਕ ਵੰਡ: ਉੱਚ-ਟ੍ਰੈਫਿਕ ਕੁਐਰੀਆਂ ਉੱਚ-ਟ੍ਰੈਫਿਕ ਪੰਨਿਆਂ 'ਤੇ ਦਿਖਾਈ ਦੇਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ

  • ਕੁਐਰੀ ਵਿਭਿੰਨਤਾ: ਹਰੇਕ ਕੁਐਰੀ ਕਈ ਪੰਨਿਆਂ (10+ ਵਾਰ) 'ਤੇ ਦਿਖਾਈ ਦੇਣੀ ਚਾਹੀਦੀ ਹੈ

  • URL ਵਿਲੱਖਣਤਾ: ਇੱਕੋ ਮੰਜ਼ਿਲ 'ਤੇ ਦੋ ਵਾਰ ਲਿੰਕ ਨਾ ਕਰੋ

  • ਕਵਰੇਜ: ਹਰੇਕ ਪੰਨੇ ਦੇ 8 ਗੁਣਵੱਤਾ ਵਾਲੇ ਲਿੰਕ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ

ਇੱਕ ਸਿੱਧਾ-ਸਾਧਾ ਤਰੀਕਾ (ਸ਼ੁੱਧ ਸਮਾਨਤਾ ਸਮਾਨਤਾ) ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਹਰੇਕ ਪੰਨੇ 'ਤੇ ਇੱਕੋ ਜਿਹੀਆਂ ਕੁਐਰੀਆਂ ਦਿਖਾਉਂਦਾ ਹੋਵੇ। ਇੱਕ ਬਿਹਤਰ ਤਰੀਕਾ ਟ੍ਰੈਫਿਕ-ਅਵੇਅਰ ਪ੍ਰੋਸੈਸਿੰਗ ਦੇ ਨਾਲ ਤਿੰਨ-ਟੀਅਰ ਰਣਨੀਤੀ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।

ਤਿੰਨ-ਟੀਅਰ ਰਣਨੀਤੀ

ਅਸੀਂ ਘਟਦੀ ਸੰਬੰਧਿਤਤਾ ਦੇ ਤਿੰਨ ਟੀਅਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸੰਬੰਧਿਤ ਖੋਜਾਂ ਬਣਾਉਂਦੇ ਹਾਂ:

ਟੀਅਰ 1: ਸੰਬੰਧਿਤ ਖੋਜਾਂ (ਉੱਚ ਸਮਾਨਤਾ)

ਉੱਚ ਸਮਾਨਤਾ ਸੰਬੰਧਿਤ ਕੁਐਰੀਆਂ ਜੋ ਪੰਨੇ ਦੀ ਸਮੱਗਰੀ ਨਾਲ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਸੰਬੰਧਿਤ ਹਨ:

  • ਉਦਾਹਰਨ ਪੰਨਾ: "Treo N100 Mini PC"

  • ਉਦਾਹਰਨ ਕੁਐਰੀਆਂ: "n100 mini pc", "mini pc 8gb", "compact desktop n100"

ਇਹ ਸਭ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਬੰਧਿਤ ਮੈਚ ਹਨ।

ਟੀਅਰ 2: ਪ੍ਰਸਿੱਧ ਖੋਜਾਂ (ਮੱਧਮ ਸਮਾਨਤਾ)

ਮੱਧਮ ਸਮਾਨਤਾ ਵਾਲੀਆਂ ਕੁਐਰੀਆਂ ਜੋ ਵਿਸ਼ਾਗਤ ਰੂਪ ਵਿੱਚ ਸੰਬੰਧਿਤ ਹਨ ਪਰ ਘੱਟ ਵਿਸ਼ੇਸ਼ ਹਨ:

  • ਉਦਾਹਰਨ ਪੰਨਾ: "Treo N100 Mini PC"

  • ਉਦਾਹਰਨ ਕੁਐਰੀਆਂ: "mini pc", "small computer", "fanless pc"

ਇਹ ਇੱਕੋ ਸ਼੍ਰੇਣੀ ਵਿੱਚ ਵਿਆਪਕ ਕੁਐਰੀਆਂ ਹਨ।

ਟੀਅਰ 3: ਟ੍ਰੈਂਡਿੰਗ ਖੋਜਾਂ (ਫਾਲਬੈਕ)

ਗਲੋਬਲ ਪਾਵਰ ਕੁਐਰੀਆਂ (ਸਭ ਤੋਂ ਉੱਚਾ ਟ੍ਰੈਫਿਕ) ਜਦੋਂ ਸਮਾਨਤਾ ਮੈਚ ਖਤਮ ਹੋ ਜਾਂਦੇ ਹਨ ਤਾਂ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ:

  • ਉਦਾਹਰਨ ਪੰਨਾ: ਕੋਈ ਵੀ ਪੰਨਾ

  • ਉਦਾਹਰਨ ਕੁਐਰੀਆਂ: "mini pc", "thin client", "industrial pc", "all in one pc"

ਇਹ ਸਾਈਟ-ਵਿਆਪੀ ਤੌਰ 'ਤੇ ਸਭ ਤੋਂ ਪ੍ਰਸਿੱਧ ਕੁਐਰੀਆਂ ਹਨ।

ਐਲਗੋਰਿਦਮ: ਟ੍ਰੈਫਿਕ-ਫਸਟ ਪ੍ਰੋਸੈਸਿੰਗ

ਕਦਮ 1: ਸਾਰੇ ਪੰਨੇ ਇਕੱਠੇ ਕਰੋ

ਅਸੀਂ ਸਾਈਟ ਦੇ ਹਰੇਕ ਪੰਨੇ ਨੂੰ ਇਕੱਠਾ ਕਰਦੇ ਹਾਂ:

  • ਉਤਪਾਦ (/p/): ਕਦਮ 0 ਸਰੋਤ ਡੇਟਾ ਤੋਂ

  • ਭਾਗ (/i/): ਕਦਮ 0 ਸਰੋਤ ਡੇਟਾ ਤੋਂ

  • ਲੇਖ (/a/): ਕਦਮ 0 ਸਰੋਤ ਡੇਟਾ ਤੋਂ

  • ਪਰਿਵਾਰ (/f/): ਕਦਮ 0 ਸਰੋਤ ਡੇਟਾ ਤੋਂ

  • ਸ਼੍ਰੇਣੀਆਂ (/c/): ਕਦਮ 0 ਸਰੋਤ ਡੇਟਾ ਤੋਂ

  • ਕੁਐਰੀ ਪੰਨੇ (/q/): ਰੂਟਿੰਗ ਡੇਟਾ (ਕਦਮ 7) ਤੋਂ

  • ਸਥਿਰ ਪੰਨੇ: ਹੋਮ, ਬਾਰੇ, ਸੰਪਰਕ, ਆਦਿ।

ਇਹ ਆਮ ਤੌਰ 'ਤੇ ~64,000 ਪੰਨੇ ਦਿੰਦਾ ਹੈ।

ਕਦਮ 2: ਐਮਬੈਡਿੰਗ ਲੋਡ ਕਰੋ

ਅਸੀਂ ਪਹਿਲਾਂ ਤੋਂ ਗਣਨਾ ਕੀਤੀਆਂ ਐਮਬੈਡਿੰਗ ਲੋਡ ਕਰਦੇ ਹਾਂ:

  1. ਪੰਨੇ: ਕਦਮ 0 (ਉਤਪਾਦ, ਭਾਗ, ਲੇਖ) ਅਤੇ ਕਦਮ 6 (ਕੁਐਰੀ ਪੰਨੇ) ਤੋਂ ਮੁੜ ਵਰਤੋਂ ਕਰੋ
  2. ਕੁਐਰੀਆਂ: ਕਦਮ 3b (ਸਾਰੀਆਂ 65K ਕੁਐਰੀਆਂ) ਤੋਂ

ਐਮਬੈਡਿੰਗਾਂ ਦੀ ਮੁੜ ਵਰਤੋਂ ਬਦਲੇ ਨਾ ਗਏ ਡੇਟਾ ਨੂੰ ਦੁਬਾਰਾ ਐਮਬੈਡ ਕਰਨ ਤੋਂ ਬਚਾਉਂਦੀ ਹੈ:

  • ਕਦਮ 0 ਮੁੜ ਵਰਤੋਂ: ~5,000 ਉਤਪਾਦ/ਭਾਗ/ਲੇਖ ਐਮਬੈਡਿੰਗ

  • ਕਦਮ 6 ਮੁੜ ਵਰਤੋਂ: ~12,500 ਕੁਐਰੀ ਪੰਨਾ ਐਮਬੈਡਿੰਗ

  • ਨਵੀਆਂ ਐਮਬੈਡਿੰਗ: ~46,500 ਬਾਕੀ ਪੰਨੇ

ਕਦਮ 3: ਪੰਨਾ ਟ੍ਰੈਫਿਕ ਲੋਡ ਕਰੋ

ਅਸੀਂ ਪਿਛਲੇ 90 ਦਿਨਾਂ ਵਿੱਚ ਪੰਨਾ ਦ੍ਰਿਸ਼ਾਂ ਲਈ Athena ਨੂੰ ਕੁਐਰੀ ਕਰਦੇ ਹਾਂ:

traffic_data = generate_all_pages_traffic_index(lookback_days=90)

ਇਹ URL ਨੂੰ ਦੇਖਣ ਦੀ ਗਿਣਤੀ ਨਾਲ ਮੈਪਿੰਗ ਕਰਨ ਵਾਲਾ ਇੱਕ ਡਿਕਸ਼ਨਰੀ ਦਿੰਦਾ ਹੈ:

{
  "/p/Treo-N100-8-256-2H-W6-11P": 5000,
  "/q/mini-pc": 3000,
  "/": 50000
}

ਕਦਮ 4: ਟ੍ਰੈਫਿਕ ਦੁਆਰਾ ਪੰਨੇ ਕ੍ਰਮਬੱਧ ਕਰੋ

ਅਸੀਂ ਪੰਨਿਆਂ ਨੂੰ ਉਤਰਦੇ ਟ੍ਰੈਫਿਕ ਕ੍ਰਮ ਵਿੱਚ ਪ੍ਰੋਸੈਸ ਕਰਦੇ ਹਾਂ:

sorted_pages = sorted(all_pages, key=lambda p: page_traffic[p['url']], reverse=True)

ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਉੱਚ-ਟ੍ਰੈਫਿਕ ਪੰਨਿਆਂ ਨੂੰ ਕੁਐਰੀਆਂ ਦੀ ਪਹਿਲੀ ਚੋਣ ਮਿਲਦੀ ਹੈ।

ਕਦਮ 5: ਸਮਾਨਤਾ ਦੀ ਗਣਨਾ ਕਰੋ (ਬੈਚਡ)

ਅਸੀਂ ਮੈਮੋਰੀ ਦੀ ਕੁਸ਼ਲਤਾ ਲਈ 1,000 ਦੇ ਬੈਚਾਂ ਵਿੱਚ ਪੰਨੇ ਪ੍ਰੋਸੈਸ ਕਰਦੇ ਹਾਂ:

batch_page_embeddings = all_page_embeddings[batch_indices]
batch_similarities = util.cos_sim(batch_page_embeddings, query_embeddings)
# ... (ਲਾਗੂ ਕਰਨ ਦੇ ਵੇਰਵੇ ਛੱਡੇ ਗਏ)

ਇਹ ਬੈਚ ਲਈ ਇੱਕ ਸਮਾਨਤਾ ਮੈਟ੍ਰਿਕਸ ਪੈਦਾ ਕਰਦਾ ਹੈ।

ਕਦਮ 6: ਕੁਐਰੀਆਂ ਚੁਣੋ (ਤਿੰਨ-ਟੀਅਰ)

ਹਰੇਕ ਪੰਨੇ ਲਈ, ਅਸੀਂ ਤਿੰਨ-ਟੀਅਰ ਰਣਨੀਤੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੁਐਰੀਆਂ ਚੁਣਦੇ ਹਾਂ:

ਟੀਅਰ 1: ਉੱਚ ਸਮਾਨਤਾ

for idx, similarity in enumerate(sorted_similarities):
    if similarity < threshold_high:
        break
# ... (ਲਾਗੂ ਕਰਨ ਦੇ ਵੇਰਵੇ ਛੱਡੇ ਗਏ)

ਟੀਅਰ 2: ਮੱਧਮ ਸਮਾਨਤਾ (0.60-0.85)

if len(selected_queries) < 8:
    for idx, similarity in enumerate(sorted_similarities):
        if similarity < 0.60:
            break
        if try_add_query(queries[idx]):
            continue

ਟੀਅਰ 3: ਪਾਵਰ ਕੁਐਰੀਆਂ (ਫਾਲਬੈਕ)

if len(selected_queries) < 8:
    for power_query in power_query_list:
        if try_add_query(power_query):
            continue

ਕਦਮ 7: ਬੰਦਸ਼ਾਂ ਨੂੰ ਲਾਗੂ ਕਰੋ

try_add_query() ਫੰਕਸ਼ਨ ਕਈ ਬੰਦਸ਼ਾਂ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ:

ਕੁਐਰੀ ਵਰਤੋਂ ਕੈਪ (10 ਦਿੱਖ)

if query_usage[query] >= MAX_APPEARANCES:
    return False

URL ਵਿਲੱਖਣਤਾ (ਕੋਈ ਡੁਪਲੀਕੇਟ ਮੰਜ਼ਿਲਾਂ ਨਹੀਂ)

url = get_dest_url(query)
if url in selected_urls:
    return False
selected_urls.add(url)

ਸਵੈ-ਲਿੰਕ ਰੋਕਥਾਮ

selected_urls = {page_url}  # ਮੌਜੂਦਾ ਪੰਨੇ ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ

8 ਲਿੰਕਾਂ ਤੱਕ ਸੀਮਾ

if len(selected_queries) >= 8:
    return False

ਕਦਮ 8: ਕੁਐਰੀਆਂ ਨੂੰ URL ਵਿੱਚ ਬਦਲੋ

ਅਸੀਂ ਕੁਐਰੀਆਂ ਨੂੰ ਮੰਜ਼ਿਲ URL ਵਿੱਚ ਬਦਲਣ ਲਈ ਕਦਮ 7 ਤੋਂ ਰੂਟਿੰਗ ਡੇਟਾ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ:

query_to_url_map = {}
for route in routing_data['routes']:
    for query in route['queries']:
        query_to_url_map[query] = route['destination']

ਇਹ ਕੁਐਰੀ ਮੰਜ਼ਿਲਾਂ ਲਈ ਤੇਜ਼ O(1) ਖੋਜ ਬਣਾਉਂਦਾ ਹੈ।

ਕਦਮ 9: ਭਾਸ਼ਾ ਪ੍ਰਸਾਰਣ (ਵਿਕਲਪਿਕ)

ਜੇ ਭਾਸ਼ਾ ਪ੍ਰਸਾਰਣ ਸਮਰੱਥ ਹੈ, ਤਾਂ ਅਸੀਂ URL ਨੂੰ ਕੁਐਰੀ ਭਾਸ਼ਾ ਜੋੜਦੇ ਹਾਂ:

lang = detect_query_language(query)
if lang != "en":
    url = f"{url}?lang={lang}"

ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਉਪਭੋਗਤਾ ਸੰਬੰਧਿਤ ਖੋਜਾਂ 'ਤੇ ਕਲਿਕ ਕਰਨ ਸਮੇਂ ਆਪਣੀ ਪਸੰਦੀਦਾ ਭਾਸ਼ਾ ਵਿੱਚ ਰਹਿੰਦੇ ਹਨ।

ਕਦਮ