수업 출처) 숙명여자대학교 소프트웨어학부 박동철 교수님 '데이터사이언스개론' 수업

 

1. Dealing with Text

- 데이터가 항상 feature vector 형태로 제공되지는 않는다.

- 우리는 도구에 맞도록 데이터 표현을 설계하거나, 데이터에 맞는 새로운 도구를 만들어야 한다.

- 보통은 도구에 맞도록 데이터를 가공한다.

 

2. Why text is important

- 텍스트는 어디에나 존재한다.

- 많은 애플리케이션들은 여전히 텍스트 데이터를 만들거나 기록한다.

- 의료 기록, 제품 조회, 수리 기록, 소비자 불만 사항 기록 등

- 인터넷은 '뉴미디어'의 본고장이지만, 그것은 대부분 오래된 미디어와 같은 형태이다.

- 멀티미디어 데이터는 많은 양의 교통량을 설명할 수 있다.

- 그것은 여전히 사람들이 인터넷으로 서로 텍스트로 대화하면서 발생하는 대량의 텍스트를 포함하고 있다. 

- 기업에서는 고객의 피드백을 이해하기 위해 텍스트를 이해해야 한다. 

- 많은 경우 고객의 의견을 듣고 싶을 때 제품 리뷰, 피드백 문서, 고객 의견, 이메일 등 그들이 작성한 것을 읽어야 한다.

 

3. Why text is difficult

- 텍스트는 대부분 'unstructured' 데이터이다. 컴퓨터가 이해하기에 조직적이지 않다.

- 미리 정의된 데이터 모델도 없고, 사전에 정의된 방식으로 조직되어 있지도 않다.

- 때에 따라 단어 순서가 중요하기도, 그렇지 않기도 하다.

- 사람들이 문장을 적을 때 문법적이지 않게, 스펠링을 틀리게, 예측할 수 없도록 축약해서, 구두점을 랜덤으로 찍는 등 체계적으로 적지 않기 때문이다.

- 유의어, 동음이의어, 축약어 등도 문제가 된다. 축약어는 domain에 따라 전혀 다른 의미가 되기도 한다.

- 전체 문맥을 고려하지 않고 어떤 특정한 단어나 구를 평가하기는 어렵다.

- 이러한 이유로 텍스트 데이터는 데이터 마이닝 이전에 전처리되어야 한다.

 

4. Text Representation

- 목표: 비교적 단어의 순서가 자유로운 문서(documents) 집합을 우리에게 친숙한 feature vector 형식으로 바꾸는 것이다.

- 각 문장이 하나의 개체 (instance)가 된다.

- 하지만, 전처리 이전에 features가 어떤 것일지 알 수 없다.

- 전체 documents의 집합을 corpus라고 한다.

 

5. Bag of Words

- 모든 문서들을 각 개별 단어들의 집합으로 다루는 것이다.

- 문법, 단어 순서, 문장 구조, 구두법을 무시한다.

- 문서의 모든 단어들을 잠재적으로 중요한 키워드로 간주한다.

- 만약 모든 단어가 feature가 될 경우, 각 문서는 1 또는 0으로 대표될 것이다.

    - 1 : feature 단어가 문장에 존재할 경우

    - 0 : feature 단어가 문장에 없을 경우

- 직설적이고, 저렴하게 만들 수 있다.

- 또한, 많은 경우에서 잘 수행된다.

 

6. Term Frequency (TF) 🌟

- 단순한 1, 0 대신 문장 속의 단어 개수 (빈도 frequency)를 이용하는 것이다.

- 단어의 사용 횟수를 구분한다.

- 텍스트 전처리

    - 각 케이스는 정상화(normalized)되어야 한다.

        - 모든 단어는 소문자가 되어야 한다. (형태를 동일하게 만들기 위해)

    - 단어의 어근만 남아야 한다. (stemming)

        - 단어의 복수형, 동사 시제 등 접미사를 제거한다.

        - ex) directors -> director, announces / announcing / announed -> announc !

    - 접속사, 전치사, 관사 등 stop word를 제거한다.

        - stop word는 자연어 데이터 처리 전후에 걸러지는 단어들이다.

        - ex) the, a, and, of, on, etc.

 

ex)

- 예제 문서에 대한 TF 값들이다. 

- normalization, stemming을 한 후 빈도수에 따라 정렬한 결과이다.

 

6-1. Normalized Term Frequency

- 문서들마다 길이가 다양한데, 길이가 긴 문서가 보통 더 많은 단어들을 가지고 있을 것이다.

- 그래서 긴 문서가 짧은 문서보다 더 중요하다거나 관련이 있다는 오해를 불러일으킬 수 있다.

- 각 TF는 다음과 같은 방식으로 정상화된다.

    - 문서 안의 총 단어의 수 (document length) 로 나눈다.

    - 혹은 corpus 안의 특정 단어의 빈도로 나눈다.

 

