TF-IDF(term frequency - inverse document frequency) 기본 맛보기
1. introduction
특정한 term의 등장빈도를 보면서 그 term이 제공하는 정보량까지 고려하겠다는 방법
단어가 제공하는 정보량은 사건이 희귀하게 발생하면 그 사건에 담긴 정보량은 많다는 것을 상기해보면
문서에서 덜 등장할수록 해당 단어가 주는 정보량이 많다는 것
2. term frequency
특정 단어가 해당 문서에 몇번 나오는지 빈도수를 계산하는 것
bag of words는 해당 문서에 몇번 나오든 관계없이 나오기만 하면 1, 없으면 0을 부여함
반면 term frequency관점에서는 여러번 등장하면 등장하는 만큼의 빈도수를 부여함
보통은 문서 내 총 단어수로 나눈 normalize 빈도수를 사용하여 0과 1사이의 값으로 나타내며 총 합은 1 이하가 되도록 만든다
3. Inverse document frequency
N이 document의 총 수이고 DF(t)가 특정한 term t가 등장한 document의 수이면 N/DF(t)에 로그를 취한 값으로 정의
예를 들어 N=100인 경우 ‘the’같은 관사는 사실상 모든 문서에 등장한다고 봐도 무방하므로 DF(the)=100으로 IDF(the)=0
모든 문서에 등장하는 단어는 0점을 부여
단 하나의 문서에만 등장하는 특별한 단어는 N/DF(t)=100이므로 IDF(t)=log100
여기서 2진법, 10진법 이야기 한거 보면 밑은 상황에 따라 다른가봐
참고로 IDF는 각 문서에 몇번 등장했는지는 무시하고 여러번 등장했더라도 DF(t)에는 1을 더해줌
4. TF-IDF 계산
최종적으로 해당 단어의 TF-IDF score란 TF와 IDF값의 곱으로 정의됨
a,the같은 관사는 사실상 모든 문서에 등장한다고 봐도 무방하므로 TF가 매우 높지만 IDF가 매우 낮아 거의 0점에 가까움
반면 자주 등장하지 않는 고유명사는 TF가 작더라도 IDF가 매우 높아 전체적으로 커짐
5. 예시로 이해하는 TF-IDF
예시 데이터를 tokenizing하여 vocab으로 구성하고 각 문서 제목에서 각 단어들의 term frequency를 계산하면
각 문서 내 존재하는 단어들의 IDF를 계산해보면
위 그림을 보면 ‘주연은’은 매번 등장했으므로 0이고 1번 등장한 BTS 같은 경우는 가장 높음
또한 IDF는 문서들에 무관하게 같은 값을 가짐, term에만 종속되는 값
위에서 계산한 TF와 IDF를 곱하여 TF-IDF를 계산해보면..
자주 등장하지 않은 단어일수록 높은 값을 가지고 자주 등장하는 단어는 적은 값을 가짐
위에서 계산한 표를 이용해서 sparse embedding이 가능한데 예를 들어 음식 문서를 embedding해보면 [0,1.39,0.29,0,0,0,0,0,0,0,0]
이제 질문이 들어오면 질문 자체를 하나의 문서라고 생각하고 tokenizing한다
기존 vocab에 없는 token은 제외하고 TF-IDF를 계산함
근데 이러면 문서의 TF-IDF도 변해야하는거 아니야??? 이거 좀 주의깊게 찾아봐야겠는데
이렇게 질의의 TF-IDF 벡터를 구했다면 각 문서들의 TF-IDF 벡터와의 유사도를 계산하여 가장 높은 점수를 가진 문서를 가져오는데
유사도의 경우 cosine distance를 계산할 수 있고 inner product를 계산할 수 있고.. 아니 생각해보니까 inner product가 cosine distance인데?
6. BM25
TF-IDF를 바탕으로 문서의 길이까지 고려한 score algorithm
TF에는 한계치를 두어 일정한 범위에서 계산하게 만들고
평균적인 문서의 길이보다 적은 문서에 높은 가중치를 부여하여 계산
최근까지도 가장 자주쓰이는 알고리즘
'딥러닝 > Machine Reading Comprehension' 카테고리의 다른 글
in batch negative를 이용한 dense embedding encoder modeling (0) | 2022.05.26 |
---|---|
dense embedding encoder modeling -개요와 학습방법- (0) | 2022.05.26 |
dense embedding과 sparse embedding 비교 (0) | 2022.05.24 |
Sparse embedding (0) | 2022.05.19 |
Passage retrieval modeling (0) | 2022.05.19 |