Zpět na domů

Sémantické vyhledávání Telegram: scraping a embeddingy

Článek popisuje vytvoření sémantického vyhledávání v milionech Telegram účtů. Použit scraping Common Crawl, captioning Gemma 3 4B pro avatary a ParadeDB pro hybridní vyhledávání. Projekt zahrnuje MTProto pro boty a bge-m3 embeddingy.

Globální semvyhledávání Telegram: 2,5M účtů
Advertisement 728x90

Realizace globálního semantického vyhledávání v kanálech a botech Telegramu

Vývojář vytvořil databázi milionů účtů v Telegramu, která zahrnuje skenování a zpracování dat pro semantické vyhledávání. Projekt je postaven na 14 mikroslužbách určených pro střední a pokročilé specialisty. Hlavním zaměřením je hybridní vyhledávání podle popisů, zpráv a profilových obrázků bez nutnosti nastavovat filtry.

Bylo shromážděno více než 2,5 milionu jedinečných uživatelských jmen z Common Crawl (16 TB indexu, zpracování prostřednictvím streamování na domácím počítači za týden). Platných: 800 tisíc kanálů, 124 tisíc skupin, 94 tisíc botů. Doplňkově byly přidány veřejné katalogy a odkazy z popisů.

Skenování dat

Skenování prostřednictvím rotujících proxy serverů pomocí platných uživatelských jmen (pravidelné výrazy). Ukládají se:

Google AdInline article slot
  • Jméno, popis, profilový obrázek (cache CDN odkazů).
  • Posledních 10–15 zpráv bez stránkování (typ, text; průměrná délka textu – 530 znaků).

Přesměrování zpráv se přidává do fronty. Statistika zpráv:

  • Text bez médií.
  • Obrázek s popiskem.
  • Zřídka: faktura, kontakt.

Pro bota: MTProto (grammers): ResolveUsername + GetFullUser pro získání popisu v rozhovoru a příkazů. Limity u ResolveUsername vyžadují opatrnost.

Zpracování okrajových případů:

Google AdInline article slot
  • Profilové obrázky s chybou 500 CDN (např. @magiskcnshare) – přeskakování po 3 pokusech.
  • Prázdné zprávy (@vlad_shoky_drum_school).
  • Profilový obrázek 3,5 MB (@vip_labels) – zvýšení limitu v Axum na 4 MB.

Zpracování obrázků

Semantické vyhledávání podle profilových obrázků prostřednictvím captioning (text místo multimodálních embeddingů pro experimenty).

Možnosti a ceny za 1 milion obrázků:

| Model | Cena ($) | Tokeny/obrázek | Stav |

Google AdInline article slot

|---------------------|----------|----------------|------|

| GPT-4o mini (nízká kvalita)| 138 | 85 | Drahé |

| Gemini 2.5 Flash-Lite| 26 | Nízké | Batch API nestabilní |

| Gemma 3 4B (vast.ai) | ~0,24/den | - | Vybráno: RTX 4090, 1 milion za 24 hodin |

Gemma 3 4B (7. místo v benchmarku Roboflow pro captioning) – open-source, lokální spuštění. Regenerace přes OpenRouter (15 $/milión).

Databáze a vyhledávání

Testovány:

  • Postgres + pg_vector: zkušenosti jsou, ale hybridní vyhledávání je obtížné ručně.
  • Elasticsearch: funkční, ale vysoké nároky na RAM (Java).

Volba: ParadeDB (Elastic-like vyhledávání na Postgres 18). Problém při aktualizaci Docker image – duplikáty v UNIQUE indexech, selhání zálohy. Řešení: vrácení z zálohy (pg_dump každý den).

Hybridní vyhledávání: klíčová slova + vektorové (semantické).

Generování embeddingů

Pro bota testováno text-embedding-3-large (0,13 $/M token), ale drahé při 1 milionu dokumentů po 4000 znacích (>130 $). Přechod na bge-m3 (vícejazyčné, MTEB benchmark).

OpenAI API pro 12 tisíc embeddingů – 0,03 $. Škálování na miliony prostřednictvím OpenRouter.

Důležité:

  • Shromážděno 800 tisíc+ kanálů s významem z popisů/zpráv.
  • Captioning profilových obrázků Gemma 3 4B – ekonomické a přesné.
  • ParadeDB pro hybridní vyhledávání bez Java stacku.
  • MTProto pro bota (riziko porušení ToS, ale pouze veřejné data).
  • Pravidelný růst databáze díky přesměrováním.

Projekt ukazuje end-to-end pipeline: skenování → zpracování → vektorové vyhledávání. Ideální pro prezentaci v rezumé (Big Data na milion řádcích).

— Editorial Team

Advertisement 728x90

Číst dál