안녕하세요, 이번 포스팅에서는 Chatbot Training 할 내용이 담긴 파일을 통해서 Trainning 하는 방법 뿐만 아니라, chatterbot 라이브러리에 대한 내부 항목에 대해서 하나 하나 설명 드리도록 하겠습니다.
그럼 chatterbot 라이브러리에 대한 내부 항목 부터 하나 하나 설명 드리도록 하겠습니다.
1. Logic Adapter
: Chatterbot에는, 여러 가지 Logic Adapter를 제공을 하고 있습니다. 원하는 결과에 맞게, 해당하는 Logic Adapter를
사용할 수가 있는데, 그 항목들은 아래와 같습니다. (제가 가장 많이 사용하는 항목 위주로 나열하였습니다.)
1) chatterbot.logic.MathematicalEvaluation
: 수학적인 Question에 맞게 답변을 해주는 Logic Adapter 입니다. 간단한 Source 예제는 아래와 같습니다.
==============================================================================
from chatterbot import ChatBot
chatbot = ChatBot('Davey',
logic_adapters=[
'chatterbot.logic.MathematicalEvaluation', # 수학적 수식에 대한 답변을 줄 수 있는 Logic을 선언
])
Answer01 = chatbot.get_response('What is 1 + 1?')
print(Answer01)
==============================================================================
- 위 코드를 구현해 보면 아래와 같이 산술에 물음(1 + 1)에 산술적 답변(2)이 나오는 걸 확인 하실 수 있습니다.
2) chatterbot.logic.TimeLogicAdapter
==============================================================================
from chatterbot import ChatBot
chatbot = ChatBot('Davey',
logic_adapters=[
'chatterbot.logic.TimeLogicAdapter', # 시간을 물어볼 때, 답변을 줄 수 있는 Logic을 선언
])
Answer01 = chatbot.get_response('What time is it?')
print(Answer01)
==============================================================================
- 위 코드를 구현해 보면 아래와 같이 현재 시간을 출력하는 걸 확인 하실 수 있습니다.
3) chatterbot.logic.BestMatch
: Question에 Best Matching 되는 답변을 출력하는 Logic Adapter 입니다. 이 부분은, 라이브러리 내부적으로, 어떤 기준해서, Best Matching을 하는지는 인지하지는 못하고 있습니다. 이 부분은 혹시 제가 나중에 파악하게 되면 추가 포스팅 하도록 하겠습니다. 일단, 똑같은 질문을 했을 때, 내부적으로 Best Matching 이라고 생각하는 답변을 출력하는 걸로 일단은 인지를 하시면, 될 거 같습니다. 이 부분은 예제 없이 넘어가도록 하겠습니다. 아래 코드만 참조 부탁 드립니다.
==============================================================================
from chatterbot import ChatBot
chatbot = ChatBot('Davey',
logic_adapters=[
# Chatbot이 생각할 때, 여러 답변 중에 Best Matching되는 답변을 출력하는 Logic을 선언
'chatterbot.logic.BestMatch',
])
Answer01 = chatbot.get_response('What time is it?')
print(Answer01)
==============================================================================
SQL Adapter
: Chatbot의 Training Data를 SQL Database에 저장을 할 수 가 있습니다. 그리고 SQL Database File 파일명 치 위치도 지정이 가능합니다. 이럴 경우에 사용하는 Code는 아래와 같습니다. 따로, 파일명을 설정을 하지 않으면, "db.sqlite3" 로 python file이 있는 폴더에 생성이 됩니다.
==============================================================================
chatbot = ChatBot('Davey',
storage_adapter='chatterbot.storage.SQLStorageAdapter',
database_uri="원하는 위치" + "원하는 파일명")
logic_adapters=[
'chatterbot.logic.MathematicalEvaluation',
'chatterbot.logic.TimeLogicAdapter',
'chatterbot.logic.BestMatch'
])
==============================================================================
파일에 입력되어 있는 Data를 기반으로 Training하기
: 기존에는 List 형식으로 Question 과 Answer를 받았는데, 이 대량의 Data를 일일히 Code에 넣을 수 없기에(물론 넣을 수 있습니다. ^^ 하지만 먼가 가독성이 떨어짐) Source Data File을 기반으로 Training 시키는 게 더 효율적으로 관리가 가능합니다. 그럼 예제를 통해서 설명 드리도록 하겠습니다.
1) yml file을 이용한 Tranining
: 'chatterbot' 라이브러리를 설치를 하게 되면, 기본적으로, yml 파일을 제공을 하고 있습니다. 그 yml 파일을 불러와 chatbot을 training 하는 방법입니다. 관련 구문은 아래와 같습니다.
==============================================================================
from chatbot import chatbot
from chatterbot.trainers import ChatterBotCorpusTrainer
teacher01 = ChatterBotCorpusTrainer(chatbot)
teacher01.train(
"chatterbot.corpus.english.greetings", # english.greetings yml file 내용 Traning
"chatterbot.corpus.english.conversations" # english.conversations yml file 내용 Traning
)
==============================================================================
- 위 Code를 통해서, Training을 시킨 이후에, 출력 Code를 아래와 같이 재설정 해 보도록 하겠습니다.
==============================================================================
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
chatbot = ChatBot(
'Davey',
storage_adapter='chatterbot.storage.SQLStorageAdapter',
database_uri=None,
logic_adapters=[
'chatterbot.logic.MathematicalEvaluation',
'chatterbot.logic.TimeLogicAdapter',
'chatterbot.logic.BestMatch'
]
)
teacher01 = ChatterBotCorpusTrainer(chatbot)
teacher01.train(
"chatterbot.corpus.english.greetings",
"chatterbot.corpus.english.conversations"
)
Answer01 = chatbot.get_response('Hello')
# english.greetings yml file 내용 중에, "Hello" 라고 물으면 "Hi" 로 답변하는 내용은 근거해서, 값을 출력함.
print(Answer01)
==============================================================================
- Code를 통해서, Training이 완료가 되면, 아래와 같은 결과 값을 보실 수 있습니다. 이 결과 값은, 기존에 입력한 Data기반으로 출력하는 것이니, 참조 부탁 드립니다.
2) 특정 file을 이용한 Tranining
: 'chatterbot' 라이브러리와 함께 제공하는 파일이 아닌, 자신이 가지고 있는 파일을 이용하여, chatbot을 training 하는 방법입니다. 관련 구문은 아래와 같습니다.
==============================================================================
from chatbot import chatbot
from chatterbot.trainers import ChatterBotCorpusTrainer
teacher01 = ChatterBotCorpusTrainer(chatbot)
teacher01.train(
"./training_json_file.json",
)
==============================================================================
- 위 Code를 통해서, Training을 시킨 이후에, 출력 Code를 아래와 같이 재설정 해 보도록 하겠습니다.
==============================================================================
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
chatbot = ChatBot(
'Davey',
storage_adapter='chatterbot.storage.SQLStorageAdapter',
database_uri=None,
logic_adapters=[
'chatterbot.logic.MathematicalEvaluation',
'chatterbot.logic.TimeLogicAdapter',
'chatterbot.logic.BestMatch'
]
)
teacher01 = ChatterBotCorpusTrainer(chatbot)
teacher01.train(
"./training_json_file.json",
)
Answer01 = chatbot.get_response('Hello')
print(Answer01)
==============================================================================
- 위 코드를 실행 시켜 보면, (training_json_file.json 안에 내용이, english.greetings yml file 내용이 동일하다는 전제) 아래 결과 값이 출력되는 걸 확인 하실 수 있습니다.
이상입니다. 위에 코드를 보시고, 눈으로만 이해하지 마시고, 하나 하나 코드를 입력해야지, 자기 껏이 되기 때문에, 하나 하나 실행을 해 보면서, 배워나가시는 걸 추천 드립니다. 일단, Part 2를 통해서, 기본적으로 "chatterbot" 에서 제공하는 세팅과 그 세팅을 이용해서, 내, 외부 파일을 이용해서 chatbot을 training 하시는 법을 말씀 드렸습니다. 이후 포스팅은 제가 고민해보고, 추가적으로 필요하다고, 생각하면, 추가 포스팅 하도록 하겠습니다.
제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.
[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
'파이썬 (Python) > 딥러닝 (Deep Learning)' 카테고리의 다른 글
파이썬 음성을 텍스트로 변환 하고, 내 말에 대답하는 AI 로봇 만들기 + gTTs, SpeechRecognition 라이브러리 (0) | 2021.02.28 |
---|---|
머신 러닝(Machine Learning) - 선형 회귀 모델링 Analystical Solution 사용 방법 (0) | 2021.02.28 |
Python에서 이미지 파일을 OCR을 이용하여 텍스트를 추출하는 방법 + pillow, pytesseract 패키지 (2) | 2021.02.28 |
파이썬 Python Tessaract-OCR 정의 및 사용 방법 (0) | 2021.02.28 |
파이썬 Python을 이용한 OCR (optical character recognition) 이용 방법 + Tessaract 설치 방법 (1) | 2021.02.27 |
댓글