1. 텍스트 마이닝
Text mining, also known as text data mining, is the process of transforming unstructured text into a structured format to identify meaningful patterns and new insights. By applying advanced analytical techniques, such as Naïve Bayes, Support Vector Machines (SVM), and other deep learning algorithms, companies are able to explore and discover hidden relationships within their unstructured data.[1]
텍스트 데이터 마이닝이라고도하는 텍스트 마이닝은 의미있는 패턴과 새로운 인사이트를 식별하기 위해 구조화되지 않은(비정형) 텍스트를 구조화 된 형식으로 변환하는 프로세스다. Naïve Bayes, SVM (Support Vector Machine) 및 기타 딥 러닝 알고리즘과 같은 고급 분석 기술을 적용함으로써 기업은 비정형 데이터 내에서 숨겨진 관계를 탐색하고 발견 할 수 있다.
2. 지식 그래프
텍스트에서 의미있는 패턴과 새로운 인사이트를 만들어낸다는게 어떤 의미인지 아래의 글을 보면 바로 이해할 수 있다.
Take a query like [taj mahal]. For more than four decades, search has essentially been about matching keywords to queries. To a search engine the words [taj mahal] have been just that—two words.
But we all know that [taj mahal] has a much richer meaning. You might think of one of the world’s most beautiful monuments, or a Grammy Award-winning musician, or possibly even a casino in Atlantic City, NJ. Or, depending on when you last ate, the nearest Indian restaurant. It’s why we’ve been working on an intelligent model—in geek-speak, a “graph”—that understands real-world entities and their relationships to one another: things, not strings.[4]
40 년 이상 동안 검색은 본질적으로 키워드와 검색어를 일치시키는 것이었다. 검색 엔진에서 [taj mahal]이라는 단어는 그저 두 단어였다. 그러나 우리 모두는 [taj mahal]이 훨씬 더 풍부한 의미를 가지고 있다는 것을 알고 있다. 세계에서 가장 아름다운 기념물 중 하나, 그래미상을 수상한 뮤지션, 또는 뉴저지 주 애틀랜틱 시티의 카지노를 생각할 수도 있다. 이것이 바로 우리가 실제 개체와 문자열이 아닌 사물과의 관계를 이해하는 지능적인 모델("그래프")을 개발하는 이유다.
The Knowledge Graph enables you to search for things, people or places that Google knows about—landmarks, celebrities, cities, sports teams, buildings, geographical features, movies, celestial objects, works of art and more—and instantly get information that’s relevant to your query. This is a critical first step towards building the next generation of search, which taps into the collective intelligence of the web and understands the world a bit more like people do.
지식 그래프를 사용하면 랜드 마크, 유명인, 도시, 스포츠 팀, 건물, 지리적 특징, 영화, 천체, 예술 작품 등 Google이 알고있는 사물, 사람 또는 장소를 검색하고 쿼리와 관련된 정보를 즉시 얻을 수 있다. 이것은 웹의 집단 지성을 활용하고 사람들이하는 것처럼 세상을 좀 더 이해하는 차세대 검색을 구축하기위한 중요한 첫 단계다.
구글은 대부분의 인물 정보같은 검색어와 관련된 정보를 위키피디아를 바탕으로 만들어서 보여주는데, 네이버와 다음에서는 위키피디아를 사용하지 않는 이유가 있는걸까? 궁금하다.
뽀로로를 검색해보고 깨달았다. 네이버와 다음은 가상 캐릭터는 인물 정보를 제공해주지 않는다. 왜 안하는 걸까? 생각해보면 네이버와 카카오 모두 웹툰, 시리즈, 카카오페이지로 돈을 많이 벌고있다. 그리고 사람들은 웹소설, 웹툰 인물을 검색해보는걸 좋아하고 인물 정리는 대부분 나무위키에 되어있어 나무위키에 들어간다.
어차피 네이버랑 카카오에서 웹소설, 웹툰 서비스하니까 그 데이터를 통해 인사이트를 얻기에도 유리한 위치에 있는데 왜 안하는걸까? 내 생각보다는 돈이 안되는걸까?
3. 텍스트 표현 모델
텍스트 마이닝을 위해서는 비정형 데이터인 텍스트를 정형화(단순화)하는 모델이 필요하다.
1) BOW 모델
The bag-ofwords model is a simplifying representation used in natural language processing and information retrieval (IR). In this model, a text (such as a sentence or a document) is represented as the bag (multiset) of its words, disregarding grammar and even word order but keeping multiplicity. The bag-of-words model has also been used for computer vision. The bag-of-words model is commonly used in methods of document classification where the (frequency of) occurrence of each word is used as a feature for training a classifier.[4]
BOW 모델은 가장 기초적인 텍스트 표현 모델로 자연어 처리 및 정보 검색 (IR)에 사용되며 표현을 단순화 한다.
이 모델에서 텍스트 (예 : 문장 또는 문서)는 문법과 단어 순서를 무시하지만 다중성을 유지하면서 단어의 가방 (다중 집합)으로 표현된다. bag-of-words 모델은 컴퓨터 비전에도 사용되었다. bag-of-words 모델은 일반적으로 각 단어의 발생 빈도를 (분류자를 훈련하는 피처로)사용하는 문서 분류 방법에 사용된다.
/* 파이썬으로 BOW 모델 사용 예시[4]*/
from keras.preprocessing.text import Tokenizer
sentence = ["John likes to watch movies. Mary likes movies too."]
def print_bow(sentence: str) -> None:
tokenizer = Tokenizer()
tokenizer.fit_on_texts(sentence)
sequences = tokenizer.texts_to_sequences(sentence)
word_index = tokenizer.word_index
bow = {}
for key in word_index:
bow[key] = sequences[0].count(word_index[key])
print(f"Bag of word sentence 1:\n{bow}")
print(f'We found {len(word_index)} unique tokens.')
print_bow(sentence)
문장을 문법과 순서를 무시하고 단어 단위로 쪼개어 한 가방에 담는다. 쪼개진 단어는 하나의 긴 벡터로 표현된다. 벡터의 각 차원은 하나의 단어를 대표하고, 해당 차원에 대응하는 가중치는 해당 단어가 문장에서 얼마나 중요한지를 나타낸다. 가중치는 일반적으로 TF-IDF를 사용해서 계산된다.
공식은 다음과 같다.
TF-IDF(t, d) = TF(t, d) x IDF(t)
단어 빈도 TF(t,d)의 경우, 이 값을 산출하는 가장 간단한 방법은 단순히 문서 내에 나타나는 해당 단어의 총 빈도수를 사용하는 것이다. 문서 d 내에서 단어 t의 총 빈도를 F(t,d)라 할 경우, 가장 단순한 TF 산출 방식은 TF(t,d) = F(t,d)로 표현된다.[5]
역문서 빈도는 한 단어가 문서 집합 전체에서 얼마나 공통적으로 나타나는지를 나타내는 값이다. 전체 문서의 수를 해당 단어를 포함한 문서의 수로 나눈 뒤 로그를 취하여 얻을 수 있다.[5]
특정 문서 내에서 단어 빈도가 높을 수록, 그리고 전체 문서들 중 그 단어를 포함한 문서가 적을 수록 TF-IDF값이 높아진다. 따라서 이 값을 이용하면 모든 문서에 흔하게 나타나는 단어를 걸러내는 효과를 얻을 수 있다. IDF의 로그 함수 안의 값은 항상 1 이상이므로, IDF값과 TF-IDF값은 항상 0 이상이 된다. 특정 단어를 포함하는 문서들이 많을 수록 로그 함수 안의 값이 1에 가까워지게 되고, 이 경우 IDF값과 TF-IDF값은 0에 가까워지게 된다.[5]
즉, IDF는 일종의 패널티다. 하나의 단어가 많은 문장에 등장한다면, 어떤 문장에서 특수한 의미를 가지고 있다고 하기 힘들기 때문이다.
* TF-IDF란?[5]
TF-IDF(Term Frequency - Inverse Document Frequency)는 정보 검색과 텍스트 마이닝에서 이용하는 가중치로, 여러 문서로 이루어진 문서군이 있을 때 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지를 나타내는 통계적 수치이다. 문서의 핵심어를 추출하거나, 검색 엔진에서 검색 결과의 순위를 결정하거나, 문서들 사이의 비슷한 정도를 구하는 등의 용도로 사용할 수 있다.
TF(단어 빈도, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내는 값으로, 이 값이 높을수록 문서에서 중요하다고 생각할 수 있다. 하지만 단어 자체가 문서군 내에서 자주 사용 되는 경우, 이것은 그 단어가 흔하게 등장한다는 것을 의미한다. 이것을 DF(문서 빈도, document frequency)라고 하며, 이 값의 역수를 IDF(역문서 빈도, inverse document frequency)라고 한다. TF-IDF는 TF와 IDF를 곱한 값이다.
IDF 값은 문서군의 성격에 따라 결정된다. 예를 들어 '원자'라는 낱말은 일반적인 문서들 사이에서는 잘 나오지 않기 때문에 IDF 값이 높아지고 문서의 핵심어가 될 수 있지만, 원자에 대한 문서를 모아놓은 문서군의 경우 이 낱말은 상투어가 되어 각 문서들을 세분화하여 구분할 수 있는 다른 낱말들이 높은 가중치를 얻게 된다.
2) N-gram 모델
하지만 문장을 단어 단위로 구별하는 것은 별로 좋은 방법이 아니다. Nature, Language, Processing 각각의 의미와 Natural language processing의 의미의 차이처럼, 단어 각각의 의미와 조합한 단어의 의미가 크게 다르기 때문이다.
그래서 N-gram 방법을 사용한다. N-gram 모델은 자주 함께 출현하는 단어 n개를 하나의 그룹으로 묶어 벡터로 표현하는 방법이다. '자주'라는 말에서 알 수 있듯이 통계에 기반한 접근을 하고 있으므로 SLM(Statistical Language Model, 통계적 언어 모델)의 일종이다.
실제로는 동일한 단어가 다양한 품사로 변하지만 비슷한 의미를 가진 경우를 고려해서 어간 추출 처리를 해 다른 어형을 가진 단어를 하나의 어간 형식으로 통일시킨다고 한다.
N-gram 모델에 대한 자세한 설명은 아래의 링크[6]에 나와있다.
3) 토픽 모델
고등학교때 문제를 풀다보면 어느 과목이든 문제에서 물어보려고 하는게 뭐인지 주제를 찾으라고 했다. 토픽 모델은 그처럼 문서에서 (대표성을 가지는)주제를 찾기 위한 통계적 모델이다.
기계 학습 및 자연언어 처리 분야에서 토픽 모델(Topic model)이란 문서 집합의 추상적인 "주제"를 발견하기 위한 통계적 모델 중 하나로, 텍스트 본문의 숨겨진 의미구조를 발견하기 위해 사용되는 텍스트 마이닝 기법 중 하나이다. 특정 주제에 관한 문헌에서는 그 주제에 관한 단어가 다른 단어들에 비해 더 자주 등장할 것이다. 예를 들어 개에 대한 문서에서는 "개"와 "뼈다귀"라는 단어가 더 자주 등장하는 반면, 고양이에 대한 문서에서는 "고양이"와 "야옹"이 더 자주 등장할 것이고, "그", "~이다"와 같은 단어는 양쪽 모두에서 자주 등장할 것이다. 이렇게 함께 자주 등장하는 단어들은 대게 유사한 의미를 지니게 되는데 이를 잠재적인 "주제"로 정의할 수 있다. 즉, "개"와 "뼈다귀"를 하나의 주제로 묶고, "고양이"와 "야옹"을 또 다른 주제로 묶는 모형을 구상할 수 있는데 바로 이것이 토픽 모델의 개략적인 개념이다. 실제로 문헌 내에 어떤 주제가 들어있고, 주제 간의 비중이 어떤지는 문헌 집합 내의 단어 통계를 수학적으로 분석함으로써 알아 낼 수 있다.[7]
Text data mining is the process of transforming unstructured text into a structured format to identify meaningful patterns and new insights. By applying advanced analytical techniques, such as Naïve Bayes, Support Vector Machines (SVM), and other deep learning algorithms, companies are able to explore and discover hidden relationships within their unstructured data.[1]
텍스트 데이터 마이닝이라고도하는 텍스트 마이닝은 의미있는 패턴과 새로운 인사이트를 식별하기 위해 구조화되지 않은(비정형) 텍스트를 구조화 된 형식으로 변환하는 프로세스다. Naïve Bayes, SVM (Support Vector Machine) 및 기타 딥 러닝 알고리즘과 같은 고급 분석 기술을 적용함으로써 기업은 비정형 데이터 내에서 숨겨진 관계를 탐색하고 발견 할 수 있다.
대표적으로 자주 사용되는 토픽 모델에는 PLSA와 LDA가 있다.
(1) PLSA[8]
PLSA는 K개의 토픽과 M개의 문장이 있다고 가정했을 때, 임의의 문장 d에 대해 N개의 단어가 있다면 각 단어에 대해 하나의 주제 z를 선택하고 현재 토픽에 기반하여 단어 w를 생성한다.
토픽 z와 단어 w를 생성하는 과정은 하나의 정해진 확률 분포를 따르기 때문에, 문장 d가 주어졌을 때 단어 w의 생성 확률은 아래와 같이 나타낼 수 있다.
(2) LDA[9]
각각 K, M 박스의 바깥에 있는 알파와 베타가 사전 디리클레 분포의 하이퍼파라미터다.
모델을 설명할 때 사용되는 각 변수의 의미는 다음과 같다.
LDA는 PLSA의 베이지안 버전이라고 볼 수 있다. 텍스트 생성 과정은 PLSA와 비슷하지만, 토픽 분포와 단어 분포에 각각 두 개의 디리클레 사전분포(알파, 베타)를 더한다.
베이지안 버전이라고 한 것은 확률을 보는 두가지 관점이 빈도주의와 베이지안인데, PLSA가 빈도주의의 아이디어를 사용해 해를 구하고 LDA는 베이지안의 아이디어를 사용해 해를 구하기 때문이다.
- 빈도주의와 베이지안 설명
빈도주의자들은 10,021/60,000이라는 값은 실험을 통해 우리가 확신하고 있는 주사위를 던져 3이 나올 확률이 1/6이라는 가설을 단지 확인시켜주는 데이터에 불과하다. 다시 말해, 10,021/60,000은 참된 확률값 1/6의 추정치에 불과하다는 것이다.(물론, 모수에 대한 직관적으로 값을 얻어낼 수 없다면, 이 추정치는 모수를 대신하는 중요한 값이 된다.) 빈도주의자들은 참된 확률값은 분포를 갖지 않으며, 고정되어있고 존재하지만 알려지지 않은 상수로 본다.
반면, 베이지안들은 참된 확률값은 분포를 가진다고 가정한다. 즉, 참된 확률값의 분포는 존재하지만, 참된 확률값이 단 하나로 고정되어 있지 않는 확률 변수(random variable)라는 의미이다. 따라서 우리는 사전확률분포에 대한 믿음이 있고, 실험(이 부분에서 컴퓨터의 연산능력을 활용한 시뮬레이션이 진행된다.)을 통해 자신의 믿음을 바꿀지 그대로 둘지를 결정하는 것이 아니라, 자신의 믿음을 업데이트해 나가면서 새로운 사후확률분포(새로운 믿음)를 만들어 내는 것이다.[10]
위의 설명에 나와있는 것처럼 빈도주의적 관점을 사용하는 PLSA는 주제 분포 P(z|d)와 단어 분포 P(w|z)를 정해진 미지의 상수라고 생각하고 해를 구하고, 베이지안적 관점을 사용하는 LDA는 토픽 분포와 단어 분포를 미지의 상수가 아닌 일정한 분포를 따르는 랜덤변수라고 생각하고 해를 구한다.
이러한 토픽 모델은 추천 시스템에서 콜드 스타트 문제를 해결하는데도 사용된다고 한다.
추천 시스템에서 콜드 스타트 문제는 대규모 사용자 데이터가 없는 상황에서 사용자 개인화 추천을 해야하는 문제다. 콜드 스타트 문제는 일반적으로 사용자/상품/시스템(커뮤니티)으로 나누어진다.
- New community: refers to the start up of the recommender, when, although a catalogue of items might exist, almost no users are present and the lack of user interaction makes it very hard to provide reliable recommendations
- New item: a new item is added to the system, it might have some content information but no interactions are present
- New user: a new user registers and has not provided any interaction yet, therefore it is not possible to provide personalized recommendations
이 문제와 콘텐츠 추천 알고리즘 관련해서는 링크에 자세히 나와있다.
사용자 콜드 스타트 문제를 해결하기 위해서는, 일반적으로 사용자가 등록한 정보를 바탕으로 타 플랫폼에서 정보를 가지고와서 사용자가 관심을 가질 만한 정보를 추측(토픽을 얻음)한다. 그 후 해당 사용자와 흥미 토픽이 비슷한 유저들을 찾아, 해당 유저들의 로그를 바탕으로 사용자가 관심을 가질만한 콘텐츠를 추천한다.
(4) 워드 임베딩
In natural language processing (NLP), Word embedding is a term used for the representation of words for text analysis, typically in the form of a real-valued vector that encodes the meaning of the word such that the words that are closer in the vector space are expected to be similar in meaning. [12]
자연어 처리에서 워드 임베딩이라는 용어는 텍스트 분석을 위한 단어 표현에 사용되는 용어다.
핵심 아이디어는 단어를 저차원 공간상의 고밀도 벡터에 투영시키는 것이다. 워드 임베딩은 각 단어를 K차원의 벡터로 매핑시키기 때문에 각 문장에 N개의 단어가 있다면, N*K차원의 행렬을 사용해 각 문장을 표현한다.
하지만 이런 표현으로 단어가 가지고 있는 고차원적인 의미를 찾긴 힘들기 때문에, 이를 기초로해서 더욱 고차원의 피처를 가공하는 모델이 필요하다.
[1] www.ibm.com/cloud/learn/text-mining
[2] en.wikipedia.org/wiki/Text_mining
[3] blog.google/products/search/introducing-knowledge-graph-things-not/
[4] en.wikipedia.org/wiki/Bag-of-words_model
[5] ko.wikipedia.org/wiki/Tf-idf
[7] 토픽 모델
[8] en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis
[9] en.wikipedia.org/wiki/Latent_Dirichlet_allocation
[10] m.kisdi.re.kr/mobile/colm/pro_view.m?seq=29947&category=W&selectPage=1
[11] en.wikipedia.org/wiki/Cold_start_(recommender_systems)
[12] en.wikipedia.org/wiki/Word_embedding
'Data' 카테고리의 다른 글
이미지 데이터가 부족할 때 생기는 문제(과적합; Over-fitting) 완화 방안 (0) | 2021.04.04 |
---|---|
[자연어처리]파이썬으로 데이터전처리하기 (0) | 2021.03.30 |
[피처엔지니어링]Word2Vec (0) | 2021.03.28 |
[피처 엔지니어링]피처 정규화 (0) | 2021.03.26 |
[자연어처리]파이썬에서 워드, PDF, RSS 읽고 말뭉치(corpus) 생성하기 (1) | 2021.03.12 |