ch02 Dialogue Systems (2)
Rule based chatbot

초창기 챗봇 구현 방식 중 하나로, 미리 정의된 규칙(Rule) 사람이 set up 해놓음
- 사용자의 입력에 따라 미리 정해둔 규칙과 일치하면 해당 규칙에 연결된 응답을 response 로 제공.
- 장점:
- 단점:
- 규칙이 많아지면 관리가 어렵고, 새로운 패턴이나 복잡한 대화에 대응하기 어려워 확장성(Scalability)이 떨어짐
- 뜬금없는 질문에 대답 불가능..
ELIZA

- 최초의 rule based chatbot
- 공감기반 챗봇

*
는 wildcard, 뭐든 올 수 있음
- 3번째 들어오는 단어
*
를 그대로 \3 에 넣어서 출력
- you hate me 가 들어오면
- what makes you think i hate you 라고 generate 하는 것
- pattern matching 이 잘 되어야 한다…
이런 식으로 구현하면 중복 rule 이 생길 수 있음
--> 같은 응답인데 여러 조건을 만족할 수 있는 문제
Ranking (룰 매칭 우선순위)

- 일반적인 단어가 아닌 것에 매칭을 하자
- I 가 everybody 보다 빈도수가 높음
- 그래서 everybody 를 더욱 specific keyword 로 설정
- high ranking 부여
input 이 아무 rule 이랑도 매칭이 되지 않으면?
No keyword matching


- 엄청 제너럴한 response 제공
- 랭킹에 맞는 제너럴한 response 를 제공하면서 메모리에 저장
- 이전에 메모리에 저장된 정보나 부분적으로 매칭된 규칙을 활용하여 좀 더 관련성 있는 응답을 생성하려는 노력이 필요
- 메모리에 저장되어 있는 답변을 output.
ELIZA 예시

- 사용자 입력:
- managers tend to act the same way
- 아무것도 매칭 안됨
- 가장 낮은 rank 인 일반적인 규칙으로 response

- 사용자 입력:
- They're always dismissing my ideas in meetings.
- 입력 문장에 키워드 "always"가 포함됨
always
를 포함하는 규칙 (. always .) -> CAN YOU THINK OF A SPECIFIC EXAMPLE 이 매칭됨
- 다른 규칙들도 확인해봄
- 가장 일반적인 규칙 (.*) -> IN WHAT WAY (Rank 3)도 매치되지만,
always
의 우선순위가 더 높음

- 사용자 입력:
- well my manager made me come here
- 규칙을 보면 my 에 해당하는 규칙 2개
- 일단 바로 대답: (my .*) -> (YOUR \2) 같은 우선순위 높은 규칙 써서 "YOUR manager..."라고 대답함.
- 동시에 메모리에 저장: "my" 관련 내용을 (예: "YOUR manager...") 메모리 스택에 넣어둠.
- 메모리에 왜 저장하냐면 나중에 써먹으려고..
- 아무 매칭이 없을 때, 메모리에 있는 대답

- 사용자 입력:
- Maybe he is the problem.
- 입력 문장에는 "I", "I'm", "my", "always" 같은 미리 정의된 키워드가 없음
- 따라서 가장 일반적인 규칙인 (.*) -> IN WHAT WAY (Rank 3) 규칙과 매치
그러나 ELIZA는 키워드가 없을 때 다른 전략을 사용
- 입력에서 특정 키워드를 찾지 못하면
메모리 스택에 저장된 내용
을 활용
- ELIZA는 현재 입력에 대한 특별한 규칙이 없으므로, 메모리에서 이전에 저장된 문장을 출력
- 따라서 ELIZA는 메모리에 저장되어 있던 "DOES THAT HAVE ANYTHING TO DO WITH THE FACT THAT YOUR BOYFRIEND MADE YOU COME HERE" 라고 응답
결론적으로, 이 예시는 ELIZA가 사용자의 현재 발언에서 특별한 키워드를 찾지 못했을 때, 이전에 저장해 둔 (과거 대화와 관련된) 문장을 활용하여 응답하는 '메모리' 기능을 보여줍니다. 이를 통해 마치 챗봇이 대화의 맥락을 어느 정도 기억하는 것처럼 보이게 만듭니다.