Commit 2a508104 authored by Cha DaEun's avatar Cha DaEun

first commit

parents

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 2.7 (NeuroNLP2)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="R User Library" level="project" />
<orderEntry type="library" name="R Skeletons" level="application" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>
\ No newline at end of file
<component name="libraryTable">
<library name="R User Library">
<CLASSES />
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7 (NeuroNLP2)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/kr_stack_pointer_git.iml" filepath="$PROJECT_DIR$/.idea/kr_stack_pointer_git.iml" />
</modules>
</component>
</project>
\ No newline at end of file
This diff is collapsed.
# Stack-Pointer Network를 이용한 한국어 의존 구문 분석
2018년 국어 정보 처리 경진대회 지정분야에서 동상을 수상한 한국어 의존 구문 분석 시스템입니다.
2018년 한글 및 한국어 정보처리 학술대회의 'Stack-Pointer Network를 이용한 한국어 의존 구문 분석'*(차다은, 이동엽, 임희석, 2018)*에서 제안된 시스템입니다.
['Stack-Pointer Networks for Dependency Parsing'](https://arxiv.org/pdf/1805.01087.pdf)*(Xuezhe Ma, Zecong Hu, Jingzhou Liu, Nanyun Peng, Graham Neubig and Eduard Hovy, 2018)*를 기반으로, Encoder의 입력 단어 표상에서의 자질 보강을 통해 Stack-Pointer Network를 한국어 의존 분석에 적합하도록 확장하였습니다.
- [NeuroNLP2](https://github.com/XuezheMax/NeuroNLP2)[Stack-Pointer Networks for Dependency Parsing](https://arxiv.org/pdf/1805.01087.pdf) 구현 코드를 기반으로 하였습니다.
- demo 페이지는 [TurboParser](http://www.ark.cs.cmu.edu/TurboParser/)[SEMAFOR](http://www.ark.cs.cmu.edu/SEMAFOR/)의 오픈 소스 웹 demo인 [SemViz](https://github.com/sammthomson/semviz)를 이용하여 구축되었으며, 의존 트리 시각화에는 [brat](http://brat.nlplab.org/)이 사용되었습니다.
---
- `data/`
- `kmat/`: KMAT 형태소 분석기 디렉터리
- `demo/`: 웹 demo 디렉터리
- `kr_stack_pointer/`: 한국어 대상 Stack-Pointer Network 디렉터리
- `lib/`: 라이브러리 디렉터리
Python 2.7에서 테스트 되었습니다. 실행 전 아래와 같이 필요한 패키지들을 설치합니다.
```
pip install -r requirements.txt
```
## kr_stack_pointer
- `dataset/`: 의존 분석 데이터셋 디렉터리
의존 분석 데이터셋은 세종 의존 분석 데이터셋의 형식을 따라야 하며, cp949 인코딩을 사용합니다.
```
; 원본 문장
단어_인덱스 지배소_단어_인덱스 의존유형 형태소_분석_결과_1 형태소_분석_결과_2
...
```
이 때 `형태소_분석_결과_1`은 현재 코드에서 무시합니다.
예시)
```
; 디자인 세계 넓혀
1 2 NP 디자인[NNG] 디자인/NNG
2 3 NP_OBJ 세계[NNG] 세계/NNG
3 0 VP 넓히[VV]|어[EC] 넓히/VV|어/EC
```
- `glove/`: pre-trained embedding 디렉터리
현재 코드에서는 형태소, 음절-태그 자질의 pre-trianed embedding 적용이 가능합니다.
아래와 같이 pre-trianed embedding를 표현한 파일을 gzip을 통해 압축하여 사용합니다.
```
의/JKG -0.168108 1.451054 -0.878510 ...
하/XSV 0.066654 1.147666 -0.402795 ...
```
- `models/`: 학습 모델 저장 디렉터리
- `StackPointerParser_kr.py`: 모델 학습 python 파일
`run_stackPtrParser_kr.sh`를 통해 실행합니다.
- `run_stackPtrParser_kr.sh`: 모델 학습 python 파일 실행
작성된 hyperparameter들은 경진대회 참여 모델에서 사용한 hyperparameter입니다.
실행을 위해 다음 내용을 수정합니다.
- [NeuroNLP2](https://github.com/XuezheMax/NeuroNLP2)를 clone한 뒤, 첫번째 줄 `NEURO_NLP_PATH`를 해당 경로로 바꿈
- `morph_path`, `syll_path`에 pre-trained embedding 파일 경로 지정
- `train`, `test`, `dev`에 데이터셋 경로 지정
- `model_path`에 모델을 저장할 경로 지정
- `analyze_kr.py`: 모델 테스트 python 파일
`run_analyze_kr.sh`를 통해 실행합니다.
- `run_analyze_kr.sh`: 모델 테스트 python 파일 실행
실행을 위해 다음 내용을 수정합니다.
- [NeuroNLP2](https://github.com/XuezheMax/NeuroNLP2)를 clone한 뒤, 첫번째 줄 `NEURO_NLP_PATH`를 해당 경로로 바꿈
- `test`에 테스트 데이터셋 경로 지정
- `model_path`에 학습한 모델 경로를 지정
## demo
- `demo_server/`: 웹 demo 서버 디렉터리
- `settings.py`
실행을 위해 다음 내용을 수정합니다.
- [NeuroNLP2](https://github.com/XuezheMax/NeuroNLP2)를 clone한 뒤, `NEURO_NLP_PATH`를 해당 경로로 바꿈
- `MODEL_PATH`를 사용할 모델 경로로 지정
- `web_app.py`: 웹 demo 서버를 실행합니다.
- `parser_server/`: 웹 demo에서 사용하는 parser 코드 디렉터리
\ No newline at end of file
CC = gcc
CFLAGS = -O3 -Wall -g -pg
#CFLAGS = -O2 -g -pg
RM= rm -f
CP= cp
BIN= ../bin
LIB= ../lib
.c.o:
$(CC) -c $(CFLAGS) $<
OBJS = dafst.o \
fst_get_probability.o fst_probability_io.o load_double.o \
t2b.o b2t.o \
hsplit.o \
binio.o \
fstdic.o \
fstdic_build.o \
file2lines.o
all: libkmat_exploit.a
libkmat_exploit.a: $(OBJS)
$(AR) rcv $(LIB)/$@ $(OBJS)
ranlib $(LIB)/$@
ln:
${RM} *.c *.h
ln -s /home/dglee/rnd/fnlp/trunk/src/libbin2txt/b2t.c b2t.c
ln -s /home/dglee/rnd/fnlp/trunk/src/libbin2txt/t2b.c t2b.c
ln -s /home/dglee/rnd/fnlp/trunk/src/libbinio/binio.c binio.c
ln -s /home/dglee/rnd/fnlp/trunk/src/dafst/dafst.c dafst.c
ln -s /home/dglee/rnd/fnlp/trunk/src/probtool/fst_get_probability.c fst_get_probability.c
ln -s /home/dglee/rnd/fnlp/trunk/src/probtool/fst_probability_io.c fst_probability_io.c
ln -s /home/dglee/rnd/fnlp/trunk/src/leedcc/hsplit.c hsplit.c
ln -s /home/dglee/rnd/fnlp/trunk/src/probtool/load_double.c load_double.c
ln -s /home/dglee/rnd/fnlp/trunk/include/bin2txt.h bin2txt.h
ln -s /home/dglee/rnd/fnlp/trunk/include/binio.h binio.h
ln -s /home/dglee/rnd/fnlp/trunk/include/dafst.h dafst.h
ln -s /home/dglee/rnd/fnlp/trunk/include/hsplit.h hsplit.h
ln -s /home/dglee/rnd/fnlp/trunk/src/probtool/load_double.h load_double.h
ln -s /home/dglee/rnd/fnlp/trunk/include/probtool.h probtool.h
ln -s /home/dglee/rnd/fnlp/trunk/src/fstdic/fstdic.c fstdic.c
ln -s /home/dglee/rnd/fnlp/trunk/src/fstdic/fstdic_build.c fstdic_build.c
ln -s /home/dglee/rnd/fnlp/trunk/include/fstdic.h fstdic.h
ln -s /home/dglee/rnd/fnlp/trunk/src/sort_uniq/file2lines.c file2lines.c
ln -s /home/dglee/rnd/fnlp/trunk/include/sort_uniq.h sort_uniq.h
clean: rmobj rmlib
rmobj:
${RM} *.o
rmlib:
${RM} $(LIB)/libkmat_exploit.a
link /home/dglee/rnd/fnlp/trunk/src/libbin2txt/b2t.c
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/include/bin2txt.h
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/src/libbinio/binio.c
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/include/binio.h
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/src/dafst/dafst.c
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/include/dafst.h
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/src/sort_uniq/file2lines.c
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/src/probtool/fst_get_probability.c
\ No newline at end of file
link /home/dglee/rnd/fnlp/trunk/src/probtool/fst_probability_io.c
\ No newline at end of file