감성 분석 앱 만들기
감성 분석 앱 만들기
이 가이드는 Docker를 사용해 감성 분석 모델을 컨테이너화하는 방법을 보여줘요.
출처: 문서
본문
개요
이 가이드에서는 감성 분석 어플리케이션을 만들고 실행하는 방법을 배워요. Python과 NLTK(Natural Language Toolkit) 로 어플리케이션을 만든 다음 Docker로 환경을 설정하고 어플리케이션을 실행할 거예요.
이 어플리케이션은 NLTK의 SentimentIntensityAnalyzer 를 사용해 사용자 입력 텍스트의 감성을 분석하고 감성이 긍정, 부정, 중립 중 무엇인지 출력해요.
사전 요구사항
- 최신 버전의 Docker Desktop 을 설치했어야 해요. Docker는 정기적으로 새 기능을 추가하므로 이 가이드의 일부 부분은 최신 버전의 Docker Desktop에서만 작동할 수 있어요.
- Git 클라이언트 가 있어야 해요. 이 섹션의 예제는 명령줄 기반 Git 클라이언트를 사용하지만, 어떤 클라이언트든 사용할 수 있어요.
샘플 어플리케이션 가져오기
터미널을 열고 다음 명령으로 샘플 어플리케이션의 리포지토리를 클론해주세요.
$ git clone https://github.com/harsh4870/Docker-NLP.git
리포지토리를 클론했는지 확인해주세요.
Docker-NLP 디렉터리에 다음 파일이 보여야 해요.
01_sentiment_analysis.py
02_name_entity_recognition.py
03_text_classification.py
04_text_summarization.py
05_language_translation.py
entrypoint.sh
requirements.txt
Dockerfile
README.md
어플리케이션 코드 탐구
감성 분석 어플리케이션의 소스 코드는 Docker-NLP/01_sentiment_analysis.py 파일에 있어요. 텍스트 또는 코드 편집기에서 01_sentiment_analysis.py 를 열어 다음 단계로 내용을 탐구하세요.
필요한 라이브러리 가져오기
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
import ssl
- nltk : Python에서 인간 언어 데이터를 다루는 데 사용되는 Natural Language Toolkit 라이브러리.
- SentimentIntensityAnalyzer : 텍스트 조각의 감성을 판단하는 데 사용되는 NLTK의 특정 도구.
- ssl : 보안 웹 연결에 사용되는 TLS(암호화) 함수에 접근을 제공하는 모듈.
SSL 인증서 검증 처리
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
pass
else:
ssl._create_default_https_context = _create_unverified_https_context
이 블록은 SSL 인증서 검증 문제로 NLTK를 통한 데이터 다운로드가 실패할 수 있는 특정 환경을 위한 우회책이에요. HTTPS 요청에 대해 SSL 인증서 검증을 무시하라고 Python에 지시해요.
NLTK 리소스 다운로드
nltk.download('vader_lexicon')
nltk.download('punkt')
- vader_lexicon : SentimentIntensityAnalyzer 가 감성 분석에 사용하는 어휘집.
- punkt : NLTK가 문장을 토큰화하는 데 사용. SentimentIntensityAnalyzer 가 올바르게 작동하려면 필요해요.
감성 분석 함수 만들기
def perform_semantic_analysis(text):
sid = SentimentIntensityAnalyzer()
sentiment_score = sid.polarity_scores(text)
if sentiment_score['compound'] >= 0.05:
return "Positive"
elif sentiment_score['compound'] <= -0.05:
return "Negative"
else:
return "Neutral"
- SentimentIntensityAnalyzer() 가 분석기 인스턴스를 만들어요.
- polarity_scores(text) 가 입력 텍스트에 대한 감성 점수를 생성해요.
- 함수는 compound 점수에 따라 Positive , Negative , Neutral 을 반환해요.
메인 루프 만들기
if __name__ == "__main__":
while True:
input_text = input("Enter the text for semantic analysis (type 'exit' to end): ")
if input_text.lower() == 'exit':
print("Exiting...")
break
result = perform_semantic_analysis(input_text)
print(f"Sentiment: {result}")
스크립트의 이 부분은 분석을 위해 사용자 입력을 받는 무한 루프를 실행해요. 사용자가 exit 을 입력하면 프로그램이 종료돼요. 그렇지 않으면 제공된 텍스트의 감성을 출력해요.
requirements.txt 만들기
샘플 어플리케이션에는 어플리케이션이 가져오는 필요한 패키지를 지정하는 requirements.txt 파일이 이미 포함되어 있어요. 코드 또는 텍스트 편집기에서 requirements.txt 를 열어 내용을 탐구하세요.
# 01 sentiment_analysis
nltk==3.6.5
...
감성 분석 어플리케이션에는 nltk 패키지만 필요해요.
어플리케이션 환경 탐구
Docker로 컨테이너에서 어플리케이션을 실행할 거예요. Docker는 어플리케이션을 컨테이너화해 일관되고 격리된 실행 환경을 제공해요.
컨테이너에서 어플리케이션을 실행하려면 Dockerfile이 필요해요. Dockerfile은 이미지를 조립하기 위해 명령줄에서 호출할 모든 명령을 담은 텍스트 문서예요. 이미지는 Docker 컨테이너를 만들기 위한 지침이 있는 읽기 전용 템플릿이에요.
샘플 어플리케이션에는 Dockerfile 이 이미 포함되어 있어요. 코드 또는 텍스트 편집기에서 Dockerfile 을 열어 내용을 탐구하세요. 다음 단계가 각 부분을 설명해요. 자세한 내용은 Dockerfile 참조 를 참고하세요.
베이스 이미지 지정
FROM python:3.8-slim
python:3.8-slim 은 크기와 속도에 최적화된 Python 3.8 이미지의 경량 버전이에요. 이 slim 이미지를 사용하면 전체 Docker 이미지 크기가 줄어 더 빠른 다운로드와 더 적은 보안 취약점 노출면을 가능하게 해요.
작업 디렉터리 설정
WORKDIR /app
WORKDIR 은 Docker 이미지 안의 현재 작업 디렉터리를 설정해요. 모든 후속 명령이 이 디렉터리에서 실행되게 보장해요.
요구사항 파일을 이미지로 복사
COPY requirements.txt /app
COPY 명령은 requirements.txt 파일을 내 로컬 머신에서 Docker 이미지로 전송해요.
이미지에 Python 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt
이 줄은 pip 를 사용해 requirements.txt 에 나열된 패키지를 설치해요. --no-cache-dir 은 불필요한 캐시 데이터를 저장하지 않아 이미지 크기를 줄여요.
추가 명령 실행
RUN python -m spacy download en_core_web_sm
이 단계는 spaCy 라이브러리가 필요한 NLP 어플리케이션에 특화돼 있어요. en_core_web_sm 모델을 다운로드해요. 이 앱에는 필요 없지만 이 Dockerfile을 사용할 수도 있는 다른 NLP 어플리케이션과의 호환성을 위해 포함돼 있어요.
어플리케이션 코드를 이미지로 복사
COPY *.py /app
COPY entrypoint.sh /app
이 명령들은 Python 스크립트와 entrypoint.sh 스크립트를 이미지의 /app 디렉터리로 복사해요.
entrypoint.sh 스크립트에 권한 설정
RUN chmod +x /app/entrypoint.sh
이 명령은 entrypoint.sh 의 파일 권한을 수정해 실행 가능하게 만들어요.
엔트리 포인트 설정
ENTRYPOINT ["/app/entrypoint.sh"]
ENTRYPOINT 지시문은 컨테이너가 entrypoint.sh 를 기본 실행 파일로 실행하도록 구성해요.
어플리케이션 실행하기
Docker로 어플리케이션을 실행하려면:
이미지 빌드
터미널에서 Dockerfile 이 있는 디렉터리 안에서 다음 명령을 실행해주세요.
$ docker build -t basic-nlp .
- docker build : Docker 이미지를 빌드하는 기본 명령.
- -t basic-nlp : 이미지에 태그를 다는 옵션. 이미지 이름을 basic-nlp 로 할당해요.
- . : 마침표는 현재 디렉터리를 의미하며, Docker가 이 디렉터리에서 Dockerfile을 찾아요.
Docker는 이미지를 빌드하면서 여러 로그를 콘솔에 출력해요. 네트워크 연결에 따라 몇 분이 걸릴 수 있어요.
자세한 내용은 docker build CLI 참조 를 참고하세요.
이미지를 컨테이너로 실행
터미널에서 다음 명령을 실행해주세요.
$ docker run -it basic-nlp 01_sentiment_analysis.py
- docker run : Docker 이미지에서 새 컨테이너를 실행하는 기본 명령.
- -it : -i(대화형, STDIN 유지)와 -t(의사 터미널 할당)의 결합.
- basic-nlp : 사용할 Docker 이미지의 이름.
- 01_sentiment_analysis.py : 컨테이너 안에서 실행하려는 스크립트. entrypoint.sh 에 전달되어 실행돼요.
자세한 내용은 docker run CLI 참조 를 참고하세요.
참고: Windows 사용자는 컨테이너를 실행할 때 오류가 발생할 수 있어요. entrypoint.sh 의 줄 끝이 CRLF( \r\n )가 아닌 LF( \n )인지 확인한 후 이미지를 재빌드하세요.
컨테이너가 시작된 후 콘솔에 다음이 보일 거예요.
Enter the text for semantic analysis (type 'exit' to end):
어플리케이션 테스트
감성 분석을 받으려면 코멘트를 입력하세요.
Enter the text for semantic analysis (type 'exit' to end): I love containers!
Sentiment: Positive
Enter the text for semantic analysis (type 'exit' to end): I'm still learning about containers.
Sentiment: Neutral
요약
이 가이드에서 감성 분석 어플리케이션을 만들고 실행하는 방법을 배웠어요. Python과 NLTK로 어플리케이션을 만들고 Docker로 환경을 설정하고 실행하는 방법을 배웠어요.
관련 정보:
- Docker CLI 참조
- Dockerfile 참조
- Natural Language Toolkit
- Python 문서
다음 단계
더 많은 자연어 처리 가이드 를 탐구해보세요.
더 알아보기 (Learn more)
- Docker CLI 참조
- Dockerfile 참조
- NLTK