개발자로 후회없는 삶 살기

데이터 청년 캠퍼스 PART.9, 13일차 텍스트 분석 본문

[대외활동]/[데이터 청년 캠퍼스]

데이터 청년 캠퍼스 PART.9, 13일차 텍스트 분석

몽이장쥰 2022. 11. 18. 15:34

서론

만약 nlp 공부를 한 후에 내가 구한 텍스트로 학습을 시키는 데 전처리가 필요하다면 이번에 배운 오렌지와 워드, 엑셀로 전처리하는 법을 다시 보는 것이 좋을 수 있다.

 

 

본론

(위키독스로 공부하며 오렌지로 인코더, 이런 거 이해하기 쉽겠는데????? > 실무에서는 오렌지 등으로 처리 결과를 보고 코딩으로 큰 데이터를 다룬다)/

 

텍스트 분석

1) 텍스트를 어떻게 일반적인 데이터처럼 통계적 처리가 가능한 데이터로 가공할 것인가를 생각해야한다 

 

= 내가 친구들과 말하는 걸 어떻게 데이터로 볼 것인가/

=> 텍스트

텍스트는 비정형 데이터로 비정형성을 제거해야 통계적 처리가 가능하다/ -> 저 코퍼스를 어떻게 수치형, 범주형으로 바꿜 수 있을까가 처리의 시작이다 -> 데이터를 순서, 수량기반으로 '인식'하고 분석을 하는게 시작이더라/

2) 텍스트 분석

-> 텍스트 데이터 및 이의 중요도 증가

=> 제약과 어려움

1. 아름답다, 무척아름답다, 뛰어나게 아름답다를 아름다움 정도로 정렬가능?? 순서대로 놓기 어렵다/
2. 문맥뿐 아니라 국가에 따라서도 변함 -> 팔망미인이 일본에서는 욕이다/
3. 1번과 동일/
4. 텍스트를 고차원적으로 분류하려면 어마어마하게 많은 컬럼이 나온다/

=> 우리말의 특징

1. 교착어 : 목적어와 동사의 위치가 정해져있지 않다 + 띄어쓰기를 신경쓰지 않음 + 순서에 따라서 중요도가 없음 

-> 아까 순서와 빈도로 가공하여 분석하라고 했는데 한국어는 어려움/

2. 평서문 의문문

전처리를 하면 이걸 다 때서 처리를 할텐데.,?를 때면 어떤 문인지 모른다/

3. 주어, 목적어를 생략

영어는 love라고만 말하는 경우가 있냐? 없다 이러면 미국인도 못 알아듣는다 > 한국어는 주어와 동사를 생략하더라/ ex) 밥은? 이라고 해도 인간은 알아듣는다/

4. 한자

광교의 뜻이 한자뜻이다 -> 새절역을 우리말로 풀면 새로 절이~라는 의미부여가 가능한데 의미를 활용하지 않고 문자로서만 쓰인다/

5. 외래어 혼용

한 문장 안에 3개의 국어, 댓글러, 전잘러는 가능한데 불편러는 왜 러가 붙었냐 = 그냥 사회적인 현상으로 만들어진 조어다/

6. 한국어는 독 한글자, 영어는 dog 3글자 

-> 음절이 한 글자인게 딥러닝 처리하기가 어렵다/

 


7. 영어를 일본어로 번역, 한국어로 번역/

- 3) 텍스트 분석 프로세스(★ 책 보는게 좋을 듯)

=> 감성분석 프로세스

 

1) 입력
2) 토큰화
3) 불용어 처리
4) 부정의 의미 처리
5) 어간 추출
----------------------------보니 여기까지 그냥 자연어전처리임--------------------------
6) 분류

 

 

4) 자연어 처리 = 텍스트 분석을 위한 텍스트 데이터의 가공

①정규화 : 단어의 통일 = 같은 뜻을 같은 여러개의 단어를 통합(스테밍과 표제어 추출)/
②토큰화 : 단어 식별 = 띄어쓰기 줄바꿈 등을 기준으로 앞의 단어나 문장 등을 토큰으로 구분/
③품사태깅 : 차에서 내리자마자 차였다 -> 같은 차지만 품사를 매기면 명사, 동사
pruning : 빈도가 적은 단어 걍 삭제하자/
약어전개 : ML을 머신러닝으로 바꾸고 문서를 보니 어떤데는 ML, 어디는 기계학습, 어디는 머신러닝이면 통일화/


