Skip to content

Commit

Permalink
Merge branch 'release/v0.4'
Browse files Browse the repository at this point in the history
  • Loading branch information
krikit committed Jun 17, 2019
2 parents e29c266 + 4d92033 commit fa5fbd1
Show file tree
Hide file tree
Showing 56 changed files with 1,509 additions and 1,359 deletions.
Binary file added .github/doc/khaiii_for_space_error.pptx
Binary file not shown.
Binary file not shown.
Binary file added .github/img/multi-task-learning.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified .github/img/network.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,34 @@ CNN 모델에 대한 상세한 내용은 [CNN 모델](https://github.com/kakao/k
성능
----
### 정확도

#### v0.3
CNN 모델의 주요 하이퍼 파라미터는 분류하려는 음절의 좌/우 문맥의 크기를 나타내는 win 값과, 음절 임베딩의 차원을 나타내는 emb 값입니다. win 값은 {2, 3, 4, 5, 7, 10}의 값을 가지며, emb 값은 {20, 30, 40, 50, 70, 100, 150, 200, 300, 500}의 값을 가집니다. 따라서 이 두 가지 값의 조합은 6 x 10으로 총 60가지를 실험하였고 아래와 같은 성능을 보였습니다. 성능 지표는 정확률과 재현율의 조화 평균값인 F-Score입니다.

![](.github/img/win_emb_f.png)

win 파라미터의 경우 3 혹은 4에서 가장 좋은 성능을 보이며 그 이상에서는 오히려 성능이 떨어집니다. emb 파라미터의 경우 150까지는 성능도 같이 높아지다가 그 이상에서는 별 차이가 없습니다. 최 상위 5위 중 비교적 작은 모델은 win=3, emb=150으로 F-Score 값은 97.11입니다. 이 모델을 large 모델이라 명명합니다.

#### v0.4
[띄어쓰기 오류에 강건한 모델을 위한 실험](https://github.com/kakao/khaiii/wiki/%EB%9D%84%EC%96%B4%EC%93%B0%EA%B8%B0-%EC%98%A4%EB%A5%98%EC%97%90-%EA%B0%95%EA%B1%B4%ED%95%9C-%EB%AA%A8%EB%8D%B8%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%8B%A4%ED%97%98)을 통해 모델을 개선하였습니다. v0.4 모델은 띄어쓰기가 잘 되어있지 않은 입력에 대해 보다 좋은 성능을 보이는데 반해 세종 코퍼스에서는 다소 정확도가 떨어집니다. 이러한 점을 보완하기 위해 base 및 large 모델의 파라미터를 아래와 같이 조금 변경했습니다.

* base 모델: win=4, emb=35, F-Score: 94.96
* large 모델: win=4, emb=180, F-Score: 96.71


### 속도

#### v0.3
모델의 크기가 커지면 정확도가 높아지긴 하지만 그만큼 계산량 또한 많아져 속도가 떨어집니다. 그래서 적당한 정확도를 갖는 모델 중에서 크기가 작아 속도가 빠른 모델을 base 모델로 선정하였습니다. F-Score 값이 95 이상이면서 모델의 크기가 작은 모델은 win=3, emb=30이며 F-Score는 95.30입니다.

속도를 비교하기 위해 1만 문장(총 903KB, 문장 평균 91)의 텍스트를 분석해 비교했습니다. base 모델의 경우 약 10.5초, large 모델의 경우 약 78.8초가 걸립니다.

#### v0.4
모델의 크기가 커짐에 따라 아래와 같이 base, large 모델의 속도를 다시 측정했으며 v0.4 버전에서 다소 느려졌습니다.

* base 모델: 10.8 -> 14.4
* large 모델: 87.3 -> 165


사용자 사전
----
Expand Down
2 changes: 1 addition & 1 deletion include/khaiii/khaiii_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// constants //
///////////////
#define KHAIII_VERSION_MAJOR 0
#define KHAIII_VERSION_MINOR 3
#define KHAIII_VERSION_MINOR 4
#define _MAC2STR(m) #m
#define _JOIN_VER(x,y) _MAC2STR(x) "." _MAC2STR(y) // NOLINT
#define KHAIII_VERSION _JOIN_VER(KHAIII_VERSION_MAJOR,KHAIII_VERSION_MINOR) // NOLINT
Expand Down
4 changes: 2 additions & 2 deletions rsc/bin/compile_errpatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from typing import Dict, List, Tuple

from khaiii.resource.char_align import Aligner, align_patch
from khaiii.resource.resource import load_restore_dic, load_vocab_out
from khaiii.resource.resource import load_vocab_out, parse_restore_dic
from khaiii.resource.morphs import Morph, ParseError, mix_char_tag
from khaiii.resource.trie import Trie

Expand Down Expand Up @@ -221,7 +221,7 @@ def run(args: Namespace):
args: program arguments
"""
aligner = Aligner(args.rsc_src)
restore_dic = load_restore_dic('{}/restore.dic'.format(args.rsc_src))
restore_dic = parse_restore_dic('{}/restore.dic'.format(args.rsc_src))
if not restore_dic:
sys.exit(1)
vocab_out = load_vocab_out(args.rsc_src)
Expand Down
4 changes: 2 additions & 2 deletions rsc/bin/compile_preanal.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from khaiii.munjong import sejong_corpus
from khaiii.resource.char_align import Aligner, AlignError, align_to_tag
from khaiii.resource.morphs import Morph, ParseError
from khaiii.resource.resource import load_restore_dic, load_vocab_out
from khaiii.resource.resource import load_vocab_out, parse_restore_dic
from khaiii.resource.trie import Trie

from compile_restore import append_new_entries
Expand Down Expand Up @@ -231,7 +231,7 @@ def run(args: Namespace):
args: program arguments
"""
aligner = Aligner(args.rsc_src)
restore_dic = load_restore_dic('{}/restore.dic'.format(args.rsc_src))
restore_dic = parse_restore_dic('{}/restore.dic'.format(args.rsc_src))
if not restore_dic:
sys.exit(1)
restore_new = defaultdict(dict)
Expand Down
4 changes: 2 additions & 2 deletions rsc/bin/compile_restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from typing import Dict

from khaiii.resource.morphs import TAG_SET
from khaiii.resource.resource import load_restore_dic, load_vocab_out
from khaiii.resource.resource import load_vocab_out, parse_restore_dic


#############
Expand Down Expand Up @@ -139,7 +139,7 @@ def run(args: Namespace):
Args:
args: program arguments
"""
restore_dic = load_restore_dic('{}/restore.dic'.format(args.rsc_src))
restore_dic = parse_restore_dic('{}/restore.dic'.format(args.rsc_src))
if not restore_dic:
sys.exit(1)
vocab_out = load_vocab_out(args.rsc_src)
Expand Down
30 changes: 7 additions & 23 deletions rsc/src/base.config.json
Original file line number Diff line number Diff line change
@@ -1,24 +1,8 @@
{
"batch_grow": 10000,
"batch_size": 500,
"check_iter": 10000,
"context_len": 7,
"cutoff": 2,
"debug": false,
"embed_dim": 30,
"epoch": 104,
"gpu_num": 7,
"hidden_dim": 310,
"in_pfx": "./data/pos_tagger/munjong",
"iter_best": 4440000,
"iteration": 4440000,
"learning_rate": 3.3813919135227317e-06,
"log_dir": "./logdir",
"lr_decay": 0.9,
"model_id": "munjong.cnn.cut2.win3.emb30.lr0.001.lrd0.9.bs500.ci10000.bg10000",
"model_name": "cnn",
"out_dir": "./logdir/munjong.cnn.cut2.win3.emb30.lr0.001.lrd0.9.bs500.ci10000.bg10000",
"patience": 10,
"rsc_src": "../rsc/src",
"window": 3
}
"cutoff": 1,
"embed_dim": 35,
"hidden_dim": 320,
"model_id": "munjong.cut1.win4.sdo0.1.emb35.lr0.001.lrd0.9.bs500",
"rsc_src": "../rsc/src",
"window": 4
}
Loading

0 comments on commit fa5fbd1

Please sign in to comment.