Rule-based Chatbot
가정을 해보자.
1. 1950년대에 살고 있다.
2. 개인 컴퓨터는 보급되지 않았다.
3. 인터넷이 존재하지 않는다.
그렇다면 어떻게 chatbot을 build할까?
요때 등장한게 바로 ELIZA project이다.
사용자: "나는 요즘 우울해."
ELIZA: "왜 우울하다고 느끼나요?"
사용자: "일이 너무 많아요."
ELIZA: "일이 많다는 것이 당신에게 어떤 의미가 있나요?"
이런 식으로 질문을 되돌리면서 상담사처럼 반응하는 대화 스타일이 특징.
Rogerian Therapy에 기초했는데, 공감과 반영을 통해 마치 꽤 그럴듯하게 대화가 가능했다.
pre-defined rules로 동작을 하며, 처리 순서는 다음과 같다.
사용자: You hate me
ELIZA: WHAT MAKES YOU THINK I HATE YOU
1. 사용자의 문장에서 키워드 (you, me 등)을 찾음.
2. 해당 키워드를 포함하는 패턴과 매칭
3. 일치하는 규칙이 여러 개일 경우, 어떤 규칙을 사용할지 선택해야함. (이때 ranking이 사용됨.)
ranking?
<더 구체적인 키워드 → 높은 우선순위>
<더 일반적인 키워드 → 낮은 우선순위>
ex)
Rule
1. (I, *) → "YOU SAY YOU"
2. (EVERYBODY, *) → "WHO IN PARTICULAR ARE YOU THINKING OF"
INPUT: I know everybody made a cooler chatbot
→ 이 경우 두 규칙 모두 매칭될 수 있지만, I는 EVERYBODY보다 더 구체적인 키워드이므로 I가 선택될 줄 알았는데 EVERYBODY가 선택되었네..? 왜일까 찾아보니까 ELIZA는 rule중의 단어가 문장의 핵심 개념이라고 생각하면 그걸 선택한다고 합니다.
그럼 만약..? 일치되지 않는 input값이 들어온다면?
1. default 값을 내뱉는다. ex) Please go on, That's very intersting, I see 등
2. memory 시스템. 과거에 변환된 응답을 사용한다. → 가장 최근에 저장된 응답부터 사용(LIFO)
Corpus-based Chatbot
What is Corpus and Corpora?
Corpus: NLP에서 사용하기 위해 모아 놓은 텍스트 자료의 집합. 말뭉치.
Corpora: Corpus들이 모여서 Corpora를 형성.
Corpus-based Chatbot은 예전 Rule-based와 다르게 rule을 정의할 필요가 없다.
대신에 architecture, features, characteristics of data에 포커싱을 맞춰야 한다.
Corpus-based Chatbot은 2가지로 대표할 수 있다.
- Information Retrieval based Chatbot (IR-based)
- How does it work?
- 직접 문장을 생성하지 않고, 기존에 있는 대화/응답을 꺼내서 보여주는 시스템.
- 가능한 모든 응답을 확인하고 어떤 응답이 가장 적합한지 결정한다.
- Corpus에서 기존 대화 데이터를 벡터화 한 뒤, 입력과 가장 유사한 질문/응답을 찾는다.
- 사용자의 입력과 가장 유사한 기존 질문을 찾고, 그 질문에 대한 응답을 반환한다.
- 사용자의 입력과 가장 유사한 기존 질문을 찾고, 그 질문 자체를 반환한다.
- 모든 정보 검색 알고리즘을 사용하여 적절한 응답을 선택한다.
- How does it work?
- Machine learned sequence transduction Chatbot
- How does it work?
- Corpus로부터 질문-응답을 학습. (ELIZA의 머신러닝ver.)
- 사람이 규칙을 정하는 대신, 시스템이 직접 규칙을 학습함.
- Encoder-Decoder 구조를 사용 → RNN이나 Transformer를 사용
- 사용자 질문 → 입력 시퀀스를 인코딩하여 내부 표현 생성(Encoder) → 그 표현을 기반으로 출력 시퀀스 생성(Decoder) → 챗봇 응답
- 한계
- 반복적인 응답 문제 (I'm not sure, I don't know 등) → Mutal information objetive, Beam search로 해결가능
- 이전 대화 문맥 반영 어려움 →여러 턴을 요약한 계층적 모델로 해결가능
- 다중 턴 대화의 일관석 부족 → 강화학습 / 적대적 학습 등을 통한 해결가능
- How does it work?
대부분의 Corpus-based Chatbot은 대화 맥락을 거의 모델링 하지 않는다.
메인 관심사는 사용자의 이전 발화를 고려하여 적절한 단일 응답을 생성하는 것이다.
Natural Language Understanding
Frame-based Dialogue? 프레임 구조를 기반으로 정보를 수집하고, 대화를 진행하는 방식의 대화 시스템
- Automated Speech Recognition (ASR), Audio inputs → a string of text
- Text-to-Speech Synthesis, A string of text → Audio output
- Slot Filling
- Slot Filling in Frame-based Dialogue Systems
- 많은 상업용 어플들에서 슬롯은 손으로 쓴 규칙(semantic grammars)을 사용하여 채워진다. → Rule building Slot Filling
- Semantic grammers는 CFG parsing algorithm 으로 parsed 할 수 있다.
- BIO Tagging
- 입력된 각 단어에 대해 어떤 슬롯에 해당하는지를 나타내는 태그를 붙히는 방식
- 각 단어가 슬롯의 시작(B), 내부(I), 해당없음(O) 인지를 분류한다.
- I(O) want(O) to(O) fly(O) to(O) San(B) Francisco(I) on(O) Monday(B) afternoon(I) please(O)
- 만약 B없이 I가 먼저 온다면? 잘못된 태깅
- Bootstrapping
- 모델을 훈련해서 얻은 데이터를 다시 reuse한다. (스스로 키워내는 방식)
- 작은 양의 seed data로 시작하여 rule-based system을 기반으로 학습한다.
- 이 모델을 사용해 새로운 데이터를 자동으로 라벨링하거나 추가 학습 데이터를 만들어낸다.
- Slot Filling in Frame-based Dialogue Systems
- Domain Classification (도메인 분류)
- Intent Determination (의도 결정)
'AI' 카테고리의 다른 글
| [NLP] Text Preprocessing (0) | 2025.04.17 |
|---|---|
| [NLP] Finite State Dialogue Manager(FSDM) (0) | 2025.04.17 |
| [NLP] 시작 (5) | 2025.04.16 |
| Transformer (0) | 2024.12.16 |
| Seq2Seq Text Generation (0) | 2024.12.13 |