=>기본적인 1차 프로세스
토큰화 > 품사태깅 > 불용어 > 표제어 추출 등 필수 해야할 것들
-> 전문적인 단계
형태소분석(토큰화, 품사태깅, 철자수정, 개체명인식), 
> 구문 : , 
> 의미 : , 
> 화용 : 너 밥먹었니? = 안 먹었으며 나랑 같이가자일수도있고 너 밥?빵?행버거? 먹었니를 분석/

★ 이 부분은 다시 봐도 필요가 없다. 공식 프로세스 공부를 하자

=> 형태소 분석(= 품사로 분리)

차 = 마시는 차일까? 타는 차일까?를 분석하는 것??/
자립 : 강아지 고양이/ 의존 : / 실질 : / 형식 :  -> 자립과 실질을 주로 처리한다/

=> nlp 처리 개념 예

1) 형태소 분석 : 품사태깅, 개체명인식, 철자교정, 단어식별을 이용하여 형태소 분석
2) 키워드 추출 : 이 댓글은 정치에 대한 댓글, 이 댓글은 예술중에 미술품중에 한국중에 신라시대의 이야기를 하는 거 같다(개체명인식, 관계추출에 활용됨)
3) 문자열 분석 : 특정 단어 다음에 나올 확률분포를 구함 > 동해물과 () 닳도록 > ()에 어떤 단어가 들어갈거 같니?

 

4) 벡터공간모델 : 문서를 벡터로보고 단어들을 차원으로 봐서 통계적 처리
5) 동시출현 단어 : 두 단어가 동시출현하는 빈도를 구함 > 어떤 아이의 일기를 영희는 자주 나오는데 경수는 드문드문나오더라로 철수와 영희와 경수가 어떤 정도로 친한게 유추가능/
6) 토픽모델링 : 아까는 단순한 키워드 찾기 이건 주제를 찾기/
7) 감성분석 : 
8) 의미연결망 분석 : 

※ 용어

-> 벡터화(벡터 공간 모델) : 문서 1 - 서울에서 지하철을 타고 광교로 이동했다. > 문장 하나하나가 벡터(행)가 되고 단어가 차원(열)이 된다 = 문장이 공간을 잡고 단어가 그 안에 데이터로 들어간다는 거지/

문서 1 - 서울에서 지하철을 타고 광교로 이동했다.
문서 2 - 점심을 맛있게 먹었다
문서 3 - 내일 점심에 뭐해?

토큰 : 서울 지하철 타다 광교 이동하다 점심 맛있다 먹다 내일 무엇

라면 여기서 단어를 다 뽑아서 10개의 토큰을 추출하고 포함되는 단어를 1 아닌 단어를 0으로 해서 벡터화한다

-> 벡터화 이후

1111100000
0001011100
0000010011 오,,, 신기하다 난 사과 배를 10 01로만 해봤지 문장이 여러 개면 각각을 따로 보는게 아니고 전 문장에서의 모든 단어를 다 뽑아서 토큰으로 뽑고 포함여부를 보네

주의점 : 

1. 많은 경우에 대부분이 0인 희소행렬 때문에 열이 늘어나서 그냥 포함한 것만 쓰자
+ 오토인코더를 통해서 차원을 축소 시킨다(만약 차원으로 나오는 데이터가 10000개 정도 된다고 치자 > 인코딩 차원을 100개로 하면 10000개가 100개로 줄어들겠지 > 그러면 누가 인코더를 만들어 놨으면 우리는 그 인코더를 써서 다 100개의 데이터로 바꾸면 된다/

2. 이렇게 벡터화하고 통계적 분석을 하여 중요도가 높은 단어, 문서의 유사도를 구함/


-> TF : '각!!' 문서에 들어간 단어의 빈도수를 벡터로 표현/
-> IDF : '다수!!'의 문서에 중복 등장하는 단어는 해당 문서에서만의 중요한 특성이 아닐 가능성이 큼 > 여러 문서에 반복 등장하는 단어에 대한 중요도를 낮추는 정규화/
ex) ~이다는 모든 문서에 다 나올 것이다 컴퓨터, 머신러닝이라는 단어가 나오면 it관련 문서겠구나를 알 수 있다 > 정치기사에만 주로 나올법한 단어들, 연애소설에만 나오는 단어들은 구분이 된다 > 이다는 문서의 특성을 나타내는 단어가 아닐 가능성이 크다/

 

