본문 바로가기
빅데이터 분석기사

빅데이터 분석에서 많이 쓰는 기법 TF-IDF란? | TF-IDF 방법 | TF-IDF 예시 | 비판점

by 공불러 2023. 5. 27.
728x90
반응형

빅데이터 분석에서 많이 쓰는 기법 TF-IDF란? | TF-IDF 방법 | TF-IDF 예시

TF-IDF기법

TF-IDF는 "Term Frequency-Inverse Document Frequency"의 약어로, 텍스트 데이터에서 각 단어의 중요도를 계산하는 방법입니다. 이 방법은 정보 검색과 텍스트 마이닝 분야에서 널리 사용되며, 특정 문서에서 어떤 단어가 얼마나 중요한지를 나타냅니다.

 

목차

    TF-IDF란?

    TF-IDF란?

    TF(Term Frequency)는 특정 문서 내에서 단어가 얼마나 자주 등장하는지를 나타내는 지표입니다. 한 문서 내에서 많이 등장하는 단어는 해당 문서에서 중요한 역할을 할 수 있습니다. 일반적으로는 문서 내에서 단어의 출현 빈도를 단순히 계산합니다.

    IDF(Inverse Document Frequency)는 단어의 전체 문서 집합에서 얼마나 희귀한 단어인지를 나타내는 지표입니다. 한 단어가 전체 문서에서 희귀하게 나타날수록 해당 단어는 다른 문서들과 구별되는 중요한 의미를 지닐 가능성이 높습니다. IDF는 전체 문서 수를 해당 단어가 포함된 문서 수로 나눈 뒤, 로그를 취하여 계산합니다.

    TF-IDF는 TF와 IDF를 곱하여 단어의 중요도를 계산합니다. 특정 문서에서 자주 등장하면서 전체 문서에서는 희귀한 단어일수록 TF-IDF 값이 높아집니다. 이를 통해 텍스트 데이터에서 특정 단어의 중요도를 평가하고, 문서 간의 단어 비교와 검색에서 사용할 수 있습니다.

     

     

     

    TF-IDF 예시

    TF-IDF 예시

     

    문서안에서의 각 단어의 중요성 예시

    단어  문서 1 문서 2 문서 3 DF
    (문서 빈도)
    IDF
    (역문서 빈도)
    TF-IDF
    (단어별 점수)
    apple 3 0 1 2 log(3/2) = 0.1761 0.5283
    banana 2 1 0 2 log(3/2) = 0.1761 0.3522
    cat 1 2 1 3 log(3/3) = 0 0
    dog 2 3 0 2 log(3/2) = 0.1761 0.3522
    elephant 0 2 1 2 log(3/2) = 0.1761 0.3522

    위 예시에서는 문서 집합이 3개의 문서로 구성되어 있습니다. 단어 "apple"은 문서 1에서 3회문서 2에서 0회, 문서 3에서 1회 등장하였으며, 이 단어의 DF는 2입니다. IDF는 전체 문서 수를 해당 단어의 DF로 나눈 값으로, log(3/2) ≈ 0.1761입니다. 마지막으로 TF-IDF는 각 문서에서의 단어 빈도수(TF)와 IDF를 곱한 값으로 계산되며, 이를 통해 각 단어의 상대적인 중요성을 알 수 있습니다.

     

    위 내용을 현실성있게 가져와 SNS 상에서 사용자들이 어떤 관심이 있는지 확인해보는 방법으로 예시를 들어 보겠습니다.

    페이스북의 사용자들이 어떤 해시태그를 많이 쓰는지 확인한다고 가정하겠습니다.

     

    다음과 같은 4개의 게시글을 분석한 경우 입니다.

    철수의 게시글: "I love cats and dogs."
    영희의 게시글: "Traveling is my passion."
    민지의 게시글: "Food makes me happy."
    민수의 게시글: "I enjoy playing with my pets."

     

    단어 철수 영희 민지 민수 DF
    (게시글 빈도)
    IDF
    (역게시글 빈도)
    TF-IDF
    (단어별 점수)
    I 1 0 0 1 2 log(4/2) = 0.6931 0.6931
    love 1 0 0 0 1 log(4/1) = 1.3863 1.3863
    cats 1 0 0 1 2 log(4/2) = 0.6931 0.6931
    dogs 1 0 0 0 1 log(4/1) = 1.3863 1.3863
    traveling 0 1 0 0 1 log(4/1) = 1.3863 1.3863
    passion 0 1 0 0 1 log(4/1) = 1.3863 1.3863
    food 0 0 1 0 1 log(4/1) = 1.3863 1.3863
    makes 0 0 1 0 1 log(4/1) = 1.3863 1.3863
    happy 0 0 1 0 1 log(4/1) = 1.3863 1.3863
    enjoy 0 0 0 1 1 log(4/1) = 1.3863 1.3863
    playing 0 0 0 1 1 log(4/1) = 1.3863 1.3863

     

    TF-IDF 점수가 높을수록 해당 단어가 특정 게시글에서 중요한 역할하기 떄문에 위 예시는 썩 좋지는 않습니다. 단어별 점수(tf-idf)가 높은 것이 많기 때문입니다.반대로 상대적 중요성이 떨어지는 단어는 I와 cats임을 알 수 있습니다.

    페이스북에서 사용자들의 관심사를 분석하는 방법 예시

     

    페이스북에서 TF-IDF를 활용한 예시를 들어보겠습니다. 가정해보겠습니다. 페이스북에서는 사용자들이 게시글을 작성하고, 사용자들은 관심사에 맞게 게시글을 탐색할 수 있습니다. 이때 TF-IDF를 사용하여 사용자의 관심사와 게시글의 관련성을 평가하는데 활용될 수 있습니다.

    다음은 TF-IDF를 사용하여 게시글과 사용자의 관심사 간의 관련성을 평가하는 예시 표입니다.

     

     

    단어 게시글
    (TF)
    게시글 2
    (TF)
    게시글 3
    (TF)
    관심사
    (TF)
    DF
    (게시글 빈도)
    IDF
    (역게시글 빈도)
    TF-IDF
    (단어별 점수)
    고양이 3 1 0 2 3 log(3/3) = 0 0
    강아지 2 0 1 3 3 log(3/3) = 0 0
    여행 1 2 1 0 3 log(3/3) = 0 0
    음식 2 3 0 1 3 log(3/3) = 0 0

     

     

    TF-IDF 방법(파이썬)

    TF-IDF 방법(파이썬)

    파이썬에서 TF-IDF를 구현하는 예시를 보여드리겠습니다. TF-IDF를 계산하기 위해 scikit-learn 라이브러리를 사용할 것입니다. 먼저, TfidfVectorizer 클래스를 사용하여 TF-IDF를 계산하는 예시 코드를 작성해보겠습니다.

     

    페이스북에서 TF-IDF 분석 하는 예시 1

     

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    # 문서 집합
    documents = [
        "This is the first document.",
        "This document is the second document.",
        "And this is the third one.",
        "Is this the first document?",
    ]
    
    # TfidfVectorizer 객체 생성
    vectorizer = TfidfVectorizer()
    
    # TF-IDF 피처 벡터화
    tfidf_matrix = vectorizer.fit_transform(documents)
    
    # 단어 목록
    words = vectorizer.get_feature_names()
    
    # 문서별 단어별 TF-IDF 점수 출력
    for i in range(len(documents)):
        doc = documents[i]
        scores = tfidf_matrix[i].toarray().flatten()
        print("Document:", doc)
        for j in range(len(words)):
            word = words[j]
            score = scores[j]
            print("Word:", word, "TF-IDF Score:", score)
        print()

    위의 코드는 4개의 문서를 가지고 TF-IDF를 계산하는 예시입니다. 문서 집합은 documents 변수에 리스트로 저장되어 있습니다. TfidfVectorizer 객체를 생성한 후 fit_transform() 메서드를 사용하여 TF-IDF 피처 벡터화를 수행합니다. 이후, 단어 목록을 가져오고, 각 문서와 단어의 TF-IDF 점수를 출력합니다.

    실행 결과는 각 문서별로 단어와 해당 단어의 TF-IDF 점수가 출력됩니다. TF-IDF 점수가 높을수록 해당 단어가 문서에서 중요한 역할을 하는 것을 나타냅니다.

    이 예시 코드를 실행하면 실제 문서에 대한 TF-IDF 점수를 확인할 수 있습니다.

     

    페이스북에서 TF-IDF 분석 예시 2

    페이스북에서 TF-IDF를 구현하는 예시 코드를 보여드리겠습니다. 이 예시에서는 페이스북 게시글과 사용자의 관심사 간의 관련성을 평가하기 위해 TF-IDF를 활용합니다.

     

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    # 페이스북 게시글
    posts = [
        "I love cats and dogs.",
        "Traveling is my passion.",
        "Food makes me happy.",
        "I enjoy playing with my pets.",
    ]
    
    # 사용자의 관심사
    interests = "cat food"
    
    # TfidfVectorizer 객체 생성
    vectorizer = TfidfVectorizer()
    
    # 게시글과 사용자의 관심사를 합쳐서 문서 집합 생성
    documents = posts + [interests]
    
    # TF-IDF 피처 벡터화
    tfidf_matrix = vectorizer.fit_transform(documents)
    
    # 단어 목록
    words = vectorizer.get_feature_names()
    
    # 게시글별 단어별 TF-IDF 점수 출력
    for i in range(len(posts)):
        post = posts[i]
        scores = tfidf_matrix[i].toarray().flatten()
        print("Post:", post)
        for j in range(len(words)):
            word = words[j]
            score = scores[j]
            print("Word:", word, "TF-IDF Score:", score)
        print()

    위의 코드는 페이스북 게시글과 사용자의 관심사를 가지고 TF-IDF를 계산하는 예시입니다. posts 변수에 페이스북 게시글들이 리스트로 저장되어 있습니다. interests 변수에는 사용자의 관심사가 문자열로 저장되어 있습니다.

    TfidfVectorizer 객체를 생성한 후 fit_transform() 메서드를 사용하여 게시글과 관심사를 합친 문서 집합에 대한 TF-IDF 피처 벡터화를 수행합니다. 이후, 단어 목록을 가져오고, 각 게시글과 단어의 TF-IDF 점수를 출력합니다.

    실행 결과로는 각 게시글별로 단어와 해당 단어의 TF-IDF 점수가 출력됩니다. 이를 통해 게시글과 사용자의 관심사 간의 관련성을 평가할 수 있습니다.

    TF-IDF를 알아야하는 이유

    TF-IDF를 알아야하는 이유

    정보 검색 (Information Retrieval)

    TF-IDF는 정보 검색 시스템에서 검색어와 문서 간의 관련성을 측정하는 데 사용됩니다. 검색어와 문서 간의 TF-IDF 값이 높을수록 해당 문서가 검색어와 관련이 높다고 간주됩니다. 이를 통해 정확한 검색 결과를 제공하고 검색어와 관련이 높은 문서를 상위에 표시할 수 있습니다.

    문서 요약 (Document Summarization)

    문서의 핵심 단어를 식별하는 데 사용됩니다. 문서 내에서 TF-IDF 값이 높은 단어는 해당 문서의 중요한 주제나 내용을 나타내는 핵심 단어로 간주될 수 있습니다. 따라서 문서 요약이나 텍스트 요약 작업에서 TF-IDF는 중요한 기준이 될 수 있습니다.

    문서 군집화 (Document Clustering)

    문서 간의 유사성을 계산하는 데 사용됩니다. 각 문서의 TF-IDF 값을 벡터로 표현하여 문서 간의 유사성을 계산하고, 이를 기반으로 문서를 군집화하거나 유사한 문서를 그룹화할 수 있습니다.

     

    텍스트 분류 (Text Classification)

    텍스트 분류 작업에서 중요한 기능을 합니다. 각 단어의 TF-IDF 값은 해당 단어가 특정 클래스 또는 카테고리와 관련성이 있는지를 나타낼 수 있습니다. 이를 기반으로 기계 학습 모델이 문서를 자동으로 분류하거나 레이블을 예측하는 데 사용될 수 있습니다.

     

    문서 유출 탐지 (Plagiarism Detection)

    문서 간의 유사성을 판별하는 데 사용됩니다. 특정 문서에서 다른 문서로부터 복사되었을 가능성이 있는 부분은 해당 문서의 특정 단어들과 다른 문서에서 흔하지 않은 단어들로 이루어질 수 있습니다. TF-IDF를 사용하여 문서 유출을 탐지하고 원본 문서와 유사한 부분을 식별할 수 있습니다.

    검색 엔진 최적화 (Search Engine Optimization, SEO)

    웹 페이지의 내용을 최적화하는 데 TF-IDF를 사용할 수 있습니다. 검색 엔진은 TF-IDF 값을 분석하여 웹 페이지의 키워드와 관련성을 평가합니다. 웹 페이지에서 중요한 단어를 적절하게 사용하고 TF-IDF를 고려하여 내용을 작성하면 검색 엔진 결과에서 상위에 노출되는 확률이 높아집니다.

    자동 번역 (Machine Translation)

    자동 번역 시스템에서 단어 선택과 가중치 계산에 활용될 수 있습니다. 번역 시 문맥에 따라 중요한 단어를 선정하고, 문장 내에서의 단어 위치에 따라 가중치를 부여하여 번역 품질을 향상시킬 수 있습니다.

     

    정보 추출 (Information Extraction)

    텍스트에서 정보를 추출하는 작업에서 TF-IDF는 핵심 단어나 구문을 식별하는 데 도움이 됩니다. 특정 주제나 엔티티를 추출하거나 문서에서 주요한 내용을 파악하는 데 사용될 수 있습니다.

    문서 유사도 계산 (Document Similarity)

    문서 간의 유사성을 계산하는 데 사용됩니다. 유사한 주제 또는 내용을 갖는 문서를 식별하거나 문서 간의 유사도를 기반으로 검색 결과를 개선하는 등의 작업에 활용할 수 있습니다.

     

    TF-IDF 비판점

    • 단어 의미 고려의 한계
      • 단어의 등장 빈도와 전체 문서에서의 등장 빈도를 기반으로 계산됩니다. 그러나 이는 단어의 의미를 완전히 이해하지 못하고, 문맥을 고려하지 않는 단점이 있습니다. 따라서, 동음이의어나 다의어 등과 같은 의미적으로 다른 단어를 구별하기 어렵습니다.
    • 정규화의 필요성
      • 일반적으로 문서의 길이에 따라 달라질 수 있습니다. 긴 문서는 더 많은 단어를 포함하므로 해당 단어들의 TF 값이 낮아지고, 결과적으로 TF-IDF 점수도 감소할 수 있습니다. 이를 해결하기 위해 정규화 기법을 적용해야 할 필요가 있습니다.
    • 흔한 단어의 과대평가
      • 전체 문서에서 흔하게 등장하는 단어들이 IDF 값이 낮아져 TF-IDF 점수가 낮아지는 경향이 있습니다. 하지만 이러한 흔한 단어들도 문서의 의미를 이해하는 데에는 중요한 역할을 할 수 있으므로, 이러한 단어들의 중요성을 과소평가할 수 있습니다.
    • 단어 순서 정보 무시
      • 단어의 등장 빈도만을 고려하고 단어들 사이의 순서 정보를 무시합니다. 하지만 텍스트 데이터에서는 단어의 순서가 의미에 영향을 줄 수 있으므로, 단어의 순서 정보를 고려하지 않는 TF-IDF는 이러한 측면에서 한계가 있습니다.

    이러한 비판점들을 고려하여 TF-IDF를 적용할 때는 문제의 특성과 목적에 맞게 적절히 활용해야 합니다. 더 발전된 기법들을 적용하거나 TF-IDF와 다른 기법을 조합하는 방법을 고려하여 자연어 처리 작업을 수행하는 것이 좋습니다.

     

     

    728x90
    반응형

    댓글