처음부터 시작합시다. 분류 (분류라고도 함) 는지도 학습 의 예입니다 . 지도 학습에는 다음이 있습니다.
- 모델 -데이터의 내부 구조에 근접한 것으로 추론하고 유용한 예측을 할 수 있습니다 (예 : 객체의 클래스 예측). 일반적으로 모델에는 "학습"하려는 매개 변수가 있습니다.
- 학습 및 테스트 데이터 세트 -모델 학습 (매개 변수에 대한 올바른 값 찾기) 및 추가 평가에 사용하는 오브젝트 세트
- 훈련 및 분류 알고리즘 -먼저 훈련 데이터 세트에서 모델을 학습하는 방법을 설명하고, 둘째는 훈련 된 모델이 지정된 새로운 객체의 클래스를 도출하는 방법을 보여줍니다.
이제 간단한 스팸 분류 사례를 살펴 보겠습니다. 교육 데이터 세트는 이메일 + 해당 레이블- "스팸"또는 "스팸 아님"입니다. 테스트 데이터 세트는 동일한 구조를 갖지만 일부 독립적 인 이메일로 만들어집니다 (보통 데이터 세트를 분할하여 9/10을 훈련에 사용하고 1/10을 테스트에 사용). 이메일을 모델링하는 한 가지 방법은 각각을 단어 세트 (가방)로 표현하는 것입니다. 단어가 서로 독립적이라고 가정하면 Naive Bayes 분류기를 사용할 수 있습니다 . 즉, 각 단어 및 각 클래스의 사전 확률을 계산 한 다음 (트레이닝 알고리즘) Bayes 정리를 적용하여 새 문서가 속할 확률을 찾습니다. 특정 클래스.
기본적으로 우리는
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
이제 우리는 객체 (문서)를 단어 가방으로 표현했습니다. 그러나 유일한 방법입니까? 사실, 우리는 원시 텍스트에서 훨씬 더 많은 것을 추출 할 수 있습니다. 예를 들어, 단어 대신에 줄기 나 쉼표를 사용하고 , 시끄러운 단어를 버리거나 , 단어의 POS 태그 를 추가하고 , 이름이 지정된 엔티티를 추출 하거나 문서의 HTML 구조를 탐색 할 수 있습니다. 실제로, 문서 (및 일반적으로 모든 객체)의보다 일반적인 표현은 특징 벡터 입니다. 예를 들어 텍스트 :
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
여기에서 첫 번째 행은 가능한 기능 목록이며 후속 행은 문서에서 해당 기능이 몇 번이나 나타나는지를 보여줍니다. 예를 들어 첫 번째 문서에는 "actor"라는 단어, 1 개의 "burn"단어, 5 개의 명사, 2 개의 형용사 및 2 개의 텍스트가 굵게 표시되지 않습니다. 마지막 열은 결과 클래스 레이블에 해당합니다.
기능 벡터를 사용하면 텍스트의 모든 속성을 통합 할 수 있습니다. 좋은 기능 세트를 찾는 데 시간이 걸릴 수 있습니다.
그리고 모델과 알고리즘은 어떻습니까? 우리는 나이브 베이 즈에 묶여 있습니까? 전혀. 로지스틱 회귀 , SVM , 의사 결정 트리 – 몇 가지 인기있는 분류기를 언급 할뿐입니다. (대부분의 경우 "분류기"라고 말하면 훈련 및 분류를위한 모델 + 해당 알고리즘을 의미합니다).
구현과 관련하여 작업을 두 부분으로 나눌 수 있습니다.
- 특징 추출-원본 텍스트를 특징 벡터로 변환합니다.
- 객체 분류-모델 구축 및 적용.
첫 번째 요점은 많은 NLP 라이브러리 에서 잘 작동합니다 . 두 번째는 기계 학습에 관한 것이므로 데이터 세트에 따라 Weka 또는 MLlib를 사용할 수 있습니다 .