- 오렌지 실습(다 어떤 걸 의미하는지 개념 공부를 하면서 오렌지로 보고 최종은 코드로 공부하자)


=> 워드 클라우드., ..., .., ~ 등 다 빼야겠구나 = 빈도를 보고 이상한거 빼는거구나/
=> 전처리 : 항목들 다 공부하면서 알게 되겠지? 모르면 알아봐라 > 이런 걸 처리하고 숫자로 바꾸면 우리가 하는 말을 순서, 수량기반으로 인식하고 통계적으로 바라볼 준비가 된것이다/

 

 

 

 

13일차

 

4) 분석을 위한 데이터의 가공

토큰화>텍스트 클리닝>품사태깅>불용어>표제어추출/

-> 텍스트 클리닝의 3대 도구(하는 이유 : 일관성 있는 코드 가공)
이런 것들은 코드로 하는게 아니고 워드로 한다 얼마나 편하냐~ 이미 그런거 해주는 도구들이 있다/

1. find & replace : 찾아서 바꾸기 = ctrl + f/
ex) 서울을 서울특별시로 바꾸기/

2. 맞춤법 도구 + 사용자 사전 : 아래 한글 보면 알아서 띄어쓰기, 맞춤법 고쳐주는 거 등/

 

-> 사용자 사전