7. Inverse Document Frequency (IDF) 🌟

- TF는 하나의 문서에서 그 단어가 얼마나 많이 있는지를 측정한다.

- 우리는 또한 단어의 가중치를 결정할 때 전체 corpus에서 그것이 얼마나 만연한지를 고려할 수 있다. 

 

- corpus에서 단어가 너무 희귀하거나 너무 많으면 클러스터링이나 분류를 할 때 도움이 되지 않는다. 무시하는 것이 낫다.

- 따라서 TF에 lower / upper limit을 둘 수 있다.

 

- 어떤 단어가 포함된 문서가 범위 내에서 적을수록 그 문서는 meaningful하다고 볼 수 있다.

- 이러한 단어 t의 희소성은 IDF에 의해 측정된다.

 

- IDF는 단어가 희귀할수록 크다.

- t를 포함한 문서가 많을수록 IDF는 1에 수렴한다.

 

8. Combining TF and IDF : TF-IDF 🌟

- 아주 대중적인 텍스트 표현이다.

- 문서 d에서 t에 대한 TF값과 전체 corpus에서 t에 대한 IDF값을 곱한 것이다.

- 따라서 TF-IDF는 하나의 문서에 한정되는 값이다.

- 각 문서가 feature vector가 된다.

- corpus는 feature vector의 집합이다.

 

- feature가 굉장히 많아지기 때문에 자주 선택을 해야하는데, 텍스트 표현에는 많은 잠재적 조건들이 있다.

- term count에 최대/최소 한계값을 걸거나 각 단어들을 중요도에 따라 순위를 매겨서 information gain을 측정하는 등의 방법이 있다.

 

9. (ex) Jazz musicians

- 위키피디아에서 15명의 유명한 재즈 음악가, 전문가들의 전기를 가져온 것이다.

- 문서가 15개로 작음에도 불구하고 corpus와 그에 담긴 단어들은 너무 많다.

- 접미사를 제거하고 stop-word까지 제거한 후에도 약 2,000개의 feature(단어)가 존재한다.

 

- 예시로 "Famous jazz saxophonist born in Kansas who palyed bebop and latin" 문장을 살펴보려고 한다.

- 우선 basic stemming 단계를 거친다.

    - stemming 방법은 완벽하진 않다. 예를 들면 kansas와 famous를 명사의 복수형이라고 생각하여 kansa, famou 라고 저장할 수 있다.

    - 하지만 이렇게 단어를 저장했다면 문서 전체에서 일관성있게 저장했을 것이기 때문에 stemming을 완벽하게 하는것은 그닥 중요하지 않다.

 

- stemming

- 샘플 문장의 단어들 (tokens)은 위와 같다.

 

- stop word (in, and)를 제거한 후 정상화된 TF는 위와 같다.

 

- 최종 TFIDF 값은 위와 같다.

- 이는 샘플 문서에 대한 feature vector이다.

- TFIDF가 클수록 (latin) 희귀한 단어이고, 작을수록 (jazz) 많이 나오는 단어이다.

 

- 단순한 검색 엔진을 실행하기 위해 이 TFIDF를 사용해보자.

- 사용자가 검색 쿼리에 "Famous jazz saxophonist born in Kansas who palyed bebop and latin" 이 문장을 입력했다고 하자.

- 그럼 우선 이 TF-IDF 표현으로 쿼리를 번역할 것이다.

- 그 다음, 각 음악가의 전기와 쿼리의 단어의 유사도를 각각 계산한 후 가장 가까운 전기를 고를 것이다.

    - 이 때 텍스트 분류에서 두 문서 사이의 유사도를 측정할 때 가장 많이 사용되는 '코사인 유사도 cosine similarity'를 사용할 것이다.

    - cosine similarity = x · y / ||x||₂ ||y||₂

- 유사도 결과를 보면 실제 예제에 해당하는 음악가인 'Charlie  Parker'와의 유사도가 가장 큰 것을 볼 수 있다.

 

10. Beyond "Bag of Words"

- bag of words는 비교적 간단하지만 다양한 상황에서 놀랍게도 잘 수행된다.

- 보통 데이터 과학자가 새로운 텍스트 마이닝 문제를 볼 때 가장 먼저 선택하는 방법이다.

- 하지만, 더욱 정교한 기술이 필요한 애플리케이션에 사용하기엔 부족하다.

- 예를 들면 bag of words는 단어의 순서를 고려하지 않는다.

 

10-1. N-gram Sequences

- 단어의 순서가 중요하고 그에 대한 정보를 남기고 싶은 경우 사용한다.

- 인접한 단어의 순서를 항으로 포함하기 때문에 복잡도는 높아진다.

 

- ex) "The quick brown fox jumps"

    - 문장을 구성하는 단어들 {quick, brown, fox, jumps} + {quick_brown, brown_fox, fox_jumps}

    - 이 일반적인 표현 방법을 n-grams라고 부른다.

 

