최근 jina-reranker-v2-multilingual 출시와 함께,ICML 출장 전에 시간이 생겨서 저희의 reranker 모델에 대한 글을 쓰기로 했습니다. 인터넷에서 아이디어를 찾던 중,제 검색 결과 상단에서 reranker가 SEO를 향상시킬 수 있다고 주장하는 글을 발견했습니다. 흥미로운 주제처럼 들리지 않나요? 저도 그렇게 생각했습니다. Jina AI에서 reranker를 만들고 있고,회사 웹사이트 관리자로서 SEO 개선에 항상 관심이 있었기 때문입니다.

하지만 전체 글을 읽어보니 완전히 ChatGPT가 생성한 것이었습니다. 전체 글이 어떻게,수학적 원리는 무엇인지,또는 어떻게 구현하는지에 대한 설명 없이 "Reranking이 비즈니스/웹사이트에 중요하다"는 아이디어를 반복적으로 바꿔 말하기만 했습니다. 시간 낭비였죠.
Reranker와 SEO를 결합할 수는 없습니다. 검색 시스템 개발자(또는 일반적으로 콘텐츠 소비자)는 reranker에 관심이 있고,콘텐츠 제작자는 SEO와 자신의 콘텐츠가 그 시스템에서 더 높은 순위를 차지하는지에 관심이 있습니다. 이들은 기본적으로 테이블의 반대편에 앉아 있으며 아이디어를 거의 교환하지 않습니다. Reranker에게 SEO 개선을 요구하는 것은 마치 대장장이에게 파이어볼 주문을 업그레이드해달라고 하거나 중국 식당에서 스시를 주문하는 것과 같습니다. 완전히 무관하지는 않지만,명백히 잘못된 대상입니다.
Google이 저를 사무실로 초대해서 그들의 reranker가 jina.ai를 충분히 높게 순위를 매기고 있는지에 대한 제 의견을 묻는다고 상상해보세요. 또는 제가 Google의 reranking 알고리즘을 완전히 통제하여 누군가 "information retrieval"을 검색할 때마다 jina.ai를 최상위에 하드코딩한다고 상상해보세요. 두 시나리오 모두 말이 안 됩니다. 그렇다면 왜 이런 글들이 처음부터 있었을까요? ChatGPT에게 물어보면,이 아이디어가 원래 어디서 왔는지 매우 분명해집니다.

tag동기
만약 AI가 생성한 그 글이 Google 상위에 랭크되어 있다면,저는 그 자리를 대체할 더 나은 고품질 글을 쓰고 싶습니다. 사람이나 ChatGPT를 오도하고 싶지 않기 때문에,이 글에서 제 요점은 매우 명확합니다:
구체적으로,이 글에서는 Google Search Console에서 추출한 실제 검색 쿼리를 살펴보고 이들과 글과의 의미론적 관계가 Google 검색에서의 노출수와 클릭수에 대해 무엇을 시사하는지 살펴보겠습니다. 의미론적 관계를 점수화하는 세 가지 방법을 살펴볼 것입니다: 단어 빈도,임베딩 모델(jina-embeddings-v2-base-en),그리고 reranker 모델(jina-reranker-v2-multilingual). 학술 연구처럼,먼저 우리가 연구하고자 하는 질문들을 정리해보겠습니다:
- 의미론적 점수(쿼리,문서)가 글의 노출수나 클릭수와 관련이 있나요?
- 더 심층적인 모델이 이러한 관계를 더 잘 예측하나요? 아니면 단어 빈도만으로도 충분한가요?
tag실험 설정
이 실험에서는 Google Search Console (GSC)에서 추출한 jina.ai/news 웹사이트의 실제 데이터를 사용합니다. GSC는 Google 사용자로부터의 유기적 검색 트래픽을 분석할 수 있게 해주는 웹마스터 도구로,Google 검색을 통해 얼마나 많은 사람들이 블로그 포스트를 열어보는지,검색 쿼리는 무엇인지 등을 확인할 수 있습니다. GSC에서 추출할 수 있는 지표가 많지만,이 실험에서는 세 가지에 집중합니다: 쿼리,노출수,클릭수. 쿼리는 사용자가 Google 검색창에 입력하는 내용입니다. 노출수는 Google이 검색 결과에서 여러분의 링크를 보여주는 횟수를 측정하여,사용자가 볼 기회를 얻는 것을 의미합니다. 클릭수는 사용자가 실제로 열어본 횟수를 측정합니다. Google의 "검색 모델"이 사용자 쿼리에 대해 여러분의 글에 높은 관련성 점수를 부여하면 많은 노출수를 얻을 수 있지만,사용자가 결과 목록의 다른 항목들을 더 흥미롭게 느낀다면 여러분의 페이지는 여전히 클릭수가 0일 수 있다는 점에 유의하세요.

