0. 포스팅 목록 & GitHub
(깃허브 스타 버튼 눌러주시면 글 작성에 큰 도움이 됩니다!)
https://github.com/Seokii/Chatbot4Univ
https://seokii.tistory.com/146
완성된 챗봇 엔진 서버 프로그램 개선 및 기능을 추가했습니다.
1. 텐서플로우 메모리 할당
# /chatbot.py
import tensorflow as tf
# tensorflow gpu 메모리 할당
# tf는 시작시 메모리를 최대로 할당하기 때문에, 0번 GPU를 4GB 메모리만 사용하도록 설정했음.
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
tf.config.experimental.set_virtual_device_configuration(gpus[0],
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)])
except RuntimeError as e:
print(e)
처음 의도 판별 모델을 불러올 때 텐서플로우를 사용하게 되는데,
GPU 메모리가 최대치로 할당되는 것을 확인했습니다.
유사도를 비교하는 과정에서는 SBERT 모델을 사용하며 PyTorch를 이용하는데 지금 제 개발 환경에서는 PyTorch가 cpu를 사용하기 때문에 문제가 없으나 GPU 사용시 메모리 부족 현상이 발생할 수 있습니다.
또한 추후에 다른 기능을 개발하거나, 추가로 gpu 메모리 할당이 필요한 경우(서버 환경에서 다른 프로그램을 상시 실행해야하는 경우) 등 여러 가지 상황이 발생할 수 있기 때문에 적절한 메모리의 할당이 필요하다고 생각해 해당 코드를 추가했습니다.
위의 코드에서는 0번 GPU를 사용하며, 4GB의 메모리 할당을 하겠다고 정의했습니다.
2. 로그 기능 구현
# /chatbot.py
# 로그 기능 구현
from logging import handlers
import logging
#log settings
LogFormatter = logging.Formatter('%(asctime)s,%(message)s')
#handler settings
LogHandler = handlers.TimedRotatingFileHandler(filename='./logs/chatbot.log', when='midnight', interval=1, encoding='utf-8')
LogHandler.setFormatter(LogFormatter)
LogHandler.suffix = "%Y%m%d"
#logger set
Logger = logging.getLogger()
Logger.setLevel(logging.ERROR)
Logger.addHandler(LogHandler)
"""
챗봇 엔진 구현 생략..
"""
# 답변 검색
f = FindAnswer(df=df, embedding_data=embedding_data ,preprocess=p)
selected_qes, score, answer, imageUrl, query_intent = f.search(query, intent_name)
if score < 0.70:
answer = "부정확한 질문이거나 답변할 수 없습니다.\n 수일 내로 답변을 업데이트하겠습니다.\n 죄송합니다 :("
imageUrl = "nan"
# 사용자 질문, 예측 의도, 선택된 질문, 선택된 질문 의도, 유사도 점수
Logger.error(f"{query},{intent_name},{selected_qes},{query_intent},{score}")
챗봇 엔진을 운영하며 답변이 없는 질문이나 의도 모델에 대한 성능 개선이 필요하다고 생각해 로그 기능을 추가했습니다.
로그 기능을 통해 사용자의 질문과 챗봇 엔진의 출력 결과를 로그로 축적해 챗봇의 성능을 개선할 예정입니다.
logging.Formatter
- 로그 생성의 형식을 결정
- %(asctime)s : 로그가 기록되는 시간
- %(message)s : 로그 메시지
handler.TimedRotatingFileHandler
- 로그 파일을 생성하는 기준
- filename : 파일 이름
- when='midnight' : 매일 자정을 기준으로 새로운 파일을 생성
- suffix 기준으로 파일 생성
# Logger Set
- 실제 사용할 logger를 생성, 출력 레벨을 ERROR 이상으로 설정, handler 추가
구현한 로그 기능을 답변 검색을 실행하고, 유사도 점수가 0.70 보다 작다면,
사용자 질문, 예측 의도, 선택된 질문, 선택된 질문 의도, 유사도 점수의 내용을 기록하도록 구현했습니다.
이에 따라, FindAnswer.py의 내용도 약간의 변경이 있었습니다.
- 선택된 질문의 의도를 반환하도록 query_intent 추가
- success 변수 삭제
마지막으로 로그 파일의 내용 사진입니다.
'머신러닝 & 딥러닝 > 자연어처리' 카테고리의 다른 글
대학교 AI 질의응답 챗봇 만들기 - 12. 챗봇 API 개선하기(1) (0) | 2022.08.11 |
---|---|
대학교 AI 질의응답 챗봇 만들기 - 11. 챗봇 API 만들기(Flask API) (0) | 2022.07.31 |
대학교 AI 질의응답 챗봇 만들기 - 9. 챗봇 엔진 서버 테스트 (0) | 2022.07.30 |
대학교 AI 질의응답 챗봇 만들기 - 8. 챗봇 엔진 서버 (0) | 2022.07.30 |
대학교 AI 질의응답 챗봇 만들기 - 7. 임베딩 저장 & 답변 검색 클래스화 (0) | 2022.07.30 |
댓글