이거 틀린 단어 같은데?? 하고 목록을 보여주는 단어가 있다(나이브 베이즈 같은 느낌[이런 입력이 들어오면 예전 인풋에 의거하여 안 이렇게 출력을 내야겠네]인데 특허 사무실가면 이것부터 백업한단다 > 짜장면이 많이 쓰이는지 자장면이 많이 쓰이는지를 알아야 맞춤법 도구가 건들이면 안되는 것들은 안 건들인다/

3. RE(정규표현식)
+ 데이터 증강은 그냥 사진 우클릭해서 돌리기만 해도 됨/

-> 오픈리파인 : 클리닝 툴 -> 영어 밖에 안됨/

 

 

- 오렌지 인코딩 실습1(오렌지 공식 문서가 있다)

=> 전처리 : 결과가 바로 좌측하단에 토큰 개수랑 type은 뭘까?/

 


=> BOW : 토큰화한 단어들을 흔들어서 섞어 버리기 -> 44개의 인스턴스 2909의 피쳐 = 너무 희박한 데이터는 버리고 tf - idf로 3000까지 줄인 모양 > idf를 끄면 정수, 키면 실수로 나오는데 정수가 이제 tf가 빈도가 몇번 나왔나이다 > 근데 둘 다 idf로 하면 중요도로 feature를 낮춰야하는데 2909로 똑같네?? > 워드 클라우드를 보아하니 그냥 원래 2909차원이었다 > 왜 똑같을까..?/

=> 문서 임베딩

단어들을 수백, 수천 차원으로 임베딩함 -> 결과를 보면 차원1~300까지 300개의 차원으로 임베딩 > 원래는 전처리 클릭해보면 2만 7천개의 단어로 열이 생겨야하는데 실수로 처리하여 27000개의 차원을 실제 300개의 차원으로 줄임 > 테이블을 보면 원래는 6개의 열인데 300개가 추가된다/

★ 최종 결론 : 3000차원 쓸래 워드 임베딩으로 300차원 쓸래?이다 27000은 총 단어 수이고 2909가 중복 제거한 단어이다 > 근데 임베딩의 300은 진짜 4차원 공간 등의 공간이고 3000차원은 feature이다 열이다/

- 실습 2

순서 : ★★★워드 클라우드, BOW, 임베딩->hierarchical clustering, 감정분석, 토픽모델링, 키워드 추출★★★

-> BOW 결과

IDF는 안하고 TF만 한 것으로 빈도수를 체크하여 미달인 단어는 제거한다 > 근데 여기서는 기준이 몇인지 모르겠지만 제거되는 단어가 없다/

-> 2.2 BOW 결과

IDF 결과 전체 문서에서의 비율을 따져서 중요도를 실수로 낸다/

BOW를 하고 워드 카운트를 엑셀로 저장한다 > 그리고 오름차순으로 정렬해서 쓸데 없는거 delete키로 다 삭제하고 전처리를 처리함 > 다시 csv로 저장한 다음 전처리에서 lexicon에서 선택하면 됨 > 아까 만든 엑셀을 워드로 봐서 맞춤법이랑 띄어쓰기 처리하고 다시 가져와서(이게 저장한 데이터가 문서를 카운트한 데이터라서 처음 데이터 로드로 다시 사용하는 것은 아닌거 같다) 전처리한다 > 데이터를 save하고 처리하고 다시 사용하는거 좋은 거 같다!/

-> 순서 : 엑셀 > 한글 > 맞춤법 조정 > pdf > 엑셀

맞춤법 고치기 : https://alldic.daum.net/grammar_checker.do
pdf TO 엑셀 사이트 : https://www.pdf2everything.com/kr/pdf2excel/

=> 임베딩 결과를 테이블로 보면 0이 대부분이다 = 한국어 처리 못함ㅋㅋㅋㅋ 그러면 korean 왜함?/

=> 감성분석 결과

임베딩 결과의 컬럼으로 감성분석을 하면 마지막 열에 결과가 +, -로 나옴/

 

- 개념 정리

1. 패딩 : 최대 길이 문장으로 맞춘다 근데 0을 쓰기 때문에 단어의 시작 토큰 번호를 1번부터 해야겠다/
2. 한국어 전처리 : 띄어쓰기, 맞춤법 -> 이런 전처리 툴도 있지만 워드로 하는 게 더 쉬울 것이다
3. 언어 모델 : 언어 모델을 다음에 나올 말을 통계적 확률을 이용한 방법과 인공 신경망을 이용한 방법 2가지
1) 통계적 : 카운트 기반 = 이 문서의 총 단어를 봤을 때 an, adorable, little, boy, is, spreading, smiles이면 an다음에 adorable이 나올 확률을 봄/

2) ngram : 

4. 단어 표현

1) 국소표현, 분산표현
① 국소표현
1> bow : 텍스트 데이터에서 순서는 고려하지 않고 단어들의 출현 빈도에만 집중하여 수치화/ + 단어들을 흔들어 놓는다/

② 분산표현


4) tf - idf

모든 문서에서 자주 등장하는 단어는 중요도가 낮다고 판단, 특정문서에서만 자주 등장하는 단어는 중요도가 높다고 판단, 영어 기준으로 the, a와 같은 불용어는 모든 문서에 자주 등장하기 마련/ -> 중요도가 낮은 애들은 걸러내어 차원을 낮추어 버림/

9. 워드 임베딩
000000010은 공간적 낭비를 일으킴 -> 밀집표현/
2) 밀집표현 : 10000개의 차원을 128개의 실수값 차원으로 줄임 -> 단어를 밀집 벡터의 형태로 표현하는 방법을 워드 임베딩이라고 함/-> 오렌지의 임베딩은 help를 보면 fastext를 써서 임베딩한 거다/

=> 워드투벡터

한국 - 서울 + 도쿄 = 일본/
-> cbow : 해당 단어 뿐아니라 해당 단어 주변의 단어를 같이 봄/ 철수와 영희와 운동장에서 뛰어 놀고 있다에서 특정 단어 하나가 아니라 그 단어의 전후 단어들과 같이 학습시킴/

=> fastext 

단위 생각 등으로 더 이상 쪼갤수없게 나누는게 워드투백터/ ㄷ, ㅏ, ㄴ으로 까지 가는게 fastext(영어로 보면 apple, a,p,p,l,e이다)/

15, 16, 17 등등 만약 내가 보아즈에 안들어갔으면 트랜스포머 구조를 봤을까?? 너무 감사하다 진짜/

