[가짜뉴스구별]-Day 2(임베딩구현)

2022. 4. 2. 23:56·프로젝트/가짜 뉴스 분류

저번시간에 임베딩에 대해 간략하게 설명했고 오늘은 우리 데이터셋에 적용해보았다. 

첫번째 고려한 것은 우리가 우리 뉴스데이터로만 모델을 만들 것인지 아니면 pre-traine모델과 우리 모델을 결합하여 사용할 것인지 였다. pre-trained 모델은 말그대로 이미 사전 훈련된 모델이다. 더 방대한 데이터셋을 통해서 이미 훈련된 모델을 이용하는 것이었다. 모델을 구현하기 위해 고민을 많이 했었는데, 아래 글을 읽어보고 우리 데이터로만 모델을 구축해보기로 결정했다.

 

Word Embeddings in Python with Spacy and Gensim

Word Embeddings in Python with Spacy and Gensim

www.cambridgespark.com

우선 위 글에서 pre_trained모델과 customized 모델에 대한 설명만 요약하면 내가 이해하기 딱 쉬운 예시가 있었다.

예를 들어 ['뉴턴','트럼프'.'사과'] 이러한 텍스트를 구분할 때 사전 훈련 모델은 특정 주제를 가진것이 아니라 방대한 데이터로부터 모델을 만든 것이므로 저 셋중 어울리지 않는 것을 빼라고하면 사과를 뺄 것이다. 트럼프와 뉴턴 모두 사람이므로. 하지만 과학기술을 통해 훈련된 customized모델이 있다고 하면 뉴턴의 만류인력->사과로 연결되어 트럼프를 어울리지 않다고 뺄 것이다. 이렇게 특정주제를 가지는 문제에 대해서는 customized model이 정확성이 더 높다고 한다. 더 많은 내용은 윗글을 읽어보면 좋을 것 같다. 

[구현]

우선 gensim이라는 자연어처리 패키지에서 word2vec을 import해주고, 우리가 임베딩하고자 하는 단어들을 읽어준다.

from gensim.models import Word2Vec
sentences = list([i for i in data['text_token']])

다음으로 모델을 생성해준다.

model = Word2Vec(sentences, size=100, window=5, min_count=100, workers=1)

우리는 저번시간에 설명한 cbow방법을 사용했다. 함수안의 인자의 설명은 아래와 같다,

workers : 실행할 병렬 프로세스의 수, 코어수, 주로 4-6사이 지정
size : 각 단어에 대한 임베딩 된 벡터차원 정의, size=2라면 한 문장의 벡터는 [-0.1248574, 0.255778]와 같은 형태를 가지게 된다.
min_count : 단어에 대한 최소 빈도수. 
window :양쪽으로 몇 개의 단어까지 고려해서 의미를 파악할 것인지 지정하는 것
sample : 빠른 학습을 위해 정답 단어 라벨에 대한 다운샘플링 비율을 지정하는 것, 보통 0.001이 좋은 성능을 낸다고 한다.
sg : 1이면 skip-gram 방법을 사용하고, 0이면 CBOW 방법을 사용한다.(default==0)
iter : epoch와 같은 뜻으로 학습 반복 횟수를 지정한다.

이렇게 하고 나면 우리가 저번글에서 불용어를 제거하고 저장해놓은 "text-token"에 저장해 놓은 단어들을 임베딩한 모델이 만들어진다. 이러한 모델 생성과정을 매번 거치지 않으려면 모델을 저장해놓고 나중에 불러오면 된다,

#모델저장하기
model.save('/content/drive/MyDrive/Personal Project/Classify_fake-news/test.model')
#모델 불러오기
model=Doc2Vec.load('/content/drive/MyDrive/Personal Project/Classify_fake-news/fake_test.model')

우리가 만든 모델이 잘 만들어졌는지 확인하는 코드를 작성해보자.

# 비슷한 단어들 불러오기
model.wv.most_similar("facebook")
[('instagram', 0.6455816030502319),
 ('huffington', 0.5368248224258423),
 ('reddit', 0.5310718417167664),
 ('google', 0.5275131464004517),
 ('shared', 0.513275682926178),
 ('online', 0.5040249824523926),
 ('blog', 0.4823458790779114),
 ('page', 0.48091596364974976),
 ('deleted', 0.45882201194763184),
 ('website', 0.44746923446655273)]

우선 유사도가 높은 것들을 출력하는 함수를 사용해봐는데 결과를 보면 알 수 있듯이 잘 된 것 같다.

#postive하면 유사한것들을 나열 / negative하면 유사하지 않은 것들을 나열
model.wv.most_similar(positive=["trump","obama", "clinton"])
[('elect', 0.521462082862854),
 ('incoming', 0.47403275966644287),
 ('amateur', 0.47135597467422485),
 ('crooked', 0.4601602554321289),
 ('bush', 0.4409095346927643),
 ('reagan', 0.40974289178848267),
 ('candidacy', 0.4068627953529358),
 ('trail', 0.38788264989852905),
 ('campaigning', 0.3872838020324707),
 ('giuliani', 0.38666313886642456)]

이번에는 한개가 아닌 3개와 유사한 것들을 뽑아봤는데 역시나 잘 나온 것 같다.

이번시간에는 이렇게 word2vec을 이용해 임베딩을 해봤고 다음에는 이제 이 임베딩한 값들을 이용하여 본격적인 분류모델 설명과, 구현을 해보겠다.

728x90

'프로젝트 > 가짜 뉴스 분류' 카테고리의 다른 글

[가짜뉴스구별]-Final  (0) 2022.06.28
[가짜뉴스구별]-Day 3(모델적용)  (0) 2022.05.03
[가짜뉴스구별]-Day 1(임베딩 설명)  (0) 2022.04.02
[가짜뉴스구별]-Day 0  (0) 2022.03.28
'프로젝트/가짜 뉴스 분류' 카테고리의 다른 글
  • [가짜뉴스구별]-Final
  • [가짜뉴스구별]-Day 3(모델적용)
  • [가짜뉴스구별]-Day 1(임베딩 설명)
  • [가짜뉴스구별]-Day 0
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (472)
      • 알쓸신잡 (80)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Blog

    • 🏠 Home

    ✏️글쓰기
    💻 관리

    Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    DFS
    이분탐색
    그리디
    파이썬
    이것이취업을위한코딩테스트다
    BFS
    dp
    백준
    이코테
    나동빈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바