- 'Bag of n-grams up to three'

    - 각 단어들, 인접한 단어쌍, 인접한 세 개의 단어쌍을 features로 하여 각 문서를 나타낸다.

    - 장점 : easy to generate (언어학적 지식이나 복잡한 파싱 알고리즘을 알 필요가 없다.)

    - 단점 : greatly increase the size of the feature set (각 단어를 저장할 때보다 더 많은 단어쌍이 포함되기 때문에 feature 집합의 크기가 매우 커진다.)

 

10-2. Named Entity Extraction

- 구절을 추출할 때 일반적으로 알려진 이름을 인식하길 바랄 수 있다.

- 예를 들면 Silicon Valley, Minnesota Twins, The Lord of the Rings 등과 같이 각 단어 별로 보면 아무 의미 없지만, 그 자체로 알려진 의미가 있는 구절들을 인식하고자 한다.

- basic bag of word나 n-grams 표현으로도 쉽지 않다. 왜냐하면 두 방법 모두 공백이나 구두점을 기반으로 텍스트를 분할하기 때문이다.

- 이 방법을 실행하기 위해서는 집약된 지식이 필요하다. 큰 corpus에 의해 학습되거나, 사람이 직접 개입해야 한다.

 

10-3. Topic Models

- 지금까지 살펴본 방법들은 문서에 있는 단어들로부터 직접적으로 모델을 만드는 방법이다.

- 이는 비교적 효율적이지만, 항상 최적의 방법인 것은 아니다.

 

- 단어와 문서가 복잡해지면 문서와 모델 사이에 추가적인 layer (topic layer) 를 만들 수 있다. 

- 각 문장은 단어의 순서를 구성하고, 단어들은 적어도 하나의 토픽에 매핑된다.

- topic layer는 문서의 단어들의 클러스터들이라고 볼 수 있다.

- 장점) 검색엔진에서 입력된 쿼리가 문서의 특정 단어들과 완전히 똑같지 않을 수 있다. 이 때 그 단어를 알맞은 토픽에 매핑하고, 그와 관련된 문서를 보여준다.

 

11. (ex) Mining news stories to predict stock price movement

- 뉴스를 기반으로 주식 시장을 예측하고자 한다.

- 단순하게 하기 위해서 그 날 하루의 변화를 예측할 것이고, 정확한 값이 아닌 변화가 있는지 없는지만 예측할 것이다. 또한, 작은 변화는 예측이 어렵기 때문에 큰 변화가 있을 경우에 변화가 있다고 예측할 것이며, 주가는 그 기업의 이름이 명시되지 않은 뉴스에 의해서도 변화될 수 있지만, 이 예제의 경우 그것까지 고려하기 어렵기 때문에 기업의 이름이 명시된 뉴스에 한해서 마이닝을 할 것이다.

 

- -2.5% ~ 2.5% 의 변동이 있을 경우 '안정된 상태'라고 간주한다.

- -5% 이하, 5% 이상의 경우 변동이 있다고 간주한다. 그 사이는 고려하지 않는다.

 

- 지도학습을 위해 과거 데이터인 1999년 데이터를 사용한다.

- 샘플 뉴스이다.

- 1년 동안 주식회사 BEAM의 주가 그래프이다. 

- 숫자로 표시된 각 지점에 주가가 오르고 내렸는데, 각 지점마다 회사 관련 뉴스가 있었다.

- 각 뉴스의 요약 주석이다.

- 데이터 전처리 : 각 뉴스를 TFIDF 표현으로 줄이기 위해 'bag of words' 단계를 적용한다.

- 각 단어는 소문자화 되었고, stopwords도 제거되었다.

- 'n-grams up to two'를 생성했다.

- 각 뉴스에는 관련 주가 움직임에 기반한 라벨이 붙어있다. (change or no change)

    - 결과적으로 약 16000개의 태그된 뉴스가 나왔다.

 

- 예측 가능성을 보기 위해 ROC curve를 이용했다.

- 이 curves는 10-fold cross validation의 평균을 채택했다.

 

- 결과

    - 뉴스 내용에는 예측가능한 신호가 있다.

    - NB와 LR는 트리보다 더 성능이 좋다.

 

- 아래 그래프는 lift curves이다.

- 뉴스 기사를 점수를 매기고 정렬하기 위해 모델을 사용한다면 우리가 얻을 수 있는 Lift의 양을 정확히 보여준다.

- 결과 

    - x = 0.2인 경우에서 LR과 NB의 lift는 거의 2.0이다.

    - 이는 만약 모든 뉴스 기사의 점수를 매기고 상위 20%만 선택했다면, positive 뉴스는 랜덤으로 예측된 것보다 2배의 정밀도를 보인다.

+ Recent posts