Tokenizing토큰은 텍스트를 구성하는 개별 단위'나는 밥을 먹는다' -> '나는','밥을','먹는다' 토큰으로 나눔huggingface tokenizer가 요즘 잘 되어 있음. 1) 단어 단위 토큰화 I ate a hotdog -> 'I','ate','a','hotdog'장점: 토큰 길이가 상대적으로 짧음단점: vocabulary 집합크기가 너무 커짐 (cat,cats는 같은 의미이지만 따로 한 칸 씩을 차지), Unknown() 토큰 발생 가능성 높음 2) 문자 단위 토큰화 I ate a hotdog -> 'I','a','t','e','a','h','o','t','d','o','g' 장점: vocabulary 집합 크기가 작음, unknown 토큰 () 발생할 가능성이 적음 단점: 토큰..
문서 요약이란 중요한 문장을 자동으로 추출하는 과정 중요한 문장을 추출한다 -> 문장의 중요성을 어떻게 판단? 추상적 요약 문서를 의미적으로 이해 , 의미 추출 하여 요약 생성 추출 요약 문장별 중요도 계산 , 순위 높은 문장 선택 , 기술의 난이도가 있음. Luhn Summerize 이용한 문서 요약 단어의 중요도는 사용빈도로 측정, 작가는 중요한 단어를 반복한다. 중요 단어를 구분할 수 있는 구역을 C와 D로 표시 빈도수가 높다고 무조건 중요한 단어는 아님을 의미. 작성자가 많이 사용한 단어가 많은 문장이 중요한 문장이다 문장의 중요도 sentence 각 대쉬는 토큰을 의미함. 중요 단어가 시작하는 처음과 끝사이 단어들 중 중요단어의 상대 비율 문장 중요도 = (윈도내 포함된 중요단어 갯수)^2/ 윈..
TextRank TextRank는 각 문서를 토큰화 -> 그래프 생성 (서로 간의 관계를 이용) -> 중요도 계산하여 핵심 키워드 추출 그래프 기반 Ranking 모델, 키워드와 문장추출을 위한 비지도 학습 방법 제안(문서만 있으면 키워드나 문장 추출) Graph-based ranking algorithms -> 구글 PageRank에서 사용됨, 그래프 기반 각 노드의 중요성을 결정하는 방법 많은 득표를 한 노드가 중요한 노드임을 의미. 구글 페이지 랭크 원리를 보면, c,b는 웹페이지 나를 참조로 하고 있는 링크가 많을 때 중요한 웹페이지라고 간주 -> 가중치가 올라감 S(Vi): 아래 PR(A) 와 같은 역할 나와 인접하고 있는 노드가 가지고 있는 링크 만큼 분해하여 스코어를 받음 키워드 추출의 Te..
핵심키워드 추출 핵심 키워드 추출이란 문서에서 가장 중요한 단어를 자동으로 추출 "단어의 중요성을 어떻게 판단할 것인가?" 대량 데이터 처리 가능-> 직접 읽지 않아도 처리할 수 있음 추출의 일관성 -> 정해진 모델 통해서 동일한 기준을 가지고 추출, 모델에서 변화를 줄 수 있는 것은 파라미터(매개변수)임. 모델 자체는 변하지 않음. 실시간 분석이 가능 -> 키워드 추출을 실시간으로 진행 1. 단어 빈도를 활용한 접근 문서를 단순한 단어모음으로 간주,but 단어의 의미, 구조, 문법, 순서를 고려하지 않음 2. 연어/ 동시발생 n-gram을 통해 일부분 문맥에 대한 부분 처리 예를 들어 '고객 서비스'라는 연어가 있을 때 고객/ 서비스 하면 알 수 없지만 고객 서비스를 같이 보면 무엇을 의미하는지 알 수..
차원 축소 차원의 저주는 n x p 일때 p가 많은 경우, 연산이 어렵고 데이터 표현이 어려움 이를 위해 차원을 축소함 차원 축소로 인해 정보 손실이 발생할 수 있음 예시) 국어: 80점, 영어 60점, 수학 90점, 과학 90점 평균 = (80+60+90+80)/4 = 77.5점 평균이라는 하나의 차원으로 나타냄, 하지만 평균으로 각 과목의 점수가 몇인지는 정확히 알 수 없음. 정보 손실을 최소화하는 것이 관건. pc1 축으로 하면 좌표들이 겹치지 않고 정보를 가져올 수 있음. 축에 영세했을 때 가장 많이 퍼져있는 것을 알 수 있음. 축을 찾아내는 과정이 주성분 분석이라고 할 수 있다. 주성분 분석 고차원 데이터를 저차원 데이터로 환원한다. 분산이 가장 커질때 (= 정보 손실을 최소화 하는)축을 pc1..
단어빈도- 역문서 빈도 tfidf(t,d,D) = tf(t,d) * idf(t,D) tf(d,t) -한문서 안에서 단어가 많이 등장할수록 가중치가 높아짐. df(t) -특정 단어 t가 등장한 문서의 수 idf(d,t)- df(t)의 역수 TF-IDF가 높은 것 -> 특정 문서에 많이 등장하고 타 문서에 많이 등장하지 않는 단어 문서 1 : The cat sat on my face I hate a cat 문서 2: The dog sat on my bed I love a dog 문서 1의 벡터는 (0,0.06,0,0,0,0.301,0,0.301,0,0.301,0.301,0.301)이 된다. TF-IDF을 통해 문서간의 유사도를 측정할때 더 좋은 성능을 낼 수 있다. 질의에 대한 tfidf 벡터와 문서의 tf..
BoW (Bag of Words) 단어 출현 순서는 무시하고 빈도수만 기반으로 문서를 벡터화, 각 토큰들이 문서에서 몇번 등장했는지 생성방법 1.각 토큰에 고유 인덱스 부여 2. 문서별로 단어가 몇번 등장했는지 횟수 기록 한계점- 단어의 순서 고려하지 않음(문맥 고려 x), BoW는 원핫인코딩처럼 벡터공간의 낭비할 수 있음. (표시되지 않는 것 0으로 표시), 빈도수가 중요도를 의미 하지 않음. 전처리가 어떻게 하느냐에 따라 카운팅이 달라짐 code docs = ['오늘 동물원에서 원숭이를 봤어', '오늘 동물원에서 코끼리를 봤어 봤어', '동물원에서 원숭이에게 바나나를 줬어 바나나를'] #띄어쓰기 단위로 토큰화 docs_ls = [d.split() for d in docs] docs_ls [['오늘',..
TF-IDF 역문서 빈도, 각 단어의 중요성을 가중치로 표현 tf(d,t) -한 문서 안에서 어떤 단어가 몇번 등장했는지 df(t) -단어가 얼마나 많은 문서에 등장했는지 idf(d,t) -df(t)의 역수 idf가 높으면, df가 낮은 경우 의미 tf와 달리 idf쪽에는 주로 로그를 사용한다. idf에 로그를 사용하는 이유는 단어A 와 B/ 단어 C와 D는 한개 차이지만, 빈도수가 적을때, 그 차이가 적더라도 가중치를 높게 측정한다. 단어 C와 D를 봤을 때 빈도수가 둘 다 많으면, 차이가 미미하다. 그래서 이러한 효과를 상쇄하기 위해 로그를 적용한다. TF-IDF의 계산 절차 토큰별 인덱스는 위치를 부여한다. TF 계산은 각 토큰의 등장 빈도를 계산하고, IDF 계산은 각 단어의 문서 등장빈도를 계산..