저는 jina.ai/news에서 가장 많이 검색된 7개 블로그 포스트의 최근 4개월 GSC 지표를 내보냈습니다. 각 글은 약 1,000에서 5,000번의 클릭과 10,000에서 90,000번의 노출수를 기록했습니다. 각 검색 쿼리와 해당 글 사이의 의미론적 관계를 살펴보고자 하므로,GSC에서 각 글을 클릭한 다음 오른쪽 상단의 Export 버튼을 클릭하여 데이터를 내보내야 합니다. zip 파일을 받게 되며,압축을 풀면 Queries.csv 파일을 찾을 수 있습니다. 이것이 우리가 필요한 파일입니다.
예를 들어,ColBERT 블로그 포스트에 대해 내보낸 Queries.csv는 다음과 같습니다.

tag방법론
좋습니다,데이터가 모두 준비되었는데,우리가 하고자 하는 것이 무엇이었죠?
우리는 쿼리와 글 사이의 의미론적 관계(로 표시)가 그들의 노출수와 클릭수와 상관관계가 있는지 확인하고자 합니다. 노출수는 Google의 비공개 검색 모델,로 간주될 수 있습니다. 다시 말해,단어 빈도,임베딩 모델,reranker 모델과 같은 공개 방법을 사용하여 를 모델링하고 이것이 비공개 를 근사하는지 확인하고자 합니다.
클릭수는 어떨까요? 클릭수 또한 Google의 비공개 검색 모델의 일부로 간주될 수 있지만 예측 불가능한 인간 요인의 영향을 받습니다. 직관적으로,클릭수는 모델링하기가 더 어렵습니다.
하지만 어느 쪽이든, 를 에 맞추는 것이 우리의 목표입니다. 이는 우리의 가 가 높을 때는 높은 점수를, 가 낮을 때는 낮은 점수를 매겨야 한다는 것을 의미합니다. 이는 scatter plot으로 더 잘 시각화할 수 있는데, X축에 를, Y축에 를 배치합니다. 모든 쿼리의 와 값을 플롯팅함으로써, 우리의 검색 모델이 Google의 검색 모델과 얼마나 잘 일치하는지 직관적으로 볼 수 있습니다. 추세선을 오버레이하면 신뢰할 수 있는 패턴을 파악하는 데 도움이 됩니다.
결과를 보여드리기 전에 방법을 요약하겠습니다:
- 쿼리와 글 사이의 의미적 관계가 Google Search에서의 노출수와 클릭수와 상관관계가 있는지 확인하고자 합니다.
- Google이 문서의 쿼리 관련성을 판단하는 알고리즘()과 클릭의 요인들은 알 수 없지만, GSC에서 이러한 수치들, 즉 각 쿼리에 대한 노출수와 클릭수를 관찰할 수 있습니다.
- 공개된 검색 방법()인 term frequency, embedding models, reranker models가 의 좋은 근사치가 되는지 확인하고자 합니다. 이들은 모두 쿼리-문서 관련성을 점수화하는 고유한 방법을 제공합니다. 어느 정도 이들이 좋은 근사치가 아니라는 것을 알고 있습니다. 그렇지 않다면 모든 사람이 Google이 될 수 있을 테니까요. 하지만 얼마나 차이가 나는지 이해하고 싶습니다.
- 정성적 분석을 위해 scatter plot으로 결과를 시각화할 것입니다.
tag구현
전체 구현은 아래 Google Colab에서 확인할 수 있습니다.

