Capsule submission 시, "Capsule Interpreter Training" submission reports에 학습 데이터를 분석한 리포트가 포함되어있습니다.
이 리포트는 private submission으로도 확인이 가능하니 꼭 한번 보시고 결과 검토해보시기 바랍니다.
Capsule을 submit하고 "Capsule Interpreter Training"를 클릭하시면 됩니다.
1. Name-Type Vocabulary Status
"Name" type concept으로 태깅된 단어 중 vocabulary에 있는 단어의 비율을 %로 보여줍니다.
100%로 되어 있는 경우, vocab에 있는 단어만을 해당 concept으로 태깅하는 것이고, platform은 vocab에 있는 만을 태깅하여 학습시킵니다. (그럼에도 불구하고 vocab에 없는 단어가 가끔 태깅될 수는 있으니 참고해주세요.)
반대로 0%인 경우, open text로 태깅하여 학습시킵니다. 50%인 경우, vocab에 있는 단어와 open text 둘 다 가능하도록 학습시키게 됩니다.
캡슐 개발자는 자신이 의도한대로 태깅이 되었는지 확인이 필요합니다.
예를 들어 식당, 음식 이름 등은 100% vocab으로 처리가 불가능합니다. 모든 식당이나 음식 이름을 나열할 수는 없으니까요. 이런 경우, 일부는 vocab에 넣어 in-vocab으로, 나머지는 oov(out of vocab)으로 학습하여 적절히 섞어주시는게 중요합니다.
2. Inconsistently-Annotated Words/Tokens
Training data 중 최소 한 번 이상 태깅되었으나, 어떤 training data에서는 태깅이 되지 않은 단어(token)의 리스트입니다. 예를 들어 어떤 token이 거의 항상 태깅되었는데(Labeled), 하나가 태깅되지 않았다면(Unlabeled), 태깅을 놓친 token일 수 있습니다. 캡슐 개발자가 의도한 바와 맞는지 확인하시면 됩니다.
예시
Token 단위로 결과를 보여주는데, 한국어의 경우 조사는 크게 신경쓰지 않아도 됩니다. 하지만 아래 예시처럼 '냉장고' 나 '볼륨' 같은 경우, 대부분 태깅이 되었으나 1,2개 정도가 태깅되지 않았습니다(Unlabeled). 태깅이 누락되었을 확률이 높으니, training data를 살펴보고 누락된 태깅은 추가하도록 합니다.
[Inconsistently-Annotated Words/Tokens] -> all words/tokens that appear both labeled and unlabeled at least once: -------+-----------+---------+-----------+------- Token | % Labeled | Labeled | Unlabeled | Total -------+-----------+---------+-----------+------- .... '소리' | 80.0% | 8 | 2 | 10 '최' | 80.0% | 4 | 1 | 5 '화면' | 80.0% | 8 | 2 | 10 '조절' | 84.6% | 11 | 2 | 13 '대' | 85.7% | 6 | 1 | 7 '4' | 90.0% | 9 | 1 | 10 '모드' | 91.3% | 42 | 4 | 46 '다' | 91.7% | 11 | 1 | 12 '볼륨' | 97.0% | 32 | 1 | 33 '냉장고' | 97.3% | 71 | 2 | 73 -------+-----------+---------+-----------+-------
3. Overly-Matching Vocabulary Terms
Training data 중 vocabulary에는 선언되어 있으나 태깅되지 않은 단어(token)의 ranking입니다. vocab에는 있으나 태깅되지 않은 단어가 많다면 캡슐 성능에도 문제가 되고, 더 많은 학습을 시켜야 합니다. 가능하다면 top rank들은 vocab에서 삭제가 가능한지 검토가 필요합니다.
아래 리스트가 모두 다 문제라는 것은 아니니, 검토해보시고 문제되는 것들이 있으면 수정하시면 될 것 같습니다.
예시
[Overly-Matching Vocabulary Terms] -> active vocabulary terms that match totally-unlabeled text in training examples: --------+---------------------------------------+------- Term | Type | Count --------+---------------------------------------+------- '어' | v:example3.DeleteConfirmationType | 163 '이' | v:viv.time.DateTime | 103 '이' | v:example3.OrdinalNumber | 103 '이' | v:viv.time.Date | 103 '삭제' | v:example3.DeleteConfirmationType | 51 '삭제해' | v:example3.DeleteConfirmationType | 39 '지워' | v:example3.DeleteConfirmationType | 35 '삭제해줘' | v:example3.DeleteConfirmationType | 34 '지워줘' | v:example3.DeleteConfirmationType | 31 '모두' | v:example3.SelectAll | 23 '열' | v:viv.time.DateTime | 18 '열' | v:example3.OrdinalNumber | 18 '한' | v:viv.time.Date | 18 '열' | v:viv.time.Date | 18 '한' | v:viv.time.DateTime | 18 ... --------+---------------------------------------+-------
4. Labeled Text Diversity
태깅된 text 중 같은 단어를 얼마나 반복 사용했는지 확인해볼 수 있습니다. 같은 단어가 자주 반복되었다면, 다양한 단어와 길이로 변경하도록 합니다.
예시
SearchTerm으로 "홍길동" 만 9번이 사용되었습니다. 특히 vocab이 없는 oov(out of vocab)인 경우에 다양한 searchTerm이 잘 인식되도록 하려면, 같은 단어를 반복하기 보다는 다양한 길이(여러 단어)나 다른 이름으로 변경하는 것이 좋습니다.
[Labeled Text Diversity] -> the most frequently-trained text for each labeled type ---------------------------------------+-------+--------+---------------------------+----+--------+------------+----+-------+------------------+----+------- Label | Total | Unique | 1st-Text | Ct | Pct | 2nd-Text | Ct | Pct | 3rd-Text | Ct | Pct ---------------------------------------+-------+--------+---------------------------+----+--------+------------+----+-------+------------------+----+------- v:example4.SearchTerm | 244 | 183 | '홍길동' | 9 | 3.7% | '김삼성' | 6 | 2.5% | '김가람' | 3 | 1.2% v:example4.InputContent | 202 | 173 | '고진감래' | 4 | 2.0% | '문의' | 4 | 2.0% | '금요일' | 3 | 1.5% v:example4.SearchKeyword | 181 | 108 | '홍길동' | 11 | 6.1% | '11번가' | 9 | 5.0% | '쿠팡' | 9 | 5.0% v:example4.InputSubject | 113 | 100 | '고진감래' | 4 | 3.5% | '문의' | 3 | 2.7% | '골든타임' | 2 | 1.8% v:example4.OrdinalNumber | 112 | 20 | '두 번째' | 20 | 17.9% | '첫 번째' | 18 | 16.1% | '세 번째' | 10 | 8.9% v:example4.Marked_Adj | 85 | 32 | '안 읽은' | 17 | 20.0% | '최근' | 12 | 14.1% | '마지막' | 8 | 9.4% v:example4.Marked_N | 74 | 13 | 'vip' | 14 | 18.9% | '별표' | 14 | 18.9% | '중요' | 12 | 16.2% v:viv.time.Date | 50 | 12 | '오늘' | 29 | 58.0% | '어제' | 9 | 18.0% | '6월 12일' | 3 | 6.0% v:example4.DeleteConfirmationType | 15 | 15 | '네' | 1 | 6.7% | '노우' | 1 | 6.7% | '삭제' | 1 | 6.7% v:example4.SelectAll | 10 | 4 | '전부' | 4 | 40.0% | '모두' | 3 | 30.0% | '다' | 2 | 20.0% v:viv.time.DateInterval | 8 | 7 | '5월' | 2 | 25.0% | '3월 4일 이전' | 1 | 12.5% | '5월 20일부터 25일까지' | 1 | 12.5% v:viv.time.DateTimeInterval | 3 | 3 | '5월 20일 11시 부터 21일 8시 까지' | 1 | 33.3% | '오늘 아침' | 1 | 33.3% | '오늘 오전' | 1 | 33.3% v:viv.time.DateTime | 1 | 1 | '12시' | 1 | 100.0% | | | | | | ---------------------------------------+-------+--------+---------------------------+----+--------+------------+----+-------+------------------+----+-------
5. Annotation Counts
각 label, flag, role, goal이 학습에 얼만큼 사용되었는지 빈도를 보여줍니다. balance를 꼭 맞출 필요는 없지만, 의도와 달리 특정 goal이나 label이 너무 작게 학습되었을 수도 있으니 확인이 필요합니다.
goal 중 5개 미만으로 학습된 goal은 동작이 잘 안될 확률이 높습니다. 무조건 학습 추가보다는 해당 goal에 대한 test case를 많이 만들어서 테스트 해 본 후 필요에 따라 학습보강을 하도록 합니다. 만약 잘 쓰이지 않는 goal이라면 삭제하는 것이 전체 성능에도 도움이 됩니다. label, role의 경우에도 학습이 적은 경우에는 태깅이 제대로 되지 않을 수 있습니다. TC와 함께 학습도 보강하도록 합니다.
예시
[Annotation Counts] -> raw counts of each goal, label, role, and flag types, if present: -------------------------------------+------- Goal | Count -------------------------------------+------- example4.ComposeNewEmail | 358 example4.ViewEmail | 193 example4.ReadEmail | 87 example4.ComposeReplyEmail | 55 example4.DeleteEmailR | 55 example4.ReadEmailContent | 48 example4.ViewEmailContent | 45 example4.ComposeForwardEmail | 29 example4.DeleteEmailF | 26 example4.DeleteAllEmailR | 25 example4.DeleteConfirmationType | 15 example4.ComposeReplyAllEmail | 5 example4.EmailDeleteList | 5 example4.OpenNativeSentBox | 5 example4.SummarySelector | 4 example4.DeleteEmailThis | 1 -------------------------------------+-------
---------------------------------------+------- Label | Count ---------------------------------------+------- v:example4.SearchTerm | 244 v:example4.InputContent | 202 v:example4.SearchKeyword | 181 v:example4.InputSubject | 113 v:example4.OrdinalNumber | 112 v:example4.Marked_Adj | 85 v:example4.Marked_N | 74 v:viv.time.Date | 50 v:example4.DeleteConfirmationType | 15 v:example4.SelectAll | 10 v:viv.time.DateInterval | 8 v:viv.time.DateTimeInterval | 3 v:viv.time.DateTime | 1 ---------------------------------------+------- --------------------------------+------- Role | Count --------------------------------+------- example4.SearchModeFrom | 94 example4.SearchModeAll | 76 example4.ExistMarked | 62 example4.SearchModeSubject | 8 example4.NotExistMarked | 8 example4.SearchModeTo | 3 --------------------------------+-------
6. Unlabeled Word/Token Counts
가장 많이 그리고 가장 적게 등장한 태깅 안된 token들 리스트입니다. 캡슐에 크게 중요하지 않은 특정 조사나 동사가 너무 반복되지는 않았는지, 또는 주요 키워드인데 빈도가 아주 낮게 나오지는 않았는지 확인해보면 좋을 것 같습니다.
예시
'줘' 가 포함된 학습이 73%를 차지하는 것을 보면 학습 발화의 동사 패턴이 "해줘" "올려줘" 내려줘" "켜줘"... 처럼 "oo줘"패턴이 많이 학습되었다는 것을 알 수 있습니다. "oo줘" 가 사용자가 많이 사용하는 발화긴 합니다만, 너무 많이 치중되어 있다면 다양한 동사 활용으로 학습하도록 변경합니다.
그리고 "볼륨" 같은 경우에는 주요 키워드 일것 같으나 학습이 아주 적어보입니다. 테스트 후 보강이 필요할 것 같습니다.
[Unlabeled Word/Token Counts] -> most and least frequent unlabeled words/tokens: -------+-------+------------ Token | Count | % Examples -------+-------+------------ '줘' | 줘 | 73.0% '해' | 해 | 31.8% '에' | 에 | 22.3% '에서' | 에서 | 15.3% '여' | 여 | 14.8% '을' | 을 | 14.7% '보' | 보 | 14.1% '로' | 로 | 11.9% '켜줘' | 켜줘 | 9.6% '를' | 를 | 8.9% '꺼' | 꺼 | 8.8% '려' | 려 | 8.5% '설정' | 설정 | 7.0% '어' | 어 | 6.8% '알' | 알 | 6.2% - | - | - '잠가줘' | 잠가줘 | 0.1% '가동' | 가동 | 0.1% '위치' | 위치 | 0.1% '켜볼까' | 켜볼까 | 0.1% '끝나' | 끝나 | 0.1% '말' | 말 | 0.1% '내용물' | 내용물 | 0.1% '켜놔' | 켜놔 | 0.1% '끝내' | 끝내 | 0.1% '오래' | 오래 | 0.1% '중단' | 중단 | 0.1% '잠궈' | 잠궈 | 0.1% '노트북' | 노트북 | 0.1% '어디' | 어디 | 0.1% '볼륨' | 볼륨 | 0.1% -------+-------+------------
Comments
0 comments
Please sign in to leave a comment.