ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NLP] 키워드 Extracion T전화는 어떤 알고리즘으로 이슈 뉴스를 추천하는 걸까?(키워드 추출 기술)
    전공&대외활동 이야기/프로메테우스5기_NLP+ 금융프로젝트 2025. 1. 3. 19:11
    본 내용은 https://devocean.sk.com/blog/techBoardDetail.do?ID=164033 의 내용을 중심으로 작성하였습니다. 모든 자료 및 사진은 해당 SKT 기술블로그에서 따왔습니다. https://blog.naver.com/nuguai/222785545779

     

    실제 프레임워크를 보기 위해 SKT의 NUGU에서 어떤식으로 작업이 이루어지는지 정리해보았다. 

    NUGU 소개이미지

     

    T전화 × NUGU 투데이 탭 하단에서는 지금 사람들에게 인기 있는 뉴스를 골라 제공하고 있는데 해당 기술의 프레임워크 구성을 중심으로 정리해보고, 현재 우리 프로젝트에 어떻게 적용가능할지 알아보려고 한다.

    SKT NUGU 출처  [그림 1]은 서비스 제공 시간 사이에 보도된 뉴스 기사로부터 키워드를 추출하는 전체 프로세스를 보여주는 도식

     

    최근 기간 발행된 뉴스 중 가장 이슈가 되는 뉴스를 선별하여 재공하기 위해 해당 서비스는 매 0시와 6시, 이후 3시간 간격으로 업데이트 된다.

    업데이트 시간 사이에 뉴스를 수집한 뒤 핵심 키워드를 자동으로 추출하고 중요도를 바탕으로 1~30위의 키워드를 제공한다. 

     

     

    각 단계별로 보면 우선 충분한 양의 뉴스를 수집하기 위해 1천건 이상을 기준으로 뉴스를 수집한다. 이는 새벽 시간대의 경우  수집되는 뉴스의 수가 많지 않기 때문에 키워드 순위 선정에 어려움이 있기 때문이다. 최소 1천 건의 뉴스가 수집될 때까지 과거 1시간씩 반복해서 이동하여 뉴스의 수를 확보한다고 한다. 

    뉴스 전처리 & 불용어 처리

     

    뉴스의 경우 문서 전처리와 같이 제목과 본문 추출을 진행해야한다. 뉴스의 제목과 본문을 추출하고 본문에서 불필요하거나 관계없는 내용을 제거한다. 통계적으로 비정상적인 길이를 가지거나 내용이 중요하지 않은 포토 뉴스 등 여러 요소를 고려하여 키워드를 추출할 데이터만을 남기고, 이렇게 골라낸 뉴스는 [그림 3]의 파란색 박스로 표시된 부분 같이 HTML 태그 정보를 활용하여 제목과 본문을 인식·추출하고, 내용과 무관한 부분(빨간 박스 표시 부분)인 이미지나 링크, 광고 등을 삭제한다. 더불어 문자의 정규화, 비정상적인 뉴스 필터링도 수행한다. 

    이후 추출된 문서에 관해 키워드 후보군을 생성한다. 이때 형태소 분석을 통해 자연어 처리에서 불용어(Stopword)라 불리는 용어들을 제외하고, 내용어(Contents Word)를 키워드의 후보로 추출한다. 불용어는 조사·접속사 등과 같이 문법적인 기능을 하는 단어 또는 특정 문자의 집합을 나타내고(의미가 없는단어). 내용어는 명사·동사· 형용사와 같이 실질적인 의미를 가지는 단어를 의미한다.

    키워드 선정

    키워드 선정 단계의 입력은 전처리 된 뉴스의 집합 그리고 각 뉴스에서 추출된 키워드 후보군이며, 출력은 Top-K개의 뉴스별 키워드이다. 키워드를 추출하기 위해 RoBERTa* 언어 모델을 사용하는데. 이는 한국어 말뭉치를 사용하여 학습한 언어 모델이라고 한다. 

    이때 해당 언어모델은 한국어의 의미를 숫자 벡터 표현으로 나타낼 수 있지만 유의어 관계를 정확히 파악하지는 못한다. 

    따라서 Finetuning을 통해 의미의 유사성을 학습한다. 이때 사용된 학습 데이터는 문장쌍과 점수로 구성되는데, 점수는 해당 문장쌍이 얼마나 의미상으로 유사한가를 5점 척도로 나타낸 것을 이용한다. 

     

    완성된 모델은 "RoBERTa 언어 모델에서 이해 및 표현된 핵심 키워드 벡터는 뉴스 본문 벡터와 서로 유사한 방향성을 지닐 것이다." 라는 가정하에 주어진 뉴스로부터 키워드를 스스로 추출한다. 즉, 내용과 핵심 키워드는 유사한 벡터 방향을 지닐 것이라는 의미이다. 

     

    사전 학습 및 Fine Tuning 된 RoBERTa에 뉴스 본문과 키워드 후보를 각각 입력하여 두 의미 벡터를 생성한 뒤, 의미 유사도를 측정하여 가장 유사한 키워드를 선정하게 되는데요. 긴 길이의 뉴스 본문을 아주 짧은 길이의 키워드와 매칭시키는 것이기 어렵기에 두가지 개선점이 추가되었다. 

     

    개선점1: 키워드 후보군을 추출할 때 해당 키워드가 포함된 명사구를 대신 추출 및 수식어로 보강

    그림 5

     

    첫째, 키워드 후보군을 추출할 때 해당 키워드가 포함된 명사구(NP)를 대신 추출하여 키워드가 가질 수 있는 의미를 주변 수식어로 보강하여 사용했습니다. 이에 따라 개선된 키워드 후보군 추출 과정은 [그림 5]와 같습니다.

    과정을 하나씩 살펴보면, 1. 우선 분문을 입력으로 받아 형태소 분석을 수행한다. 

    2. 형태소 중 명사구(NP)를 추출하고, 해당 명사구에서 더 짧은 길이를 가지는 핵심 키워드를 후보군으로 선정한다. 

    (이때 핵심키워드 사전규칙은 공개되지 않음 다만, TF-IDF (Term Frequency-Inverse Document Frequency), TextRank 등을 사용할 수도 있고, 특정 도메인의 Dictionary를 만들어 사용할 수 도 있을듯)

     

    개선점2: 제목+본문 벡터와 NP 벡터의 유사도 계산

    그림 6

     

    뉴스의 제목의 경우 뉴스를 한 문장으로 용햑한 것으로도 볼 수 있기에 중요정보라고 판단하였다. 

    키워드 선정 모델의 동작은 [그림 6]과 같이 동작하게 된다. RoBERTa의 입력으로 제목·본문·키워드 후보 벡터(NP)가 주어지는데요. 이들을 각각 의미 벡터로 표현한 뒤, 제목과 본문의 벡터를 가중합(Weighted Sum) 및 정규화(Normalization)하여 제목과 본문이 결합한 의미 벡터를 생성합니다. 이렇게 만들어진 제목-본문 벡터는 제목이 가진 요약 및 핵심 키워드 정보가 강조된 벡터라고 볼 수 있기에 이를 키워드 후보 벡터와의 의미 유사도를 측정하여 최종 Top-K개의 키워드를 선정하게 됩니다. 이때 의미 유사도 측정에는 코사인 유사도(Cosine Similarity)를 사용했습니다.

     

    키워드 순위화 

    키워드 순위화는 이제 추출된 키워드를 병합하고 순위화하는 과정을 거친다. 

    이때 순위화는  "키워드의 화제성은 보도되는 관련 뉴스의 수에 비례할 것이다"라는 가정을 따른다. 

    먼저 선정된 키워드와 관련된 언론사의 수 및 기사의 수를 고려하여 저품질 키워드를 필터링한다.

    이후 동의어를 병합하기 위해  기사 내(Intra), 기사 간(Inter) 군집화(Clustering)를 차례로 수행하고, 군집 내 대표 키워드는 최고 빈도수로 결정한다(이때 DBSCAN 이용).

    필터링된 키워드는 이제 순위화 공식을 이용하여 점수 계산을 한다. 특정 키워드에 대한 점수는 키워드의 빈도수(Keyword_freq)에 개체명 유무(NE_boost), 제목 포함 여부(Title_boost)의 가중치를 곱하여 단순하게 계산한다.

    마지막으로 급상승 키워드 재순위화를 통해

    과거의 키워드 추출 히스토리를 고려하여 오랫동안 화제가 된 진부한 키워드 순위는 낮추고, 새롭게 떠오르는 키워드 순위를 높이는 과정입니다. [수식 2]와 같이 단순히 관측점수(1)에 최근 7일간 동일한 시간대의 평균 점수(2)를 뺀 결과로 계산하여 키워드의 변화량을 계산한다. 현재 관측점수와 과거 기대점수가 동일한 경우, 0점을 기준으로 양과 음의 점수를 가지게 된다. 

    성능

    키워드 추출기의 성능은 최종 결과인 순위화된 키워드가 아닌, 전 단계의 개별 뉴스의 키워드 추출 정확도를 측정하여 평가했습니다. 순위화된 키워드의 정량·정성적 평가는 시간, 비용, 평가자 간 일치도 등에서 여러 어려움이 있기 때문이라고 한다.

     

    키워드 추출 모델의 성능을 측정하기 위해 약 200개의 기사에 대해서 Precision, Recall 그리고 두 척도의 조화 평균인 F1-Score를 측정한 결과는 아래와 같다. 

     

    성능 평가를 위해 정치, 경제, 사회 등 총 8개의 카테고리에서 200개의 기사를 무작위로 선정한 뒤 사람이 직접 N개의 키워드를 추출했고, 이를 정답으로 모델의 성능을 측정했습니다. [표 1]에서 볼 수 있듯이 기존 TextRank 알고리즘에 비해 새롭게 개발한 모델(SKT)이 모든 지표에서 좋은 성능을 보인 것을 확인할 수 있다. 

     

    2) 개선점에 따른 성능 변화

    다음은 키워드 추출 성능 개선을 위해 적용한 다양한 요소들의 성능 변화는 아래와 같다. 먼저 [표 2]에서 Baseline은 기본 RoBERTa 모델이며, +NP는 키워드 추출 시 명사구를 활용한 것을 의미합니다. +Title-aug는 제목 정보를 추가 활용한 것을 의미하고, +ALL은 +NP와 +Title-aug가 적용된 것에 더하여 불용어 사전에 서술성 명사들을 추가한 것을 의미한다. 

     

    TextRank*는 RoBERTa와 공정한 비교 평가를 위해 제목 정보를 추가로 활용했으며, 불용어 사전도 동일하게 적용한 결과이다. TextRank의 그래프 구축 시 제목에 등장한 키워드의 가중치를 증가시키는 방법으로 제목 정보를 활용했고, 키워드 후보군 정제에 불용어 사전을 사용했습니다.

     

    [표 2]에 나타난 것과 같이, 기본 RoBERTa 모델을 제목 정보와 명사구로 확장한 실험이 성능 향상에 도움이 된 것을 확인할 수 있었고, 더불어 모든 조합이 융화되었을 때 가장 좋은 성능을 얻을 수 있었습니다. 또한 기존 TextRank* 알고리즘에 비해 Top-1 성능이 약 15% 향상된 결과를 기록하였다. 

     

     

Designed by Tistory.