본문 바로가기
기술/기타

[ML.NET] CLI 설치하고 감정 분석 튜토리얼 따라하기

by 포도빛 2022. 6. 14.

이번에는 마이크로소프트 ML.NET을 사용해보고자 공식 문서에 있는 튜토리얼을 따라해보고자 한다.

 

참고로 나는 인공지능, 머신러닝에 대해 아무것도 모른다...


사전 요구사항

1. dotNET 6 SDK

https://dotnet.microsoft.com/en-us/download/dotnet/6.0

 

2. Visual Studio 2022 이상

CLI를 사용할 것이기 때문에 Visual Studio는 설치하지 않을 것이다.


.NET 6 SDK를 설치했다면 아래 명령을 입력해본다.

dotnet --info

 

잘 설치되어있다면 아래와 같이 나올 것이다.

.NET SDK(global.json 반영):
 Version:   6.0.201
 Commit:    ef40e6aa06

런타임 환경:
 OS Name:     Windows
 OS Version:  10.0.22000
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\6.0.201\

... 생략 ...

ML.NET CLI 설치

 

ML.NET CLI를 설치하기 위해 아래 명령중 PC에 해당하는 아키텍처의 설치 명령어를 입력한다.

# 윈도우 64비트
dotnet tool install --global mlnet-win-x64

# 윈도우 ARM 64비트
dotnet tool install --global mlnet-win-arm64

# 맥 64비트
dotnet tool install --global mlnet-osx-x64

# 맥 ARM 64비트
dotnet tool install --global mlnet-osx-arm64

# 리눅스 64비트
dotnet tool install --global mlnet-linux-x64

# 리눅스 ARM 64비트
dotnet tool install --global mlnet-linux-arm64

 

잘 설치되었다면 다음과 같이 나타난다.

.NET 6.0을(를) 시작합니다.
---------------------
SDK 버전: 6.0.201

... 중략 ...
... 설치하는데 시간이 다소 걸린다 ...

다음 명령을 사용하여 도구를 호출할 수 있습니다. mlnet
'mlnet-win-x64' 도구('16.13.6' 버전)가 설치되었습니다.

 

위 메시지대로 mlnet 명령이 환경변수에 등록된다.

 

다음 명령어를 입력해본다. 잘 설치되었다면 설치된 ML.NET의 버전이 아래와 같이 표시된다.

< 명령어 >
mlnet --version

< 출력 >
16.13.6+705076eb10e594cfe27d1539a1c3f9aaae712a25

감정 분석 튜토리얼

데이터세트 준비

다음 데이터세트(DataSet)을 다운로드 받아 압축을 해제한다.

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

The UCI Sentiment Labeled Sentences dataset zip file

 

 

압축을 해제하면 여러가지 텍스트 파일이 있는데 이 중 "yelp_labelled.txt" 파일만 사용한다.

 

이 텍스트 파일을 열어서 확인해보자면...

각 라인별로 "문장{\t}숫자"로 구성되어 있다.

숫자 중 1은 긍정, 0은 부정을 의미하고 앞의 문장이 긍정인지 부정인지 나타내는 데이터세트이다.

 


분류 학습

"yelp_labelled.txt" 파일이 있는 디렉토리로 이동하고, 분류 학습을 진행한다. 다음과 같이 명령어를 입력한다.

mlnet classification --dataset "yelp_labelled.txt" --label-col 1 --has-header false --train-time 60

* 각 인자에 대해서는 이곳에서 다루지 않는다.

 

60초동안 학습이 진행된 후 아래와 같이 출력된다.

Start Training
start nni training
Experiment output folder: C:\Users\js\AppData\Local\Temp\AutoML-NNI\Experiment-20PGAU
|     Trainer                              MicroAccuracy  MacroAccuracy  Duration #Iteration                     |
|0    SdcaMaximumEntropyMulti                     0.5153         0.5000       1.2          0                     |
|1    FastTreeOva                                 0.6654         0.6655       2.1          1                     |
|2    FastForestOva                               0.7263         0.7261       2.7          2                     |
... 중략 ...
------------------------------------------------------------------------------------------------------------------
|                                              Top 5 models explored                                             |
------------------------------------------------------------------------------------------------------------------
|     Trainer                              MicroAccuracy  MacroAccuracy  Duration #Iteration                     |
|9    LbfgsMaximumEntropyMulti                    0.8274         0.8267       0.5          9                     |
... 중략 ...
------------------------------------------------------------------------------------------------------------------

save SampleClassification.mbconfig to C:\Temp\sentiment labelled sentences\SampleClassification
해당 위치의 최적 파이프라인에 대한 콘솔 프로젝트를 생성하는 중 : C:\Temp\sentiment labelled sentences\SampleClassification

 

