TextRank는 PageRank 알고리즘을 자연어 처리에 적용한 것으로, 크게 두 가지 주요 방법이 있습니다.
전처리
그래프 구성
순위 계산
Score(Si) = (1-d) + d * Σ(Similarity(Si,Sj) * Score(Sj) / Σ(Similarity(Sj,Sk)))
def sentence_similarity(sent1, sent2, tfidf_matrix):
return cosine_similarity(
tfidf_matrix[sent1:sent1+1],
tfidf_matrix[sent2:sent2+1]
)[0][0]
def build_similarity_matrix(sentences, tfidf_matrix):
similarity_matrix = np.zeros((len(sentences), len(sentences)))
for idx1 in range(len(sentences)):
for idx2 in range(len(sentences)):
if idx1 != idx2:
similarity_matrix[idx1][idx2] = sentence_similarity(
idx1, idx2, tfidf_matrix
)
return similarity_matrix
전처리
그래프 구성
순위 계산
Score(Wi) = (1-d) + d * Σ(Wji * Score(Wj) / Σ(Wjk))
def build_word_graph(words, window_size=4):
graph = defaultdict(lambda: defaultdict(int))
for i in range(len(words) - window_size + 1):
window = words[i:i + window_size]
for word1 in window:
for word2 in window:
if word1 != word2:
graph[word1][word2] += 1
return graph
문장 기반
키워드 기반
TextRank for Sentence Extraction에 대해 주어진 예시 문장들(9번, 18번)을 통해 자세히 설명드리겠습니다.
문장 9: "Hurricane Gilbert Swept toward the Dominican Republic Sunday, and the Civil Defense alerted its heavily populated south coast to prepare for high winds, heavy rains, and high seas."
문장 18: "Strong winds associated with the Gilbert brought coastal flooding, strong southeast winds, and up to 12 feet to Puerto Rico's south coast."
공통 단어(wk) 확인:
유사도 계산:
Similarity(S9, S18) = |공통 단어 수| / (log|S9의 단어 수| + log|S18의 단어 수|)
= 4 / (log28 + log22)
WS(Vi) = (1-d) + d * Σ(wji / Σwjk * WS(Vj))
예시 문장 9의 경우:
이러한 방식으로 TextRank는 문서 내의 중요 문장들을 효과적으로 추출할 수 있습니다.
WS(V9) = (1-0.85) + 0.85 * Σ(wj9 / Σwjk * WS(Vj))
= 0.15 + 0.85 * (
(w18,9 / Σw18,k * WS(V18)) +
(w16,9 / Σw16,k * WS(V16)) +
(w15,9 / Σw15,k * WS(V15)) +
... (다른 연결된 문장들)
)
이러한 결과가 나온 이유:
이처럼 TextRank는 문장 간의 유사도를 바탕으로 중요한 문장들을 효과적으로 추출하여 문서의 핵심 내용을 요약할 수 있습니다.
Rouge score의 계산 과정
예시 상황:
원본 요약문(사람이 작성): "자연어 처리 기술이 발전하면서 기계 번역의 성능이 향상되었다."
시스템 요약문: "자연어 처리 기술의 발전으로 기계 번역이 좋아졌다."
원본 요약문 단어들: [자연어, 처리, 기술이, 발전하면서, 기계, 번역의, 성능이, 향상되었다]
시스템 요약문 단어들: [자연어, 처리, 기술의, 발전으로, 기계, 번역이, 좋아졌다]
일치하는 단어: 자연어, 처리, 기계, 번역
Unigram Recall = 일치 단어 수 / 원본 단어 수
= 4 / 8 = 0.5 (50%)
원본 요약문 bigrams:
[자연어 처리], [처리 기술이], [기술이 발전하면서], [발전하면서 기계], [기계 번역의], [번역의 성능이], [성능이 향상되었다]
시스템 요약문 bigrams:
[자연어 처리], [처리 기술의], [기술의 발전으로], [발전으로 기계], [기계 번역이], [번역이 좋아졌다]
일치하는 bigrams: [자연어 처리]
Bigram Recall = 1 / 7 ≈ 0.143 (14.3%)
이미지에서 보이는 가중치 적용:
최종 Rouge Score = (Unigram * 3/4) + (Bigram * 1/3)
= (0.5 * 0.75) + (0.143 * 0.333)
= 0.375 + 0.048
= 0.423
실제 평가에서의 의미:
다른 예시:
원본: "딥러닝 모델이 좋은 성능을 보였다"
시스템1: "딥러닝 모델의 성능이 우수했다" (높은 Rouge score)
시스템2: "인공지능이 잘 작동했다" (낮은 Rouge score)
이런 방식으로 Rouge score는 시스템이 생성한 요약문이 원본 요약문의 내용을 얼마나 잘 보존하는지를 정량적으로 평가할 수 있게 해줍니다.