본문 바로가기

AI/NLP Study

(7)
[NLP] BM25를 이용한 영화 추천 키워드 기반의 랭킹 알고리즘 BM25 BM25(a.k.a Okapi BM25)는 주어진 쿼리에 대해 문서와의 연관성을 평가하는 랭킹 함수로 사용되는 알고리즘으로, TF-IDF계열의 검색 알고리즘 중 SOTA인 것으로 알려져 있다. 엘라스틱서치에서도 유사도 알고리즘으로 BM25 알고리즘을 채택하였다. BM25 계산 BM25에서 점수를 계산할 때는 아래와 같은 식을 사용하여 계산한다. 키워드 $[q_1, q_2, \ldots, q_n]$을 포함하는 쿼리 $Q$가 주어질 때 문서 $D$에 대한 BM25 점수 계산을 다음과 같다. $$\begin{aligned} \text{score} (D, Q) &= \sum_{i=1}^n \text{IDF}(q_i) * \frac{f(q_i, D)*(k_1 +1)}{f(q_..
[NLP] 임베딩 편향성 이번에는 워드 임베딩에 숨어 있는 편향성을 측정하는 대표적인 방법론인 Word Embedding Association Test(WEAT)라는 기법에 대해 알아보고, 이를 활용해 직접 학습시킨 Word2Vec 임베딩 내의 편향성을 측정해 보면서 이 방법론이 우리의 편향성을 잘 반영하는지도 알아보겠습니다. 위 그림은 'Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings'라는 논문에 포함된 것입니다. 이 논문의 저자는 학습된 Word Embedding을 2차원으로 차원 축소하여 시각화했을 때, 젠더 중립적인 단어임에도 불구하고 Programmer, Doctor, Engineer 등의 단어는 남성 대명사 He에 가깝게..
[NLP] 워드 임베딩 자연어를 기계가 처리할 수 있도록 전처리 과정에서 텍스트를 벡터로 변환하는 과정을 벡터화(Vectorization)라고 합니다. 지금까지 벡터화 방법으로 DTM, TF-IDF를 배웠습니다. 그리고 이와 비슷하지만 다른 원-핫 인코딩(one-hot encoding)이라는 방법이 있습니다. DTM(Document-Term Matrix) : 문서에서 단어의 등장 빈도만을 고려해 벡터화하는 방법 TF-IDF(문서-역문서 빈도) : 불용어 같이 거의 모든 문서에서 등장하지만 딱히 의미가 있지 않은 단어가 있기 때문에 단어마다 중요 가중치를 다르게 주는 방법 원-핫 인코딩(one-hot encoding) : 가지고 있는 단어장을 기준으로 해당하는 단어의 인덱스에만 1이고 나머지는 0인 벡터 간단하게 원-핫 인코딩에..
[NLP] 텍스트 카테고리 분류 로이터 뉴스데이터에 대해 카테고리 분류를 진행하겠습니다. 이는 텐서플로우 데이터셋에서 제공하고 있는 데이터로 아주 쉽게 다운로드가 가능합니다. 필요한 모듈을 임포트하고 데이터를 다운로드하여 오겠습니다. from tensorflow.keras.datasets import reuters import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd (x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=10000, test_split=0.2) tensorflow.keras.datasets.reuters.load_data에는 다양한 파라미터가 ..
[NLP] 텍스트 벡터화 단어 빈도를 이용한 벡터화 (1) Bag of Words (2) Bag of Words 구현해보기 (3) DTM과 코사인 유사도 (4) DTM의 구현과 한계점 (5) TF-IDF (6) TF-IDF 구현하기 LSA와 LDA (1) LSA (2) LSA 실습 (3) LDA (4) LDA 실습 텍스트 분포를 이용한 비지도 학습 토크나이저 (1) 형태소 분석기와 단어 미등록 문제 (2) soynlp 1. 단어 빈도를 이용한 벡터화 (1) Bag of Words 자연어 처리에서 전처리 과정에 텍스트를 벡터로 변환하는 벡터화(Vetorization)라는 과정이 있습니다. 벡터화 방법으로는 크게 통계와 머신 러닝을 활용한 방법, 그리고 인공 신경망을 활용하는 방법으로 나눠볼 수 있습니다. 그중에서 Bag of Wo..
[NLP] 단어사전 만들기 이 전 글에서 자연어 전처리 방법 중 토큰화에 대해 알아보고 관련된 모델을 공부했습니다. 이번에는 여러 한국어 형태소 분석기를 직접 사용해보고 그 결과를 비교해보겠습니다. 먼저 실습을 진행할 Google Colab의 환경 설정을 해줍니다. # Mecab 설치 !apt-get update !apt-get install g++ openjdk-8-jdk !pip install konlpy JPype1-py3 !bash length: min_len = length if max_len < length: max_len = length sum_len += length print('문장의 최단 길이 : ', min_len) print('문장의 최장 길이 : ', max_len) print('문장의 평균 길이 : ', ..
[NLP] 자연어 전처리 : 토큰화 우리는 수많은 문장 속에서 살아갑니다. 친구에게 온 메세지, 지금 읽고 계신 이 글까지도 문장입니다. 이 모든 것들을 일상에서 자연히 발생하여 쓰이는 언어, 자연어(Natural language)라고 부릅니다. 자연어의 반대 말로 대표적인 것이 프로그래밍 언어(Programming language)입니다. 그렇다면 우리가 일상적으로 사용하는 자연어와 프로그래밍 언어 사이의 본질적인 차이가 무엇일까요? 형식 언어 이론에 따르면 자연언어 : 문맥 의존 언어 (context sensitive language) 프로그래밍언어 : 문맥 자유 언어 (context free language) 로 구분할 수 있습니다. 문맥 자유 언어란 문맥 의존 언어에 포함되는 개념이라 프로그래밍 언어도 자연언어 범주안에 들어 있습니..