STUDY_SEONMIN
DAY47 - 텍스트 데이터 전처리 본문
분석 대상인 말뭉치를 텍스트 데이터 분석의 기본 단위인 "토큰"으로 변환시킨 후에는 컴퓨터가 이해할 수 있도록 수치화 하는 작업이 필요합니다.
수치화를 할 때는 특정 문서를 하나의 벡터로 만들게 되는데(BOW 인코딩) 벡터의 원소들은 해당 문서 내에서 특정 단어의 등장 횟수를 나타내게 됩니다.
ex) 'Can I get some coffee and coffee?' => [1, 1, 1, 1, 2, 1]
벡터의 각 자리가 의미하는 단어는 [Can, I, get, some, coffee, and] 가 됩니다.
CountVectorizer
- Vectorizer는 사용 전에 사전 학습이 필요합니다. -> "단어 사전"을 만들기 위한 말뭉치가 필요
- "단어 사전"을 만들게 되면 벡터화 이후 각각의 원소가 어떤 단어를 의미하는지도 자동으로 결정됩니다.
위에서 정의된 바에 따르면 corpus의 첫 문서인 "This is the first document"라는 문장을 학습한 CountVectorizer로 벡터화 시키게 되면 다음과 같이 변합니다.
CountVectorizer 객체를 생성할 때는 활용 가능한 다양한 파라미터들이 있습니다.
1) stop_words
- CountVectorizer를 학습시켜 단어 사전을 만들 때 포함시키지 않을 단어들을 미리 정할 수 있습니다.
- 보통은 말뭉치에 있는 모든 문서에서 자주 등장해서 별 의미가 없는 단어들을 stop_words로 지정합니다.(ex : 조사, 관사 )
2) analyzer
- 토큰화를 진행할 때 토큰의 기준을 무엇으로 할 지를 선택할 수 있습니다.
- word, char, ..
3) token_pattern
- 토큰화 할 때 특정 정규표현식을 설정하여, 해당 단어들만 토큰으로 취급할 수 있습니다.
- analyezr = 'word'일 때만 활용이 가능합니다.
4) tokenizer
- 토큰화 함수를 입력해서 해당 함수의 방식대로 토큰화 할 수 있습니다.
5) ngram_range
- 토큰의 크기(n)를 결정지을 수 있습니다.
- ngram_range = (a, b)
- a <= n <= b
- 1 <= n <= 2 -> unigram and bigram
5) max_df, min_df
- 단어 사전에 포함되기 위한 최대 빈도수와 최소 빈도수를 의미합니다.
- 특정 단어가 말뭉치에서 등장한 빈도를 x라고 하면 min_df <= x <= max_df 인 단어들만 단어 사전에 포함됩니다.
TF-IDF
- 문서에서 중요한 단어를 골라낼 때, 단순히 빈도수를 이용하기에는 위험 부담이 있습니다. 만약 A라는 문서에 가장 자주 등장하는 단어가 조사나 관사와 같은 거의 불용어 수준의 단어라면 이는 A문서에서 중요한 단어라고 할 수 없습니다.
- 따라서 "문서 내에서 단어가 등장하는 횟수" 와 "단어가 등장하는 문서의 수"를 고려해 "문서 내에서 단어의 중요도"를 계산할 필요가 있는데 이 값이 바로 "TF-IDF"입니다.
$$ \text{tf-idf}(d, t) = \text{tf}(d, t) \cdot \text{idf}(t) $$
$$ \text{tf}(d, t) : \text{문서 d 내에서 단어 t의 등장 횟수} $$
$$ \text{idf}(t) = \log \dfrac{n}{1 + \text{df}(t)} $$
$$ n : \text{문서의 총 갯수} $$
$$ \text{df}(t) : \text{단어 t가 등장한 문서의 갯수} $$
- TF-IDF값에서 IDF는 해당 단어가 여러 문서에 등장할 수록 값이 낮아지도록 되어있기 때문에, "다른 문서에서는 잘 등장하지 않으면서 해당 문서에서는 자주 등장하는 단어"를 알아낼 수 있습니다.
1첫 번째 문서에서는 'first'라는 단어의 tf-idf값이 가장 높으므로 해당 단어가 첫 번째 문서에서 가장 중요한 단어라고 할 수 있습니다.
실제로 말뭉치를 보게 되면 document, is, the, this 에 비해서 first가 첫 번째 문서를 대표할만한 단어라는 것을 알 수 있습니다.
'EDUCATION > DSS Online 6기' 카테고리의 다른 글
DAY48 - 이미지 데이터 다루기 (0) | 2021.03.24 |
---|---|
DAY47 - 확률론적 언어모형 (0) | 2021.03.23 |
DAY47 - 한글 텍스트 데이터 처리 (0) | 2021.03.23 |
DAY46 - 텍스트 데이터 (0) | 2021.03.20 |
DAY45 - 정규화 된 선형회귀모형 (0) | 2021.03.19 |