[RASA] 기본 지원하는 pipeline 정리(영어 잘 못)

2023. 12. 14. 10:50파이썬/자연어 처리

Rasa Pipeline

 

 

✔️알고 가야할 지식

cf) 희소 특성과 밀집 특성의 주요 차이는 특성 벡터의 표현 방식에 있습니다.

밀집 특성 (Dense Features):

대부분이 0이 아닌 값을 가지는 특성 벡터입니다.
대부분의 기계 학습 모델에서 사용됩니다.
실제 값이 들어있기 때문에 연속적이고 부드러운 변화를 표현할 수 있습니다.
대표적으로 신경망에서 사용되며, 이 모델은 보통 밀집한 실수 값을 입력으로 처리합니다.

희소 특성 (Sparse Features):

대부분이 0인 값을 가지는 특성 벡터입니다.
데이터가 특정 위치에만 관측되는 경우에 효과적입니다.
메모리를 효율적으로 사용할 수 있으며, 대규모 데이터셋에서 유용합니다.
대표적으로 텍스트 데이터에서 사용되는 TF-IDF 벡터, 원-핫 인코딩된 범주형 변수 등이 있습니다. 

 



✔️NLP(대규모 언어학습)

 


1. MitieNLP - 영어,스페인어,독일어 지원 
- 제작: C++기반, 
- 바인딩: Python, R, Java, C, Matlab
- 조건: total_word_feature_extractor.dat이라는 데이터파일이 있어야한다.

 

 

2. SpacyNLP : 한국어 패키지 지원 (3가지 size)
- 조건: 데이터 파일이 있어야함 (사이트 들어가서 다운 가능)
- 명령어: python -m spacy download ko_core_news_md




✔️토크나이저


1. WhitespaceTokenizer - 공백을 구분기호로 사용하는 토크나이저


2. MitieTokenizer - mitieNLP기반 토크나이저(의존성 ▲)


3. SpacyTokenizer - Spacy기반 토크나이저(의존성 ▲)

 



✔️특징 추출

 


1. MitieFeaturizer - mitieNLP기반 featurizers(의존성 ▲)
-종류:  밀집특성(Dense featurizer)
-parameters : pooling: mean과 max 선택가능

 



2. SpacyFeaturizer - Spacy기반 featurizers(의존성 ▲)
-종류: 밀집특성(Dense featurizer)
-parameters : pooling: mean과 max 선택가능

 



3. ConveRTFeaturizer 
-종류: 밀집 특성(Dense Featurizer)
-특징: 영어로 훈련된 데이터가 多 
- 파인 튜닝을 할 필요가 없다
- 임베딩인텐트분류기
- 학습 단어가 영어라면 :pipeline: pretrained_embeddings_convert
    아니라면       :pipeline: “supervised_embeddings”

 



4. LanguageModelFeaturizer
-종류: 밀집 특성(Dense Featurizer)
-조건: model_name,model_weight을 등록해야함 
-parameter: *model_name, *model_weight

 



5. RegexFeaturizer
-종류: 희소 특성(Sparse featurizer) 
-특징: 정규 표현식을 사용하여 특정 패턴을 찾고, 패턴이 발견되면 특성을 생성
- parameter: case_sensitive,use_word_boundaries,number_additional_patterns
case_sensitive : 대소문자 구분 여부
use_word_boundaries: 단어 구분에 공백을 사용하지 않은 언어(중국어같은 경우)
number_additional_patterns: 미래에 추가될 수 있는 패턴을 고려하여 구성
     최소 10 이상 권장(10이상 발생시 해당 패턴은 특성화 중 고려되지 않음)

 




6. CountVectorsFeaturizer
-종류: 희소 특성(Sparse featurizer)
-조건: 토큰
-특징: 각 토큰(단어)가 문장에 나타나는 빈도를 계산하여 해당 단어의 백터를 만든다.
       이를 통해 중요성과 문맥을 이해
-parameters : min-ngram / max-ngram /analyzer
min-ngram:토큰 최소 길이
max-ngram:토큰 최대 길이
analyzer: 분석기(word,char,char_wb)
additional_vocabulary_size :(default-[text:1000,response: 1000, action_text:1000])
모델을 처음부터 새로 훈련하는 동안 점진적 훈련을 고려할 때 추가 어휘의 크기

 



7. LexicalSyntacticFeaturizer
-종류: 희소 특성(Sparse featurizer)
-조건: token
             -특징 -여러 특징이 추출되며, 이러한 특징들은 모델이 문장을 이해하고 패턴을 학습하는 데 도움이 됩니다. 

✔️주요 특징
BOS (Beginning of Sentence): 토큰이 문장의 시작에 있는지 여부를 확인합니다.
EOS (End of Sentence): 토큰이 문장의 끝에 있는지 여부를 확인합니다.
low: 토큰이 소문자인지 여부를 확인합니다.
upper: 토큰이 대문자인지 여부를 확인합니다.
title: 토큰이 대문자로 시작하고 나머지 문자가 모두 소문자인지 여부를 확인합니다.
digit: 토큰이 숫자만 포함하는지 여부를 확인합니다.
prefix5: 토큰의 처음 다섯 문자를 가져옵니다.
prefix2: 토큰의 처음 두 문자를 가져옵니다.
suffix5: 토큰의 마지막 다섯 문자를 가져옵니다.
suffix3: 토큰의 마지막 세 문자를 가져옵니다.
suffix2: 토큰의 마지막 두 문자를 가져옵니다.
suffix1: 토큰의 마지막 문자를 가져옵니다.
pos (Part-of-Speech): 토큰의 품사 태그를 가져옵니다 (SpacyTokenizer가 필요합니다).
pos2: 토큰의 품사 태그에서 처음 두 문자를 가져옵니다 (SpacyTokenizer가 필요합니다).

 