여러가지의 학습 방법을 시도해본 목록을 보여주고, 마지막으로 가장 좋은 모델 몇가지를 보여준다.

 

그리고 프로젝트가 생성되었다는 메시지와 함께 mlnet이 종료된다.


생성된 프로젝트 사용

프로젝트가 생성된 디렉토리로 이동해보면 아래와 같은 파일이 준비되어 있다.

 

 

이중 ".csproj"의 이름을 변경해야한다.

파일 이름이 없기 때문에 이름을 넣어주면 된다. 이름은 자유롭게 지정한다.

- dotnet에서는 프로젝트 파일이 이름이 곧 프로젝트 이름이다.

# 윈도우
ren .csproj first.csproj

# 리눅스
mv .csproj first.csproj

 

 

복원 및 빌드를 수행한다.

- 복원 과정에서 필요한 의존성을 설치하게 된다. (Microsoft.ML)

- 빌드 과정에서 restore를 먼저 해줄 때도 있다.

dotnet restore
dotnet build

 

 

다음과 같이 출력되는 것을 확인한다.

C:\Temp\sentiment labelled sentences\SampleClassification>dotnet restore
  복원할 프로젝트를 확인하는 중...
  C:\Temp\sentiment labelled sentences\SampleClassification\first.csproj을(를) 10.02 sec 동안 복원했습니다.

C:\Temp\sentiment labelled sentences\SampleClassification>dotnet build
.NET용 Microsoft (R) Build Engine 버전 17.1.0+ae57d105c
Copyright (C) Microsoft Corporation. All rights reserved.

  복원할 프로젝트를 확인하는 중...
  복원할 모든 프로젝트가 최신 상태입니다.
  first -> C:\Temp\sentiment labelled sentences\SampleClassification\bin\Debug\net6.0\first.dll

빌드했습니다.
    경고 0개
    오류 0개

경과 시간: 00:00:03.49

 

이후, 위 메시지에서 출력 디렉토리로 이동하면 실행 가능 파일이 있을 것이고 실행해본다.

C:\Temp\sentiment labelled sentences\SampleClassification>.\bin\Debug\net6.0\first.exe
Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...

Col0: Wow... Loved this place.
Col1: 1

Predicted Col1: 1

=============== End of process, hit any key to finish ===============

 

여기서 마지막 줄의 "Predicted Col1: 1"만 보면 된다.

샘플 문장 "Wow... Loved this place."는 긍정적인 문장으로 분류된 것이다.

 

 

이제 문장을 직접 만들어서 테스트를 해보자.

프로젝트 폴더의 "Program.cs"를 열어준다.

 

소스코드 중 위와 같이 ModelInput 객체에 예문을 직접 입력해주고, 아래 불필요한 출력은 주석처리 한다.

위 사진의 예문은 "I am working hard." 이다.

 

그리고 다시 빌드하고 실행해본다.

C:\Temp\sentiment labelled sentences\SampleClassification>dotnet build
.NET용 Microsoft (R) Build Engine 버전 17.1.0+ae57d105c
Copyright (C) Microsoft Corporation. All rights reserved.

  복원할 프로젝트를 확인하는 중...
  복원할 모든 프로젝트가 최신 상태입니다.
  first -> C:\Temp\sentiment labelled sentences\SampleClassification\bin\Debug\net6.0\first.dll

빌드했습니다.
    경고 0개
    오류 0개

경과 시간: 00:00:00.90

C:\Temp\sentiment labelled sentences\SampleClassification>.\bin\Debug\net6.0\first.exe
Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...

Predicted Col1: 0

=============== End of process, hit any key to finish ===============

 

학습된 모델은 "I am working hard."에 대해 부정이라는 결과를 내놓았다.

 

다른 문장을 더 테스트 해본다.

I'm interested in ML.NET. 부정
I bought iPhone 13 yesterday. 긍정
I lost mobile phone. 부정
I did it. 부정
I did it! 긍정

 

 

이제 이 프로젝트와 모델을 가지고 자유롭게 프로그램을 만들어본다.

 

 

아래에 공식 문서 링크를 남겨두었으니 자세한 정보와 활용 방법에 대해서는 공식 문서를 참고해보자.


참고 자료

마이크로소프트 공식 문서 - ML.NET CLI 설치

https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/install-ml-net-cli?tabs=windows 

 

How to install the ML.NET Command-Line Interface (CLI) tool - ML.NET

Learn how to install, upgrade, downgrade, and uninstall the ML.NET Command-Line Interface (CLI) tool.

docs.microsoft.com

 

 

 

마이크로소프트 공식 문서 - ML.NET CLI를 사용한 감정 분석 튜토리얼

https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/sentiment-analysis-cli

 

Analyze sentiment using the ML.NET CLI - ML.NET

Automatically generate an ML model and related C# code from a sample dataset

docs.microsoft.com

 

댓글