본문 바로가기
Machine Learning/C# ML.NET

ML.NET 시작하기

by 토담이아빠 2023. 1. 14.

Microsort사의 C# 딥러닝 프레임 워크인 ML.NET에 대한 Review입니다.


Model Builder 사용하기

 

Visual Studio 2022를 기준으로 진행합니다. 비주얼 스튜디오 설치되어 있다고 가정하고 프로젝트 만들기부터 시작하겠습니다. 

 

첫번째로 콘솔앱(.NET Framework) 기반의 새프로젝트를 만듭니다.

 

 

프로젝트 이름을 원하시는대로 적으시고 만들기 단추를 선택합니다.  솔루션 탐색기에서 프로젝트 이름을 우클릭하면 팝업메뉴가 뜹니다. 팝업메뉴에서 '추가'를 선택하시고 하위 메뉴에서  'Machine Learning Model...'을 선택합니다.

 

새 항목 추가 창이 뜨면 Machine Learning Model(ML.NET)가 선택되어 있는지 확인하고 이름은 디폴트 이름인MLModel1.mbconfig을 그대로 두지 마시고 SentimentModel.mbconfig로 바꿉니다. (이름을 바꾸지 않으면 필요한 파일이 추가되지 않습니다.)

 

다음과 같은 시나리오 선택창이 뜨면 첫번째 Data classification을 선택합니다.

 

 

그 다음은 학습 환경을 선택해야합니다. 그러면 다음과 같이 CPU 모델만 지원된다고 뜹니다.

 

 

다음단계를 누르면 다음과 같이 데이터 추가 화면이 뜹니다.

 

 

그러면 아래 링크에서 파일을 다운로드 합니다.

.https://archive.ics.uci.edu/ml/machine-learning-databases/00331/sentiment%20labelled%20sentences.zip

sentiment labelled sentences.zip의 압축을 풀고 yelp_labelled.txt 파일을 본인의 프로젝트가 있는 폴더에 저장합니다.

본인의 프로젝트 폴더를 찾기가 힘들면 다음과 같이 프로젝트명을 우클릭했을 때 나타나는 팝업 메뉴에서 파일 탐색기에서 폴더 열기 메뉴를 선택하면 됩니다.

 

그리고 '찾아보기'에서 yelp_labelled.txt을 선택합니다. 예측할 열(레이블)은  col1을 선택합니다.

 

 

데이터 미리보기로 확인해보면 col0 열에는 감정이 들어 있는 구문들이 들어 있고 col1열은 이에 대한 감정 평가값으로 긍정/부정을 1과 0으로 표현했습니다. 결국 이 데이터를 학습해서 문장의 감정상태를 추론하겠다는 내용입니다.

 

다음 단계를 누르면 이 데이터를 가장 잘 학습할 수 있는 모델을 찾는 학습창이 뜹니다. 학습 시간을 60초로 설정하고 학습을 시작합니다. 학습이 끝나면 가장 적절한 평가모델을 찾아줍니다. 여기서는 83.64%의 정확도를 갖는 MaximumEntropy모델을 찾았습니다.

 

 

다음 단계에서는 이렇게 선정된 모델을 직접 평가해 볼 수 있습니다. 그렇다면 직접 평가해 보겠습니다. col0에 "i am very hungry now"라고 입력하면 81%의 확률로 부정적(0)인 감정으로 평가를 했습니다.

 

 

그렇다면 다음과 같이 입력해 보겠습니다  "i am very hungry now but i feel very good" 부정의 감정과 긍정의 감정이 둘다 있지만 긍정적 마음이 큰 문장입니다. 어떻게 평가를 할까요?

 

 

79%의 확률로 긍정적(1) 감정이라고 평가를 했네요. 나름 잘 작동하는 것 같습니다.

 

학습이 완료되면 세 개의 파일이 SentimentModel.mbconfig에 코드 숨김으로 자동추가 됩니다.

 

 

각 파일의 역할을 다음과 같습니다.

1. SentimentModel.consumption.cs : 모델 입/출력 클래스와 Predict 메소드가 포함되어 있습니다.
2. SentimentModel.trainning.cs : 학습과 관련된 학습파이프라인(데이터 변환, 알고리즘 및 알고리즘 매개변수)가 포함되어 있습니다.
3. SentimentModel.zip : 학습된 모델파일로 직렬화 방식으로 저장되어 있습니다.

 

마지막 단계로 제공되는 코드를 이용해 다음과 같이 작성합니다.

만약  위와 같은 구문 에러가 뜬다면 다음과 같이 추가된 파일의 속성창을 확인해보세요

 

 

아마 빌드 작업이 '없음'으로 되어 있을 겁니다. 이것을 '컴파일'로 변경해 주세요. SentimentModel.consumption.cs 파일과 SentimentModel.trainning.cs파일만 변경해주시면 됩니다.  그리고 result.PredictedLabel을 아래 예시처럼 result.Prediction으로 변경합니다.

 

 var sentiment = result.PredictedLabel == 1 ? "Positive" : "Negative";
 
 위 코드를 아래와 같이 변경합니다.
 var sentiment = result.Prediction == 1 ? "Positive" : "Negative";

 

만약 솔루션 플랫폼이 Any CPU로 되어 있으면 x64로 변경해줍니다.

 

 

마지막으로 빌드를 하고 실행시키면 다음과 같은 결과가 나타납니다.

Text: This restaurant was wonderful.
Sentiment: Positive

 

댓글