✔️인텐트 분류기


1.MitieIntentClassifier
- 조건: MitieNLP

 


2. LogisticRegressionClassifier
- 사이킷런 기반 로지스틱회귀 분류기
-  조건: 특성구분(Sparse Features or Dense Features)이 선행되어야함
- parameters
1. max_iter : 최대 반복 횟수 
2. solver: 최적화 알고리즘 (lbfgs, 데이터셋이 작을 경우 liblinear)
3. tol: 최적화 중단 기준을 정하는 오차 (0~1 / 매우작은숫자를 지정하는게 좋음)
4. random_state : 훈련전 데이터 섞기
5. ranking_length: 몇위까지 보여줄지

 

 


3. SklearnIntentClassifier
- 사이킷런인텐트 분류기
- GridSearchCV기반
- 조건: 밀집 특성이 있어야한다.
- parameters 
1. C : 규제 강도 (EX) C:[1,2,5,10,20,100])
2. kernel: SVM 사용 커널을 지정
3. gamma: 커널의 영향을 미칠 범위 지정(0~1)
4. max_cross_validation_folds: 최대 교차 검증 폴드 수 훈련중 교차검증을 할 수를 정한다.
5. scoring_function: 하이퍼파라미터를 평가하는데 사용되는 스코어 함수 (ex) f1_weight)

 

 


4.KeywordIntentClassifier 
- 소규모 프로젝트 인텐트 키워드 매치 분류기
- 특징:
1.키워드 매칭
2.대소문자 구분
3. 정확한 일치만 찾음
4. 학습데이터의 키워드 사용된 키워드

 

 


5.DIETClassifier
-Dual Intent Entity Transformer 
-사용자 질문 1개에서 2가지 이상의 의도를 파악하거나 분류하는 기능
-조건: 밀집 특성(Dense Featurizer),희소특성이 선행되어야함 
- 특징: CountVectorsFeaturizer를 사용한 경우 OOV(등록되지 않은)것은 0.0 혹은 None이 발생할 수 있다.
            char_wb를 사용한 경우 항상 0.0보다 큰 확신도 값이 있는 intent가 나와야한다.

            엔터티 추출 기능까지 동시에 수행함 (default로)


-parameters :
1.epochs 
- 학습 반복 횟수
2.hidden_layers_sizes
- 입력층 출력층 size 맞추기 (2의 배수로 적는게 좋다)
3.embedding_dimension
- default: 20
- 임베딩 레이어층에 출력 차원을 정의하는 것 
4.number_of_transformer_layers
- 트랜스포머 레이어 수 설정 
5.transformer_size
- default : 256
- 트런스포머 단위 수를 설정
- 트랜스포머에서 나오는 백터를 지정하는 것 
- number_of_attention_head의 매개변수의 배수여야만 한다.
- 아니면 오류 
6.connection_density
- default: 0.2 
- 피드 포워드 레이어(입력층)의 가중치를 정의
- 1로 설정해주면, 어떤 커널 가중치가 0으로 설정되지 않고, 표준 피드 포워드 레이어로 작동
- 0으로 설정하면 안된다. -> 학습 불가
7.constrain_similarities
- default: false
- True로 설정시, 모든 유사성 항목에 대해 시그모이드를 적용하고, 크로스엔트로피 손실을 적용
- 긍정,부정 레이블의 유사성을 찾는데 도움을 준다.
- 일반화 기능에 기여
8.model_confidence
- softmax
- 추론 신뢰도를 어떻게 계산하는지 (i_acc 값 계산)

 

 


6.FallbackClassifier
- 모델이 의도를 파악하지 못했을때 기본처리를 제공
- 모델 예측이 낮을때 유리
- config.yml 파일에서 제어
- thershold(임계치) > 신뢰도(confidence_score)면 Fallback 활성화
- ambiguity_threshold: 모델이 여러 의도에 대해 예측을 내릴 때 가장 높은 신뢰도와 두번째 높은 신뢰도의 차 이가 이 임계치보다 낮을경우 활성화




✔️엔터티 추출기

1.MitieEntityExtractor
- 조건: MitieNLP사용 + token
2.SpacyEntityExtractor
- 조건: SpacyNLP
- 특징: 확신도를 제공하지 않음(return null) / 재학습이 불가능함 / 단순히 식별만 가능

3.CRFEntityExtractor
- 조건부 랜덤 필드 엔터티 추출기
- 조건: 밀집특성과 token
- 인접한 엔터티 태그간의 전이도를 고려
- L1, L2 가중치 제약 가능 
- Pos, Pos2 기능을 사용할 땐, SpacyTokenizer를 사용해야함.
- 패턴 파악시 RegexFeaturizer 사용


4.DucklingEntityExtractor
- 숫자,날짜,회계 등 엔터티를 추출할때 사용
- Ducking 서버가 동작하고 있어아함(✔️)



그외 기타
1. EntitySynonymMapper
-서로 동의어인 엔터티를 매핑하고 매핑된 동의어를 단일 표준화형태로 변환
-이것을 사용할땐 무조건 아래에 엔터티 추출기를 두어야함


2. ResponseSelector
-응답 예상 선택기




728x90