Skip to content

Commit fa5fbd1

Browse files
committed
Merge branch 'release/v0.4'
2 parents e29c266 + 4d92033 commit fa5fbd1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1509
-1359
lines changed
25.4 MB
Binary file not shown.
Binary file not shown.

.github/img/multi-task-learning.png

47.1 KB
Loading

.github/img/network.png

1.23 KB
Loading

README.md

+16
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,34 @@ CNN 모델에 대한 상세한 내용은 [CNN 모델](https://github.com/kakao/k
2222
성능
2323
----
2424
### 정확도
25+
26+
#### v0.3
2527
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입니다.
2628

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

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

33+
#### v0.4
34+
[띄어쓰기 오류에 강건한 모델을 위한 실험](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 모델의 파라미터를 아래와 같이 조금 변경했습니다.
35+
36+
* base 모델: win=4, emb=35, F-Score: 94.96
37+
* large 모델: win=4, emb=180, F-Score: 96.71
38+
3139

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

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

47+
#### v0.4
48+
모델의 크기가 커짐에 따라 아래와 같이 base, large 모델의 속도를 다시 측정했으며 v0.4 버전에서 다소 느려졌습니다.
49+
50+
* base 모델: 10.8 -> 14.4
51+
* large 모델: 87.3 -> 165
52+
3753

3854
사용자 사전
3955
----

include/khaiii/khaiii_api.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// constants //
1313
///////////////
1414
#define KHAIII_VERSION_MAJOR 0
15-
#define KHAIII_VERSION_MINOR 3
15+
#define KHAIII_VERSION_MINOR 4
1616
#define _MAC2STR(m) #m
1717
#define _JOIN_VER(x,y) _MAC2STR(x) "." _MAC2STR(y) // NOLINT
1818
#define KHAIII_VERSION _JOIN_VER(KHAIII_VERSION_MAJOR,KHAIII_VERSION_MINOR) // NOLINT

rsc/bin/compile_errpatch.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from typing import Dict, List, Tuple
2222

2323
from khaiii.resource.char_align import Aligner, align_patch
24-
from khaiii.resource.resource import load_restore_dic, load_vocab_out
24+
from khaiii.resource.resource import load_vocab_out, parse_restore_dic
2525
from khaiii.resource.morphs import Morph, ParseError, mix_char_tag
2626
from khaiii.resource.trie import Trie
2727

@@ -221,7 +221,7 @@ def run(args: Namespace):
221221
args: program arguments
222222
"""
223223
aligner = Aligner(args.rsc_src)
224-
restore_dic = load_restore_dic('{}/restore.dic'.format(args.rsc_src))
224+
restore_dic = parse_restore_dic('{}/restore.dic'.format(args.rsc_src))
225225
if not restore_dic:
226226
sys.exit(1)
227227
vocab_out = load_vocab_out(args.rsc_src)

rsc/bin/compile_preanal.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from khaiii.munjong import sejong_corpus
2525
from khaiii.resource.char_align import Aligner, AlignError, align_to_tag
2626
from khaiii.resource.morphs import Morph, ParseError
27-
from khaiii.resource.resource import load_restore_dic, load_vocab_out
27+
from khaiii.resource.resource import load_vocab_out, parse_restore_dic
2828
from khaiii.resource.trie import Trie
2929

3030
from compile_restore import append_new_entries
@@ -231,7 +231,7 @@ def run(args: Namespace):
231231
args: program arguments
232232
"""
233233
aligner = Aligner(args.rsc_src)
234-
restore_dic = load_restore_dic('{}/restore.dic'.format(args.rsc_src))
234+
restore_dic = parse_restore_dic('{}/restore.dic'.format(args.rsc_src))
235235
if not restore_dic:
236236
sys.exit(1)
237237
restore_new = defaultdict(dict)

rsc/bin/compile_restore.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from typing import Dict
2121

2222
from khaiii.resource.morphs import TAG_SET
23-
from khaiii.resource.resource import load_restore_dic, load_vocab_out
23+
from khaiii.resource.resource import load_vocab_out, parse_restore_dic
2424

2525

2626
#############
@@ -139,7 +139,7 @@ def run(args: Namespace):
139139
Args:
140140
args: program arguments
141141
"""
142-
restore_dic = load_restore_dic('{}/restore.dic'.format(args.rsc_src))
142+
restore_dic = parse_restore_dic('{}/restore.dic'.format(args.rsc_src))
143143
if not restore_dic:
144144
sys.exit(1)
145145
vocab_out = load_vocab_out(args.rsc_src)

rsc/src/base.config.json

+7-23
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,8 @@
11
{
2-
"batch_grow": 10000,
3-
"batch_size": 500,
4-
"check_iter": 10000,
5-
"context_len": 7,
6-
"cutoff": 2,
7-
"debug": false,
8-
"embed_dim": 30,
9-
"epoch": 104,
10-
"gpu_num": 7,
11-
"hidden_dim": 310,
12-
"in_pfx": "./data/pos_tagger/munjong",
13-
"iter_best": 4440000,
14-
"iteration": 4440000,
15-
"learning_rate": 3.3813919135227317e-06,
16-
"log_dir": "./logdir",
17-
"lr_decay": 0.9,
18-
"model_id": "munjong.cnn.cut2.win3.emb30.lr0.001.lrd0.9.bs500.ci10000.bg10000",
19-
"model_name": "cnn",
20-
"out_dir": "./logdir/munjong.cnn.cut2.win3.emb30.lr0.001.lrd0.9.bs500.ci10000.bg10000",
21-
"patience": 10,
22-
"rsc_src": "../rsc/src",
23-
"window": 3
24-
}
2+
"cutoff": 1,
3+
"embed_dim": 35,
4+
"hidden_dim": 320,
5+
"model_id": "munjong.cut1.win4.sdo0.1.emb35.lr0.001.lrd0.9.bs500",
6+
"rsc_src": "../rsc/src",
7+
"window": 4
8+
}

0 commit comments

Comments
 (0)