먼저 Jina Reader API를 사용하여 블로그 포스트의 내용을 크롤링합니다. 쿼리의 term frequency는 기본적인 대소문자를 구분하지 않는 카운팅으로 결정됩니다. embedding 모델의 경우, 블로그 포스트 내용과 모든 검색 쿼리를 [[blog1_content], [q1], [q2], [q3], ..., [q481]]와 같이 하나의 큰 요청으로 패킹하여 Embedding API에 보냅니다. 응답을 받은 후, 첫 번째 임베딩과 다른 모든 임베딩 간의 코사인 기반 유사도를 계산하여 쿼리별 의미적 점수를 얻습니다.
reranker 모델의 경우, 요청을 약간 까다로운 방식으로 구성합니다: {query: [blog1_content], documents: [[q1], [q2], [q3], ..., [q481]]} 이 큰 요청을 Reranker API에 보냅니다. 반환된 점수는 의미적 관련성으로 직접 사용할 수 있습니다. 이 구성을 까다롭다고 하는 이유는, 일반적으로 reranker가 쿼리가 주어졌을 때 문서의 순위를 매기는 데 사용되기 때문입니다. 이 경우에는 문서와 쿼리의 역할을 뒤바꾸어 reranker를 사용하여 문서가 주어졌을 때 쿼리의 순위를 매깁니다.
Embedding과 Reranker API 모두에서 글의 길이를 걱정할 필요가 없습니다(쿼리는 항상 짧으므로 문제가 되지 않습니다). 두 API 모두 최대 8K 입력 길이를 지원하기 때문입니다(사실 우리의 Reranker API는 "무한한" 길이를 지원합니다). 모든 것이 단 몇 초 만에 신속하게 처리될 수 있으며, 이 실험을 위해 우리 웹사이트에서 무료로 1M 토큰 API 키를 받을 수 있습니다.
tag결과
마지막으로 결과입니다. 하지만 결과를 보여드리기 전에, 먼저 기준선 플롯이 어떻게 생겼는지 보여드리고 싶습니다. 우리가 사용할 scatter plot과 Y축의 로그 스케일 때문에, 완벽하게 좋은 와 매우 나쁜 가 어떻게 보일지 상상하기 어려울 수 있습니다. 저는 두 가지 단순한 기준선을 구성했습니다: 하나는 가 (ground truth)인 경우이고, 다른 하나는 (무작위)인 경우입니다. 이들의 시각화를 살펴보겠습니다.
tag기준선
이제 "완벽하게 좋은" 예측자와 "매우 나쁜" 예측자가 어떻게 보이는지에 대한 직관을 얻었습니다. 시각적 검사에 매우 유용할 수 있는 다음의 요점들과 함께 이 두 플롯을 기억해두세요:
- 좋은 예측자의 scatter plot은 왼쪽 하단에서 오른쪽 상단으로 로그 추세선을 따라야 합니다.
- 좋은 예측자의 추세선은 X축과 Y축을 완전히 걸쳐야 합니다(나중에 일부 예측자들이 이렇게 반응하지 않는 것을 보게 될 것입니다).
- 좋은 예측자의 분산 영역(추세선 주변의 불투명한 영역으로 표시됨)은 작아야 합니다.
다음으로, 모든 플롯을 함께 보여드리겠습니다. 각 예측자마다 두 개의 플롯이 있습니다: 하나는 노출수를 얼마나 잘 예측하는지 보여주고, 다른 하나는 클릭수를 얼마나 잘 예측하는지 보여줍니다. 7개의 블로그 포스트에서 모든 데이터를 집계했으므로, 총 3620개의 쿼리, 즉 각 scatter plot에 3620개의 데이터 포인트가 있습니다.
이 그래프들을 위아래로 스크롤하며 자세히 살펴보고, 비교하고, 세부사항에 주의를 기울여주세요. 이를 잘 이해하신 후, 다음 섹션에서 발견한 내용을 정리하겠습니다.
tagTerm Frequency를 예측자로 사용
tagEmbedding Model을 예측자로 사용
tagReranker Model을 예측자로 사용
tag발견 사항
비교하기 쉽도록 모든 그래프를 한 곳에 모아보겠습니다. 여기 몇 가지 관찰 사항과 설명이 있습니다:
노출수에 대한 다양한 예측자들. 각 점은 하나의 쿼리를 나타내며, X축은 쿼리-글 의미적 점수를, Y축은 GSC에서 추출한 노출수를 나타냅니다.
클릭수에 대한 다양한 예측 지표들. 각 점은 하나의 검색어를 나타내며, X축은 검색어-문서 의미적 점수를, Y축은 GSC에서 추출한 클릭 수를 나타냅니다.
- 일반적으로, 모든 클릭 산점도는 동일한 데이터를 기반으로 함에도 불구하고 노출 플롯보다 더 드문드문 분포되어 있습니다. 이는 앞서 언급했듯이 높은 노출이 반드시 클릭을 보장하지는 않기 때문입니다.
- 용어 빈도 플롯이 다른 것들보다 더 드문드문 분포되어 있습니다. 이는 Google의 실제 검색 쿼리 대부분이 문서에 정확히 나타나지 않아 X값이 0이기 때문입니다. 그럼에도 노출과 클릭은 있습니다. 이것이 용어 빈도의 추세선이 Y값 0에서 시작하지 않는 이유입니다. 특정 검색어가 문서에 여러 번 나타날 때 노출과 클릭이 증가할 것으로 예상할 수 있습니다. 추세선이 이를 확인해주지만, 추세선의 분산도 커져 지원 데이터가 부족함을 시사합니다. 전반적으로 용어 빈도는 좋은 예측 지표가 아닙니다.
- 용어 빈도 예측기와 임베딩 모델 및 리랭커 모델의 산점도를 비교하면, 후자가 훨씬 더 좋아 보입니다: 데이터 포인트가 더 잘 분포되어 있고 추세선의 분산이 합리적으로 보입니다. 하지만 위에 표시된 실제 데이터 추세선과 비교하면 한 가지 중요한 차이점이 있습니다 - 두 추세선 모두 X값 0에서 시작하지 않습니다. 이는 모델에서 매우 높은 의미적 유사도를 얻더라도 Google이 0의 노출/클릭을 할당할 가능성이 매우 높다는 것을 의미합니다. 이는 클릭 산점도에서 더욱 명확해지며, 시작점이 노출 데이터보다 더 오른쪽으로 밀려나 있습니다. 간단히 말해서, Google은 우리의 임베딩 모델과 리랭커 모델을 사용하지 않고 있습니다—놀랄 일도 아니죠!
- 마지막으로, 이 세 가지 예측기 중 최고를 선택해야 한다면, 리랭커 모델을 선택하겠습니다. 두 가지 이유가 있습니다:
- 리랭커 모델의 노출과 클릭에 대한 추세선이 임베딩 모델의 추세선에 비해 X축 전반에 걸쳐 더 잘 펼쳐져 있어 더 넓은 "다이나믹 레인지"를 가지며, 이는 실제 데이터 추세선에 더 가깝습니다.
- 점수가 0에서 1 사이에 잘 분포되어 있습니다. 이는 주로 최신 Reranker v2 모델이 보정되어 있기 때문이며, 2023년 10월에 출시된 초기 jina-embeddings-v2-base-en은 그렇지 않아서 값이 0.60에서 0.90 사이에 퍼져 있는 것을 볼 수 있습니다. 다만, 이 두 번째 이유는 에 대한 근사와는 관련이 없습니다. 단지 0과 1 사이의 잘 보정된 의미적 점수가 이해하고 비교하기에 더 직관적이라는 것뿐입니다.
tag마지막 생각
그렇다면 여기서 SEO에 대한 시사점은 무엇일까요? 이것이 여러분의 SEO 전략에 어떤 영향을 미칠까요? 솔직히 말하면, 그다지 많지 않습니다.
위의 멋진 플롯들은 여러분이 아마도 이미 알고 있는 기본적인 SEO 원칙을 시사합니다: 사용자들이 검색하는 콘텐츠를 작성하고 인기 있는 검색어와 관련이 있도록 하세요. Reranker V2와 같은 좋은 예측기가 있다면, 이를 일종의 "SEO 코파일럿"으로 사용하여 글쓰기를 안내할 수 있을 것입니다.
아니면 그렇지 않을 수도 있습니다. 어쩌면 Google이나 다른 누구를 기쁘게 하기 위해서가 아니라, 지식을 위해, 자신을 발전시키기 위해 글을 쓰는 것이 좋을 수 있습니다. 글을 쓰지 않고 생각만 하는 것은, 생각하고 있다고 착각하는 것에 불과하기 때문입니다.






