아래의 포스트에 C++로 직접 구현한 실습 자료를 올려 두었으니, 참고가 되시면 좋겠다.

 

자연어 처리 실습 - C++ 소스 코드 (Natural Language Processing Practice with C++)

아래 사이트에 '인공지능을 위한 수학' 교재 6장 예제(카테고리 판별기)를 실습한 C++ 소스 코드를 업로드하고 있다. Changes 21.03.12 - 스톱워드(stop-words) 제거 기능 추가 21.03.11 - 형태소 분석 결과를

swjman.tistory.com

 

교재링크(광고 아님): freelec.co.kr/book/인공지능을-위한-수학/

 

Bag-of-Words(BoW)

형태소 분석(morpheme analysis) 후 도출된 형태소들의 도출횟수를 벡터처럼 일렬로 나열하는 방법(model)을 말한다. 사실 수학적으로야 벡터지만, 컴퓨터의 관점에서는 그냥 배열이다. 좀 더 고수준의 자료구조라면 맵(b-tree) 정도로 표현하면 되겠다. 그런데... std::vector가 이런 연유로 엉뚱하게 명명이 된것일까 하는 의문이 들었다.

어쨌든 예를 들어 보면, 우선 아래와 같은 형태소 리스트가 도출되었다고 해보자.

$$ L = \{ 강아지, 멍멍이, 고양이, 강아지, 고양이, 씨몽키 \} $$

갯수를 세보면

강아지 멍멍이 고양이 씨몽키
2 1 2 1

 

이 개수를 벡터로 표현한 것이 bag-of-words(BoW)다.

$$ BoW = (2, 1, 2, 1) $$

Posted by JMAN