본문 바로가기
파이썬 (Python)/딥러닝 (Deep Learning)

머신 러닝(Machine Learning) - chatterbot 라이브러리, Logic Adapter, SQL Adapter, Chatbot Training 이용 방법

by ★√★ 2021. 2. 28.

 안녕하세요, 이번 포스팅에서는 Chatbot Training 할 내용이 담긴 파일을 통해서 Trainning 하는 방법 뿐만 아니라, chatterbot 라이브러리에 대한 내부 항목에 대해서 하나 하나 설명 드리도록 하겠습니다.

 

Chatbot-chatterbot-썸네일
Chatbot-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)이 나오는 걸 확인 하실 수 있습니다.

 

Chatbot-chatterbot-코드-구현-사진1
Chatbot-chatterbot-코드-구현-사진1

 

      

 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)

 

==============================================================================

  

 - 위 코드를 구현해 보면 아래와 같이 현재 시간을 출력하는 걸 확인 하실 수 있습니다.

 

Chatbot-chatterbot-코드-구현-사진2
Chatbot-chatterbot-코드-구현-사진2

 

 

 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'

              ])

 

==============================================================================

 

Chatbot-chatterbot-코드-구현-사진3
Chatbot-chatterbot-코드-구현-사진3

 

 

파일에 입력되어 있는 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기반으로 출력하는 것이니, 참조 부탁 드립니다.

 

Chatbot-chatterbot-코드-구현-사진4
Chatbot-chatterbot-코드-구현-사진4

 

 

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 내용이 동일하다는 전제) 아래 결과 값이 출력되는 걸 확인 하실 수 있습니다.

 

Chatbot-chatterbot-코드-구현-사진5
Chatbot-chatterbot-코드-구현-사진5

 

이상입니다. 위에 코드를 보시고, 눈으로만 이해하지 마시고, 하나 하나 코드를 입력해야지, 자기 껏이 되기 때문에, 하나 하나 실행을 해 보면서, 배워나가시는 걸 추천 드립니다. 일단, Part 2를 통해서, 기본적으로 "chatterbot" 에서 제공하는 세팅과 그 세팅을 이용해서, 내, 외부 파일을 이용해서 chatbot을 training 하시는 법을 말씀 드렸습니다. 이후 포스팅은 제가 고민해보고, 추가적으로 필요하다고, 생각하면, 추가 포스팅 하도록 하겠습니다.

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글