우리는 일상 속에서 많은 정보들을 SNS , 뉴스 등과 같은 텍스트를 통해 쉽게 접하고 얻을 수 있습니다. 이러한 데이터 속에서 특정 기업, 이와 관련된 인물, 제품 등을 인지할 수 있다면 다양한 정보가 기업에 직접적으로 어떠한 영향을 미치는 지 예측하는 요소로 활용할 수 있습니다. 이 글에서는 에이셀이 자연어 텍스트로 만들어진 데이터를 Natural Language Processing을 통해 처리하는 방법을 알려드립니다.
Introduction
중고매매단체 “현대 ∙기아차 매매업 진출 결사 반대”
위와 같은 문장에서 우리는 해당 문장이 어떤 기업과 관련이 있지 알 수 있을까요? ‘현대’와 ‘기아차’ 라는 단어가 기업명인 것을 알고, 해당 기업 간의 관계 또한 아는 사람이라면 쉽게 위의 문장은 ‘현대자동차’와 ‘기아자동차’ 가 관련된 글이라는 것을 알 수 있습니다. 이를 자동으로 식별 가능하다면, 더 많은 문서에서 효율적으로 정보를 수집할 수 있습니다. 예시를 통해, 에이셀은 어떻게 해당 이슈를 해결하고자 하였는지 알아보고자 합니다.
NLP pipeline for Ticker Mapping System
우리는 서론에서 소개한 이슈를 처리하는 방법으로 기업과 관련 있는 단어를 찾아 단어와 관련 객체를 연결하고, 지식 그래프를 이용한 객체 사이의 관계추론을 통하여 문제를 해결하고자 하였습니다. 이를 위해 Natural Language Processing; NLP(자연어처리) subtask가 연속된 정보 추출 파이프라인을 만들었습니다.
1. Named Entity Recognition
먼저, 문장 안에서 기업을 나타내거나 관련된 단어일 수 있는 후보들을 찾아냅니다. 이를 위해 개체명 인식(Named Entity Recognition; NER)모델을 학습하여 활용하였습니다. 개체명 인식은 텍스트에서 관심이 되는 개체를 찾는 것으로, 예를 들어 일반적인 뉴스 텍스트에서 사람, 조직, 지리적 위치와 같은 대상들이나 브랜드 이름과 같은 명사적 표현 등의 대상들을 찾아내는 것을 의미합니다. 개체명 인식을 통하여 개체명을 추출합니다.
텍스트에서 원하는 정보를 추출하기 위하여 Person, Organization, Location, Other proper noun, Date, Time, Duration, Money, Percentage 등과 같은 태그들을 통해 구분 단위를 만들고 학습을 위한 코퍼스(Corpus)를 구축하고 ML을 통해 학습하였습니다.
개체명 인식을 통하여 위 예시의 ‘중고차매매협회’, ‘현대’, ‘기아차’ 라는 단어들이 Organization(조직)이라는 정보를 얻을 수 있습니다.
2. Knowledge Graph, 지식 그래프
서론에서 언급한 것처럼, 사람은 정보 지식을 통해 문장이 내포하고 있는 의미를 유추할 수 있습니다. 이러한 지식을 모델에 이용하기 위하여 지식 그래프(Knowledge Graph; KG)를 구축하였습니다. 그러면 지식 그래프란 무엇 일까요?
지식 그래프는 개체, 사건 또는 개념과 같은 실체에 대한 상호 연결된 설명 모음을 뜻 합니다. 지식 그래프는 컨텍스트 내의 링킹 및 의미론적인 메타 데이터를 저장하며, 이러한 방식으로 데이터 통합, 통일, 분석, 공유(integration, unification, analytics, sharing)를 위한 프레임워크를 제공합니다. 쉽게 말해서 객체의 속성, 객체 간의 관계를 그래프의 형태로 구축한 것입니다.
에이셀은 ‘현대차’와 같은 기업에 대한 정보를 다양한 출처와 방법으로 수집하고 가공하여 보유하고 있습니다.
기업에 관한 정보를 시맨틱 웹(Semantic Web) 표준에 맞게 표현할 수 있도록 온톨로지(체계)를 구축하고, 보유 데이터와 외부 지식 그래프의 연결을 통하여 확장성을 가질 수 있는 지식 그래프를 구축했습니다.
3. Candidate Selection
이제, ‘현대’라는 단어를 지식 그래프 안의 특정 객체와 연결을 하려고 합니다.
‘현대’는 ‘현대자동차’, ‘현대백화점’, ‘현대모비스’ 등 다양한 지식 그래프 안의 기업이 될 수 있습니다. Candidate Selection이란 특정 단어에 대하여 문장 안의 정보를 활용하여 가능한 후보를 찾는 과정을 의미합니다. 이런 문제를 해결하기 위한 방법으로, 지식 그래프의 정보를 활용, Elasticsearch를 사용하였습니다.
* Elasticsearch: RESTful 인터페이스를 기반으로 형태소 분석을 통한 데이터 검색 및 분석 서비스를 커스터마이징하여 이용할 수 있도록 분산 실시간 검색 및 분석 엔진을 제공하는 검색엔진
Elasticsearch Index의 각 Type을 생성 시에 , 지식 그래프를 활용하여 유의어와 관련 있는 객체의 정보를 포함하도록 만들었습니다. NER을 통해 문장에서 Elasticsearch에 던질 후보를 찾고, 해당 후보를 Elasticsearch에 쿼리(query) 할 때, 문장 안의 주변 개체명 정보를 함께 전달하여, 유의어와 완벽하게 일치하지 않는 (e.g. 현대 -> 현대차) 같은 경우도 함께 후보 군으로 찾을 수 있도록 하였습니다. 위의 작업을 통하여 ‘중고차매매단체’, ‘현대’, ‘기아차’ 와 같은 개체명 중 ‘현대'와 ‘기아차'에 대한 실제 객체 후보를 찾아냅니다.
4. Named Entity Linking
Named Entity Linking (NEL; 개체명 연결)은 텍스트에 등장한 개체명을 후보군 내의 적절한 개체로 연결해주는 것을 의미합니다. NEL은 질의응답 시스템, 정보추출 시스템 등의 다한 자연어처리 분야서 활용되고 있습니다.
구축한 지식 그래프에 대하여 지식 그래프 임베딩(Knowledge Graph Embedding)을 통하여 각 기업들과 관련된 객체 사이의 관계를 학습을 통하여 각 객체와 관계정보를벡터화여 NEL의 학습과 추론에 사용합니다. 위의 예시에서 ‘현대' 에 대한 후보가 ‘현대모비스', ‘현대백화점', ’현대자동차' 등이 선택 되었다면, ‘현대'라는 mention이 각 후보일 수 있는 점수를 계산하여 가장 높은 점수를 가지는 후보를 선택합니다.
Result - NLP for Ticker mapping
위에서 설명했던 각각의 task를 수행하는 모듈을 통해 NLP 파이프라인을 구성합니다. 입력되는 문서에 대하여, 순차적으로 실행되고 문서와 관련 있는 기업 정보를 아래의 예처럼 수행하게 됩니다.
결과적으로 위의 문서가 ‘현대차(KRX:005380)' 와 ‘기아(KRX:000270)’와 관련 있는 문서로 추출할 수 있습니다.
에이셀은 위와 같은 방법을 통하여 수집된 텍스트 문서에 대해 자동으로 기업 식별하는 시스템을 만들고 해당 정보를 다양한 방법으로 활용 될 수 있도록 하고 있습니다.