TF-IDF를 검색하면 파이썬으로 직접 계산 코드를 짜는 데이터 분석 강의도 많이 나옵니다. 이 글은 검색엔진과 SEO 관점에서 TF-IDF를 다룹니다.
TF-IDF는 한 단어가 특정 문서에서 얼마나 자주 나오는지(TF)와 전체 문서 모음에서 얼마나 드물게 나오는지(IDF)를 곱해 그 단어의 중요도를 재는 정보 검색 지표입니다. 같은 단어라도 어떤 문서 모음을 기준으로 계산하느냐에 따라 점수가 달라집니다.
이 글은 스탠퍼드 정보검색 교과서(Introduction to Information Retrieval)와 Google 검색 센터의 스팸 정책을 기준으로 작성했습니다. Ahrefs, Semrush의 실무 자료와 Search Engine Journal이 보도한 구글 담당자 발언도 참고했습니다.
문서 안 단어 빈도와 전체 문서군의 희소성
TF(단어 빈도)는 한 문서 안에서 특정 단어가 얼마나 자주 나오는지를 봅니다. 문서가 길수록 어떤 단어든 등장 횟수가 늘어나기 쉬워서, 실제로는 등장 횟수를 그 문서의 전체 단어 수로 나눠 비교합니다.
IDF(역문서빈도)는 그 단어가 전체 문서 모음에서 얼마나 드문지를 봅니다. 이다, 있다, 합니다처럼 거의 모든 문서에 나오는 말은 IDF가 낮고, 특정 주제에서만 쓰는 전문용어는 IDF가 높습니다.
TF-IDF는 이 둘을 곱합니다. 자동차 부품 회사의 웹사이트 문서를 전부 모아 놓았다고 해보겠습니다. 자동차라는 단어는 거의 모든 문서에 나오니 IDF가 낮아서, 한 문서에 아무리 자주 나와도 TF-IDF 점수는 낮게 유지됩니다. 반면 하네스엔지니어링이라는 단어는 전체 문서 중 일부에서만 쓰이는데, 그 문서 안에서는 반복해서 등장한다면 TF와 IDF가 모두 높아 TF-IDF 점수가 크게 올라갑니다. 스탠퍼드 정보검색 교과서도 tf-idf 가중치를 한 문서에 자주 나오면서 소수의 문서에만 나오는 단어에 가장 높은 값을 주는 계산으로 정의합니다. 점수가 높을수록 그 단어가 해당 문서를 다른 문서와 구별 짓는 특징적인 단어라고 봅니다.
검색엔진 랭킹에서 TF-IDF의 위치
TF-IDF라는 이름 때문에 구글이 이 계산을 그대로 랭킹에 쓴다고 오해하기 쉽습니다. 하지만 존 뮬러의 2019년 TF-IDF 발언은 다릅니다.
2019년 4월 구글 웹마스터 행아웃에서 존 뮬러는 TF-IDF에 대해 "외부에서는 그대로 재현할 수 없는 지표"라고 말했습니다. 구글 색인 전체를 기준으로 계산되는 값이라 사이트 운영자가 같은 계산을 따라 할 수 없다는 뜻입니다. 뮬러는 이어서 TF-IDF가 "꽤 오래된 지표이고 그동안 다른 여러 지표와 함께 많이 발전했다"고 설명했고, "이론적인 지표 하나에만 매달려 그 단어들을 페이지에 억지로 끼워 넣는 것"은 근시안적인 접근이라고 경고했습니다.
Ahrefs의 용어사전도 같은 결론입니다. TF-IDF는 구글의 직접적인 랭킹 요소가 아니며, 최신 검색엔진은 더 정교한 방식을 쓰고 TF-IDF 하나에만 의존하면 지나치게 단순하고 조작하기도 쉽다고 설명합니다.
물론 도구를 파는 회사의 설명은 결이 다르기도 합니다. Semrush는 자사 블로그에서 TF-IDF의 변형이 검색엔진이 관련성을 이해하는 데 쓰는 가중치 요소로 활용된다고 서술합니다. 다만 이 문장은 Semrush의 해석이지 구글이나 다른 검색엔진이 공식적으로 확인한 내용은 아닙니다. 공식 발언과 도구 회사의 해석은 구분해서 볼 필요가 있습니다.
TF-IDF 최적화 도구가 실제로 하는 일
TF-IDF라는 이름을 건 SEO 도구는 대부분 같은 일을 합니다. 내 페이지와 특정 키워드로 상위 랭킹에 오른 경쟁 페이지들의 단어 사용 빈도를 비교해, 경쟁 페이지에는 자주 나오는데 내 페이지에는 빠진 단어를 보여주는 기능입니다. Semrush의 On Page SEO 체커도 키워드 사용 탭에서 이 비교표를 제공합니다.
이 기능 자체는 유용할 수 있습니다. 상위 문서들이 공통으로 다루는 용어를 놓쳤는지 점검하는 체크리스트로 쓸 수 있으니까요. 다만 두 가지는 분명히 해야 합니다. 도구가 제시한 단어를 본문에 채워 넣는다고 순위가 오른다는 보장은 없고, 빠진 단어를 억지로 반복해 채우면 키워드 스터핑이 될 수 있습니다. 소리 내어 읽었을 때 자연스러운 문장인지가 판단 기준이라는 점은 키워드 스터핑과 같습니다.
TF-IDF를 보완해 발전한 BM25
지금 검색 엔지니어링에서 실제로 많이 쓰는 것은 TF-IDF 자체보다 BM25입니다. BM25는 TF-IDF와 같은 기반, 즉 단어 빈도와 문서 희소성을 계산에 쓰지만 두 가지를 보완했습니다. 같은 단어가 반복될수록 추가 점수가 줄어들게 만드는 포화 처리와, 문서 길이에 따라 점수를 조정하는 정규화입니다. Elasticsearch의 공식 문서도 BM25를 TF와 IDF로 계산한 유사도에 빈도 정규화를 내장한 방식으로 설명합니다.
하이브리드 검색 글에서 설명한 어휘(키워드) 검색의 대표 구현이 바로 이 BM25 계열입니다. TF-IDF를 몰라도 BM25를 쓸 수 있지만, BM25의 계산 원리를 이해하려면 TF-IDF의 개념을 먼저 아는 편이 쉽습니다.
자주 묻는 질문
TF-IDF 점수가 높으면 검색 순위가 오르나요?
아니요. 존 뮬러가 밝혔듯 TF-IDF는 구글이 색인 전체를 기준으로 계산하는 오래된 지표라 사이트 운영자가 재현할 수 없고, Ahrefs도 구글의 직접적인 랭킹 요소가 아니라고 설명합니다. 점수를 올리는 것 자체를 목표로 삼지 않는 게 맞습니다.
TF-IDF 점수를 높이려고 단어를 반복해도 되나요?
권장하지 않습니다. 순위 조작을 목적으로 단어를 부자연스럽게 반복하면 키워드 스터핑에 해당할 수 있습니다. 도구가 보여주는 빠진 단어는 자연스럽게 설명이 필요한 주제인지 먼저 판단한 뒤에 반영하는 것이 안전합니다.
TF-IDF와 BM25는 같은 개념인가요?
아닙니다. BM25는 TF-IDF의 계산 방식에 빈도 포화와 문서 길이 정규화를 더한 발전형입니다. 지금의 검색엔진과 검색 인프라에서는 TF-IDF 원형보다 BM25 계열이 더 널리 쓰입니다.
TF-IDF는 SEO가 아닌 곳에서도 쓰이나요?
네. 텍스트 마이닝과 자연어 처리에서 문서 분류, 핵심어 추출, 추천 시스템에 폭넓게 쓰이는 기본 기법입니다. 이 글은 그중 검색엔진과 SEO 실무에 관련된 부분만 다뤘습니다.
함께 알아두면 좋은 용어
- 키워드 스터핑: TF-IDF 점수를 억지로 올리려다 걸리기 쉬운 순위 조작 행위
- 임베딩: 의미를 벡터로 표현해 TF-IDF와 다른 방식으로 문서를 비교하는 기법
- 하이브리드 검색: TF-IDF의 발전형인 BM25 계열과 의미 검색을 함께 쓰는 방식
- 시맨틱 검색: 단어 일치가 아니라 의미로 문서를 찾는, TF-IDF와 반대 축의 접근
- BERT: 신경망으로 단어 조합이 만드는 문맥을 이해하는 구글의 검색 기술
- 키워드 검색량: 검색어가 얼마나 자주 검색되는지 재는 수요 지표