- 실습 3(영어 감성 분석)

=> 데이터

https://file.biolab.si/text-semantics/data/proposals-to-government-1k/

 

Index of /text-semantics/data/proposals-to-government-1k/

 

file.biolab.si

정부에 대한 요청 데이터로 이거를 코퍼스가 아니라 도큐먼트 임포트로 부름 > 1100건의 데이터/

 

-> 전처리 

스테머로 하면 e를 못잡음 peaple을 peapl로 다 e를 없애더라/

=> 감성분석

-> liuhu 로 하면 감성 분석 값이 수치로 실수로 나옴/
-> vader 감성을 단순하게 +-가 아니고 긍정이 0.027 부정이 0.024 중립이 0.924로 처리/+ 결과를 보면 대부분 중립인 걸보니 정부에 요청하는 글이니 너무 기뻐요 슬퍼요 이런말 보다는 요구의 중립의 말을 많이 할 거다/
-> sentiArt : 대박이다 슬픔, 화남, 두려움 등 전체 감정을 다 보여줌/ -> 이게 되는 이유는 누군가 이런 문장에 이 문장은 화남, 저 문장은 두려움이라고 라벨링을 해서 그렇다/
-> lilah : 감정의 종류가 다양하게 다름/

=> 토픽 모델링

토픽 키워드 10개가 나오는데 LDA로 보면 경제, 교통, 일자리, 등등 토픽이 나온다/

=> 키워드 추출

tf-idf 점수 기준으로 뽑으면 세금, 자동차, 일자리, 보험, 재산 탑 5이네 -> car 보다 vehicle이 더 높은게 정부에 요청하는 글이니 공적인 표현을 더 쓰더라/

=> 임베딩

원래는 한 번 걸러져도 9613개의 단어가 워드 클라우드에 있었는데 300개 차원으로 fastext로 차원 축소함 > 거리를 보면 많이 뭉친 애들이 있음(가깝다고 판단 되는 애들이 있음) > 그리고 코퍼스 뷰어로 보면 어떤 문서인지 볼 수 있다/

★ 데이터로 인사이트 얻기 정리(실습 동영상에서 연속적으로 나오는 순서를 적어라)

-> 1. 워드 클라우드 : 단어의 빈도
2. BOW : 문서 별로 단어의 빈도수, 문서 전체에서 단어의 중요도/
3. document embedding : 거리를 재서 유사한 문서들을 파악(-> 보아즈에서 처음 읽은 논문이 임베딩으로 여왕과 여자의 거리가 가까운 내용이었음) 간에 클러스터링, 클래시피케이션/
4. 감정분석 : 의견을 분석할 수 있다/
5. 토픽 모델링 : 탑 10 주제 확인 가능/
6. 키워드 추출 : 토픽 모델링과 유사하게 많이 키워드를 확인하여 토픽 확인 가능/

- A반 실습 1(동화 데이터 셋)

=> bow 결과가 그냥 통계적으로 count를 센것에 보다 두개의 단어가 적더라 -> 빈도수에 따라 중요하지 않은 단어를 제거하는 bow의 기능이 보임/

=> 거리

거리에서 MDS를 하면 가까운 애들의 차원을 입체적으로 보여준다 그리고 가까운 애들을 선택하고 테이블로 그리면 동화는 동화끼리 몰려있고 동물은 동물 따로 떨어져있는 모습이 보임/

- A반 실습 2(다음 영화 리뷰 데이터 셋)

=> 감정분석 결과

 

다 0임 = 한국어라서 못함 = 한국 감성을 모름 > 그래서 한국사람이 만들어 둔 감성 사전이 있으면 좋지 않을까?? > neg_pol_word, pos_pol_word(군산)

-> 군산 대학교 데이터 셋

KnuSentiLex-master.zip
0.56MB

 

양극적 워드 = 긍정적 단어 사전 
음극적 워드 = 부정적 단어 사전, ㅠㅠ, ㄷㄷㄷ 추가/

-> 이거로 감성 분석에 파일 지정하면 와,,, 이런게 사전을 이용하는 거구나/

 

 

Comments