7.1 TF-IDF를 활용한 콘텐츠 기반 필터링
콘텐츠 기반 필터링은 사용자가 선호하는 아이템의 콘텐츠를 바탕으로 한 사용자의 선호 이력이 없는 아이템들에 대한 콘텐츠의 유사도로 추천하는 방법입니다. 이는 아이템이 가진 콘텐츠로 아이템 프로필을 만들어 추천을 위해 사용자가 선호하는 아이템 프로필, 즉 사용자 프로필과의 유사성을 분석하여 높은 유사도를 가진 아이템을 추천하는 방법입니다. 여기에서는 아이템과 사용자의 프로필을 만들기 위해 TF-IDF를 사용합니다.
TF-IDF는 주어진 키워드와 가장 유사한 문서들의 순위를 결정하거나, 문서 내용이 유사한 문서들을 분류하기 위해 정보 검색이나 텍스트 마이닝 영역에서 자주 사용되는 접근 방법 중 하나입니다. TF값은 문서 내에서 특정 단어가 출현한 빈도수를 의미하고 주어진 단어가 문서 내에서 많이 출현할수록 상대적으로 더 중요하다고 가정합니다. 문서 크기에 따를 TF값의 편중 현상을 방지하기 위해 특정 단어의 출현 빈도수를 문서에서 나타난 모든 단어의 총출현 횟수로 나누어 사용합니다.
하지만 특정 단어의 TF값이 크다고 해서 이 단어가 해당 문서를 가장 잘 표현한다고 할 수는 없습니다. 예를 들어 문서 내용과 관련이 없는 특정 단어나 조사가 TF값이 크게 나올 수 있기 때문입니다. 이처럼 빈번하게 나타나지만, 문장을 구성하는 필수 요소지만 문맥상 큰 의미가 없는 단어를 불용어라고 하며 보통 분석 전에 미리 제거하게 됩니다. 이러한 TF값의 특성에 대한 해결 방법으로 IDF값을 사용합니다. IDF값은 전체 문서에서 특정한 단어가 포함된 문서가 얼마나 자주 등장하는지를 나타냅니다.
특정한 단어가 포함된 문서가 전체 문서에서 나타나는 문서 빈도(Document Frequency, 이하 DF)의 역수로, 역수는 값이 무한히 커질 수 있기 때문에 로그를 취합니다. 상대적으로 많은 문서에 출현한 단어는 IDF값이 작아지고, 특정 문서에 편중되어 나타난 단어는 IDF값이 커지게 됩니다. 즉, IDF값이 큰 단어는 문서 내에서 중요한 의미를 가지는 단어로 해당 문서를 잘 표현한다고 할 수 있습니다. 특정한 단어의 TF값과 IDF값을 곱한 TF-IDF값이 크다는 것은 다른 문서에 많이 나타나지 않고 해당 문서에 자주 나타나는 중요한 단어로써 평가될 수 있습니다. TF-IDF를 활용한 콘텐츠 기반 필터링은 각 아이템의 콘텐츠에 대한 TF-IDF 벡터인 아이템 프로필과 사용자가 선호하는 콘텐츠에 대한 TF-IDF 벡터인 사용자 프로필 간의 유사도를 이용하여 아이템을 추천하는 방법입니다. 여기에서는 유사도 계산 방법으로 코사인 유사도를 사용합니다.
-
TF
-
DF와 IDF
-
코사인 유사도
이 장에서 다루는 TF-IDF 콘텐츠 기반 필터링의 일반적인 절차는 다음과 같습니다.
-
단계 1. 아이템 프로필 생성
-
TF를 구한다.
-
IDF를 구한다.
-
TF-IDF를 구한다.
-
아이템별 계산된 TF-IDF를 단위 벡터(Unit Vector, 크기가 1인 벡터)로 정규화
-
-
단계 2. 평점 임계치를 기반한 사용자 프로필 생성
- 아이템 별 정규화된 TF-IDF에서 사용자가 평가한 아이템 중 임곗값 이상의 평점을 가지는 아이템을 대상으로 추천을 위한 대상 사용자(Target User)의 프로필을 만든다.
-
단계 3. 코사인 유사도 계산
- 사용자 프로필과 사용자가 평가하지 않은 아이템들에 대한 아이템 프로필 간의 코사인 유사도를 계산한다.
-
단계 4. 아이템을 추천
- 사용자가 평가하지 않은 아이템에 대한 아이템 프로필 중에서 프로필 유사도가 높은 순으로 아이템을 추천한다.
추천 시스템: 워크북
Comments
Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer.
Instead of authenticating the giscus application, you can also comment directly on GitHub.