BLOG main image
분류 전체보기 (46)
Life (4)
Computer Science (3)
Programming (6)
Opensource (6)
Project (17)
Tip (10)
artikel terbaru. berita tekno..
artikel terbaru. berita tekno..
Best way to develop a mobile a..
Best way to develop a mobile a..
120,547 Visitors up to today!
Today 44 hit, Yesterday 69 hit
daisy rss
tistory 티스토리 가입하기!
'NLP'에 해당되는 글 7건
2016.05.12 02:00

KOMORAN 3.0에 대한 안정성 및 피드백을 받기 위해서 베타 버전을 공개합니다.


2.0 대비 주요 변화는 아래와 같습니다.


  • 속도 개선
    • KOMORAN 2.0 : 초당 0.4MB 분석 (MB/sec)
    • KOMORAN 3.0 : 초당 1.0MB 분석 (MB/sec)
  • 기능 추가
    • 형태소 분석 결과로 입력 문장 내 형태소 위치 정보 제공
    • 형태소 분석 결과 중 명사 추출 기능 제공
    • 형태소 분석 결과를 plain text로 제공
    • training 모듈 추가 (직접 training/tuning 하실 수 있습니다!!!!)
  • gradle 적용
  • wiki title을 사전에 적용


기존의 자료 구조를 trie에서 aho-corasick으로 변경하여 속도를 개선하였습니다. (aho-corasick을 찾는데까지 오래 걸림...ㅠㅠ)

또한 lucene 기반의 analyzer에서 쉽게 적용할 수 있도록 분석 결과 token의 position 정보를 제공합니다. (개선해야 될 부분이 많습니다...ㅠ)

아직 KOMORAN 2.0처럼 많이 부족합니다.

그러나 KOMORAN 2.0 처럼 많이 사용해주시고 많은 피드백을 주신다면 감사드리겠습니다. (_ _)

사용법 및 소스는 아래 링크에서 확인하실 수 있습니다.

https://github.com/shin285/KOMORAN


덧, 있어보이려고 github repository에 badge를 2개나 붙였으나....개발 능력 부족으로 인해 coverage가 매우 낮지만....동작에는 문제가 없습니다..ㅠㅠ


저작자 표시 비영리 변경 금지
신고
코랄칼슘 | 2016.05.16 21:51 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요!! 코모란 잘 쓰고 있습니다.
에러리포트요!
싸이/VV+는/ETM 가수/NNG+다/JX
가수 싸이는 항상 VV로 나오네요 ㅠㅠ
shine_ing | 2016.05.18 11:40 신고 | PERMALINK | EDIT/DEL
싸이가 사전에는 있지만 싸이/VV가 확률이 더 높게 나와서 생기는 현상이네요. 학습 데이터를 도메인에 맞게 수정하는 방법 밖에는 없을 것 같습니다만...어떻게 하면 도메인에 맞게 자동으로 확률 값을 수정할 수 있게 할지 계속 고민하고 있겠습니다~ 피드백 감사드립니다 :)
김간지 | 2016.05.26 18:07 신고 | PERMALINK | EDIT/DEL | REPLY
회사에서 써보려고 하는데 3.0 beta 버전 혹시 상업적 이용불가 인가요???
shine_ing | 2016.05.26 18:09 신고 | PERMALINK | EDIT/DEL
아파치 라이센스여서 사용하셔도 무방합니다만, 아직 beta여서 안정성이 조금 떨어질 수 있습니다 :)
mjxaone | 2016.06.18 01:29 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요.
개인적으로 검색엔진의 기초부분을 작업하고 싶어서
형태소 분석기를 찾던도중 KOMORAN을 보게 되었습니다.
조만간 열심히 사용하고, 많은 요청(?) 하겠습니다.
좋은 자료 감사합니다.
:D
개발개발 | 2016.08.13 18:23 신고 | PERMALINK | EDIT/DEL | REPLY
"바이든 부통령, 포로셴코과 대통령과 크림 사태 논의 통화" 라는 String 값으로 돌리는데요 ㅠㅠ
java.lang.NullPointerException 이 뜨네요...
바이든 부통령 이라는 단어 때문인거 같은데 해결법좀 알려주세요. ㅠ
그리고 그 포로셴코와 같은 단어는 명사 결과로 안나오는데 어떻게 해야하죠??

해보니 2.4버전에서는 되는데요 혹시 2.4버전에서 3.0버전의 analyzeResultList.getNouns() 같은게 있나요??
shine_ing | 2016.08.18 01:31 신고 | PERMALINK | EDIT/DEL
개인적인 사정 때문에 답변이 많이 늦어졌네요. 죄송합니다 ㅠㅠ말씀해주신 소중한 피드백으로 아주 치명적인 버그를 찾아냈습니다. 진심으로 감사드립니다. 방금 릴리즈한 최신 버전에서는 해결되었습니다. 번거로우시겠지만 앞으로도 피드백 부탁드립니다!
덧, 포로셴코와 같은 단어는 사용자 사전에 추가하시면 됩니다 :)
최신 버전 링크 : https://github.com/shin285/KOMORAN/releases/tag/3.0.2
카일로 | 2016.10.04 04:07 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요.
예전에 띄어쓰기 무시한 사전은 아직 3.0에 들어가지 않았나요?

예를들어
바람과 함께 사라지다 이거가 사용자 사전에 있을 경우

바람과함께사라지다
바람과 함께사라지다
바람과함께 사라지다

등등이 2.4에는 고유명사로 잘 분류 되었던것 같습니다. (제 착각일 수도 있어 보입니다만..)
shine_ing | 2016.10.04 09:08 신고 | PERMALINK | EDIT/DEL
해당기능은 따로 제공하지 않습니다~ 물론 가능한 조합만들어서 사전에 넣으시면 원하시는 분석 결과를 얻으실 수 있습니다~
kwon | 2016.12.08 17:47 신고 | PERMALINK | EDIT/DEL | REPLY
komoran3.0 사용을 위해 테스트 하고 있습니다.
동작은 잘 하는데 특정 글자에서 java.lang.NullPointerException 에러가 발생하고 있습니다.
테스트한 글자는 '센', '센트롤이' 두가지 이구요 '센트롤' 이라고 하면 에러없이 정상작동 합니다.
KomoranResult.java 에서 Second 에 셋팅되지 않아서 에러가 나는것 같습니다.
if(jasoBeginIdx >= syllableAreaList.get(i).getSecond()){
syllableAreaPair.setSecond(i+1);
}

좀 더 추척해봤지만 소스 전체를 다 이해하지 못해서 어떻게 수정해야할지를 모르겠습니다~~
도움 부탁드려요~
shine_ing | 2016.12.09 11:14 신고 | PERMALINK | EDIT/DEL
리포팅 감사드립니다. 이슈는 확인을 하였습니다. 최대한 빠른 시일 내로 fix하도록 하겠습니다. 감사합니다.
LEE | 2017.03.20 13:09 신고 | PERMALINK | EDIT/DEL
안녕하세요
혹시 위 이슈 사항이 수정이 되었나요?

수정 되었으면
관련파일을 받을수 있는 곳을 알려주셨으면 합니다.

감사합니다
shine_ing | 2017.03.20 13:10 신고 | PERMALINK | EDIT/DEL
네 수정하였습니다~깃헙에서 클론 받으시면 적용되어 있습니다^^
Freeman | 2017.03.02 17:21 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요. 코모란을 잘 사용하고 있습니다.
테스트로 Thread를 적용해 보니, 아래와 같은 오류가 발생하네요....

코모란 라이브러리 Thread 적용해서 수행이 가능한지 궁금합니다.....

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429)
at java.util.HashMap$KeyIterator.next(HashMap.java:1453)
at kr.co.shineware.nlp.komoran.core.analyzer.Komoran.regularParsing(Komoran.java:641)
at kr.co.shineware.nlp.komoran.core.analyzer.Komoran.analyze(Komoran.java:295)
shine_ing | 2017.03.02 17:24 신고 | PERMALINK | EDIT/DEL
2.x 버전을 쓰신다면 anayle 메소드에 synchronized를 붙여주셔야 합니다. 3.x버전은 thread safe 합니다~ 혹시 어떤 버전을 사용하고 계신지요?
hyon86 | 2017.03.24 15:28 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요. 코모란 3.0을 사용해 보고 있습니다.

kr.co.shineware.nlp.komoran.core.Komoran.java
아래 메서드 여러 스레드에서 동시 접근 해도 문제가 없는지 문의 드립니다.
public KomoranResult analyze(String sentence) <= 해당 메서드가 thread safety 한지?
shine_ing | 2017.03.24 15:31 신고 | PERMALINK | EDIT/DEL
아마 문제없을 것 같습니다~ 해보시고 댓글부탁드릴게요~
PDK | 2017.03.28 15:47 신고 | PERMALINK | EDIT/DEL | REPLY
복합어 분석이 가능한 코모란 3.0을 파이썬에서 사용하고 싶은데, 어떻게 안 될까요...
shine_ing | 2017.03.30 11:07 신고 | PERMALINK | EDIT/DEL
댓글이 늦어졌네요. 복합어 분석이 가능하다는 말씀이 사과나무 -> 사과+나무 이런 형태를 말씀하시는 건가요? 일단 해당 내용을 한번 고민해보겠습니다! 쉽지 않은 문제여서요.. 그리고 3.0을 파이썬에서 사용할 수 있도록 빠른 시간 내에 작업하겠습니다!
STEVE | 2017.07.03 15:24 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요. 코모란3.0을 git에서 받아 코드 분석하면서 스터디 중입니다.
빌드 하면서 코드를 하나씩 쫓아가다 보니 AhoCorasickDictionary<> 부분은 코드를 열어볼 수 없는데, 알고리즘 구현 후 별도로 관리되는 부분인지요?
그리고 models_full 리소스 안의 model 파일은 어떻게 만들어진 것인지 문의 드려도 될까요?
아무것도 모르고 코드만 쫓아서 보려다 보니 바로 막히는 것이 있어 문의 드립니다.
답변이 힘드신 내용이라면, 궃이 답신 없으셔도 됩니다.
잘 보고 있으며, 코드 공개해 주신점 정말 감사합니다.
shine_ing | 2017.07.03 17:11 신고 | PERMALINK | EDIT/DEL
안녕하세요. Ahocorasick 부분은 https://github.com/shineware/aho-corasick 에 구현되어 있습니다.

models_full 부분은 ModelBuilder라는 클래스를 찾아서 보시면 어떻게 바이너리 파일이 만들어졌는지 확인하실 수 있습니다.

관련되서 문의 사항이 있으시면 언제든지 문의부탁드립니다! 감사합니다.
LSH | 2017.07.11 19:47 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요 KOMORAN 3.0 유용하게 잘 사용하고 있습니다.
관련해서 여쭤보고 싶은것이 있는데 2.4버전에서 지원하던
n-best 분석결과는 3.0에서 지원하지 않는지 여쭤보고 싶습니다.
또한 analzeTextfile 을 이용할 때 inputfilename에 들어가는 textfile의 경로를
어디에 위치해야하는지도 궁금합니다.
바쁘시겠지만 답변 부탁드리겠습니다. 감사합니다!
shine_ing | 2017.07.15 01:18 신고 | PERMALINK | EDIT/DEL
댓글이 늦었습니다. 죄송합니다.
3.0 버전에서는 현재 n-best 결과를 지원하지 않고 있습니다. 추후 버전에 n-best 결과를 지원할 수 있도록 하겠습니다. 더불어 analyzeTextfile을 이용하실 때 경로는 원하시는 곳에 파일을 위치시킨 후 그 파일의 경로를 inputfilename으로 지정해주시면 됩니다. 감사합니다.
LSH | 2017.07.31 16:34 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요 친절한 답변 감사드립니다.
다름이 아니라 현재 코모란 3.0 beta 버전의 정확성이 대략 어느정도인지를 알 수 있을까요?
그리고 training과 tunning 의 개념이 무엇인지 궁금합니다.
Name
Password
Homepage
Secret
2014.12.26 13:27

한국어 형태소 분석기 KOMORAN 2.4의 파이썬 버전을 릴리즈 하였습니다.


Jpype를 이용하여 기존 komoran 라이브러리들을 python3에서 사용할 수 있습니다.


소스 코드는 아래 url에서 확인하실 수 있습니다.


https://github.com/shineware/komoranPy_2.0



저작자 표시 비영리 변경 금지
신고
webnautes | 2015.04.18 13:11 신고 | PERMALINK | EDIT/DEL | REPLY
파이썬 2.x에서 태스트해봤는데 잘 동작합니다.. 공개해주셔서 갑사합니다~
shine_ing | 2015.05.08 13:50 신고 | PERMALINK | EDIT/DEL
사용하시다가 불편한점 있으시면 꼭 알려주세요^^
ykhfree | 2015.05.07 22:01 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요^^ 혹시 루씬용 분석기는 개발 중이신지요?
shine_ing | 2015.05.08 13:52 신고 | PERMALINK | EDIT/DEL
우선순위를 두고 계획중이였습니다만..개인적인 일들이 너무 많아서 그동안 개발을 못하고 있었습니다..ㅠ최대한 빨리 개발하도록 하겠습니다!
가판이 | 2015.10.20 17:27 신고 | PERMALINK | EDIT/DEL | REPLY
검색하면서 타고타고 들어오다보니 좋은곳을 발견!

더 충격적인 사실은 D사의 입사동기였다는 ㅋㅋ

잘쓸게요~ㅋㅋㅋ
shine_ing | 2015.11.11 21:24 신고 | PERMALINK | EDIT/DEL
엇 그렇다면.. 현재는 N사에 계시는 그 분이신가요?! ㅎㅎ
궁금해요 | 2016.11.28 16:05 신고 | PERMALINK | EDIT/DEL | REPLY
KoNLPy의 komoran을 잘 쓰고 있습니다. 늘 감사드립니다.

KoNLPy에서 사용자 사전을 추가하고, 이를 바탕으로 분석하도록 설정하려면 어떻게 해야 하는지 궁금합니다.

이와 관련된 python script를 어떻게 해야 하는지 알려주시면 진심으로 감사하겠습니다.
shine_ing | 2016.12.09 11:13 신고 | PERMALINK | EDIT/DEL
답변이 늦어졌네요. 죄송합니다.

KoNLPy에서는 사용자 사전에 대한 핸들링 기능이 없는 것으로 알고 있습니다.

사용자 사전을 적용하시려면 komoranpy를 사용하시길 추천드립니다.. 물론 소스가 깨끗하진 않습니다 ㅠ
Name
Password
Homepage
Secret
2014.07.21 11:37

안녕하세요. 거의 1년만에 공개 포스팅을 작성합니다.


다름이 아니라 내부적으로 계속 KOMORAN에 대해서 업데이트를 진행 중에 있었으며, 

이제 그에 따른 결과물을 다시 한번 공유하고자 이렇게 글을 작성합니다.


1.x 버전과 마찬가지로 이번 버전도 많은 분들의 피드백과 도움이 있어야 더 좋은 형태소 분석기로써의 면모를 갖출 수 있을 것 같습니다.


먼저 속도, 정확률 측면에서 성능이 좋아졌으며 부가적으로 아래와 같이 공백이 포함된 고유명사를 분석할 수 있는 기능이 추가되었습니다.


  • 입력 문장 : 바람과 함께 사라지다를 봤습니다.
  • 사용자 사전 : 바람과 함께 사라지다/NNP
  • 분석 결과
    • 바람과 함께 사라디자/NNP+를/JKO
    • 보/VV+았/EP+습니다/EF+./SF


 위와 같은 기능을 추가한 이유는 기존의 어절 단위로 분석 결과를 제공하는 형태소 분석기의 경우 영화명, 상품명, 행사명 등과 같이 띄어쓰기가 포함된 고유명사를 분석하는데 큰 걸림돌이 되었습니다. 어절 단위 형태소 분석 결과를 토대로 기계 학습, 규칙 등을 사용하는 후처리 모듈을 통해서만 처리가 가능하였습니다. 이에 대한 근본적인 문제를 해결하기 위해서 위와 같은 기능을 추가하였습니다.


현재 마무리 단계에 있으며 기분석 사전에 대한 적용 방법에 대해서 고민 중입니다. 기존 1.x 버전이 어절 단위 기분석 사전이였다면 현재 2.0 버전 부터는 문장 단위 기분석 사전이 될 확률이 높습니다. 이와 관련된 이슈는 추후에 정리하여 공지하도록 하겠습니다.


공개는 이번달 말쯤으로 예정되어있습니다.

빨리 마무리 지어서 공개하도록 하겠습니다.

이번에도 많은 분들이 도움을 주시길 바라겠습니다. 감사합니다.








저작자 표시 비영리 변경 금지
신고
origoni | 2014.07.22 07:01 신고 | PERMALINK | EDIT/DEL | REPLY
정말 감사합니다.
이달 말이 너무 기다려지네요.
잘 사용해보고 피드백 드리겠습니다.
shine_ing | 2014.07.23 10:31 신고 | PERMALINK | EDIT/DEL
감사합니다. 피드백 적극 반영하도록 하겠습니다!
obama | 2014.07.23 10:28 신고 | PERMALINK | EDIT/DEL | REPLY
분석속도는 많이 향상 되었는지요?
이전 버전은 KLT, MACH 2.0 대비 엄청 느렸는데 이부분에 대한 개선이 있었으면 좋겠습니다.
shine_ing | 2014.07.23 10:45 신고 | PERMALINK | EDIT/DEL
안녕하세요. 댓글 감사드립니다.
먼저 분석 속도는 기존 1.0에 비해서 많이 향상되었습니다만,
말씀하신 KLT나 MACH 2.0 대비해서는 아직도 많이 느립니다. 그 이유 중 첫번째는 태그셋의 차이입니다. 아시다시피 세종태그셋 대비 KLT와 MACH에서 분석되는 태그의 종류가 적습니다. 그렇기 때문에 일단 연산 속도 및 정확률 측면에서 높은 성능을 보일 수 있습니다. 또 다른 이유로는 KLT와 MACH 2.0은 C,C++로 만들어졌다는 것입니다. 이러한 근본적인 문제 때문에 현재 C,C++ 버전을 계획 중에 있습니다. 좋은 지적 감사드리며, 항상 속도 문제 때문에 신경이 쓰였었는데 조금 더 고민을 많이 해보겠습니다~ 감사합니다.
shine_ing | 2014.07.23 13:53 신고 | PERMALINK | EDIT/DEL
아 다른 분들이 댓글만으로 판단하실까봐 추가적으로 댓글을 답니다. KLT, MACH 2.0에 비해서는 느리지만 공개된 타 형태소 분석기와는 비슷하거나 더 빠른 처리 속도를 보여줍니다. 감사합니다~
obama | 2014.08.11 17:54 신고 | PERMALINK | EDIT/DEL | REPLY
태그셋이 세종 태그셋 이군요. POS도 사용자 옵션으로 빼면 Full 사용할 경우보다 Minimum으로 사용할 경우의 속도를 높일 수도 있겠죠.
Java라면 꼬꼬마 보단 이미 빠르니 KAIST의 HanNanum과 Lucene의 arirang 속도만 넘기시면 국내 최고가 될 것 같습니다. ^^
shine_ing | 2014.08.11 17:50 신고 | PERMALINK | EDIT/DEL
조만간 슈퍼스피드로 보답하겠습니다!! 커밍순~
Name
Password
Homepage
Secret
2013.04.02 00:08

한글 형태소 분석기 KOMORAN 0.6 버전을 공개합니다.


네이밍과 관련하여 몇몇 분의 문의를 주셨는데, KOMORAN은


KOrean MORphological ANalyzer의 약자입니다.


버전업 주요 히스토리


ver 0.6 

- 기존 0.5 버전 ( 링크 )에 기분석 사전을 추가하였습니다.

- 기분석 사전 추가로 인해 분석 속도가 2배 가량 빨라졌습니다. (sec 당 200kb 분석)

- VM는 최소 512mb를 필요로 합니다. ( -Xms512m -Xmx512m )


  • 형태소 분석 Core 라이브러리 파일
  • 형태소 분석 라이브러리 내 사용되는 유틸성 라이브러리

  • 필요 라이브러리 파일


사용법은 ver 0.5와 같습니다. ( 링크 )


본 형태소 분석기는 상업적 용도의 사용을 금지합니다. (안정성 검증 필요, 별도 연락)


개인 및 비상업적 용도로만 사용을 하실 수 있습니다.


사용중 나타나는 버그 및 오류는 댓글이나 메일 shin285 AT 네이버.com 으로 알려주시기 바랍니다.


※ 현재 자연어처리와 관련된 라이브러리 및 엔진들을 계속적으로 연구하고 만들고자 합니다. 함께 하시길 원하시는 분은 연락부탁드립니다.


========== 2013.04.02 10:45분 추가==========

현재 데이터 경로와 관련된 에러가 있습니다. 금일 저녁에 다시 업로드 하겠습니다. 잠시 링크는 삭제하겠습니다.


========== 2013.04.02 21:09분 추가==========

데이터 경로와 관련된 에러를 수정하였습니다. 에러를 알려주신 "hare"님께 감사드립니다^^


==========[2013.05.20. 11:51분 추가]==========

- 1.0 버전이 릴리즈 되었습니디다. 링크 참고 하시기 바랍니다. ( KOMORAN 1.0 )



저작자 표시 비영리 변경 금지
신고
hare | 2013.04.02 10:33 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요. 만드신 형태소분석기를 사용해봤습니다.
결과는 잘 나오는데
"java.io.FileNotFoundException: \Users\shin285\Documents\6. Data\5. Morphology Model\irrDic.txt (지정된 경로를 찾을 수 없습니다)" 에러메시지가 나오는데요. 다른 설정을 해야 하는건가요?
파일은 정상적으로 들어가 있습니다.
shine_ing | 2013.04.02 21:39 신고 | PERMALINK | EDIT/DEL
아..죄송합니다..그 부분을 손봤어야 했는데..테스트용 라이브러리가 그대로 올라간 것 같습니다. 금일 저녁에 바로 손봐서 다시 업데이트 하겠습니다. 죄송합니다.
============이하 추가 내용============
오류 수정하였습니다. 감사합니다^^
pch | 2013.04.30 22:00 신고 | PERMALINK | EDIT/DEL | REPLY
java.io.FileNotFoundException: 형태소 분석용 파일들이 저장된 루트 폴더observation.obj (지정된 파일을 찾을 수 없습니다)

이런식으로 줄줄이 오류가 뜨는데 해결방법 알려주시면 감사하겠습니다..
shine_ing | 2013.05.01 01:15 신고 | PERMALINK | EDIT/DEL
저장된 루트 폴더의 가장 뒤에 "/"를 붙여주셔야 합니다^^;;
예를 들어 "komoran_datas"라는 루트 폴더에 있다면 "komoran_datas/"로 표기해야합니다.
조만간 유연하게 사용가능 할 수 있도록 수정하겠습니다. 죄송합니다 ㅠㅠ
pch | 2013.05.01 12:59 신고 | PERMALINK | EDIT/DEL | REPLY
0.5의 예제코드에서 보면 폴더를 지정해주는 부분은 없던데, 폴더를 어떤식으로 지정해주나요?
shine_ing | 2013.05.01 22:33 신고 | PERMALINK | EDIT/DEL
0.5 예제코드에서 객체 생성시에 경로를 지정해주는 부분이 있었는데, 포스팅의 문맥과 잘 맞지 않아 이해가 어려웠던 것 같습니다. 죄송합니다. 자세한 내용은 스크린샷을 첨부하였습니다. 감사합니다.
Name
Password
Homepage
Secret
2013.03.19 00:40

자바로 만든 한글 형태소 분석기를 공개합니다.


이름은 KOMORAN입니다.


현재 자체 테스트는 완료하였습니다.


기본적인 어절 단위 형태소 분석기를 따르고 있습니다. (sec 당 약 100kb 분석)


사용 중 발생하는 에러는 댓글로 부탁드립니다.


필요한 라이브러리 파일은 아래와 같습니다.

    • 형태소 분석 라이브러리 내 사용된 유틸성 라이브러리


    • 분석에 필요한 모델 파일들은 아래와 같습니다.



사용법은 아래와 같습니다.


public static void main(String[] args) {

MorphologyAnalyzer analyzer = new MorphologyAnalyzer("형태소 분석용 파일들이 저장된 루트 폴더");

List<List<Pair<String,String>>>reslut =  analyzer.analyze("감기는 자주 걸리는 병이다.");

for (List<Pair<String, String>> wordResult : reslut) {

for (Pair<String, String> pair : wordResult) {

System.out.println(pair);

}

System.out.println();

}

}


사용법과 관련하여 문의 사항이 있어서 스크린샷을 첨부하였습니다.

datas 밑에 필요한 파일들을 위치시켜 놓습니다.



형태소 분석기 객체 생성시에 위에 위치한 폴더 경로인 "datas/"를 지정해줍니다.




출력 결과는 아래와 같습니다.


Pair [first=감기, second=VV]

Pair [first=는, second=ETM]


Pair [first=자주, second=MAG]


Pair [first=걸리, second=VV]

Pair [first=는, second=ETM]


Pair [first=병, second=NNG]

Pair [first=이, second=VCP]

Pair [first=다, second=EF]

Pair [first=., second=SF]


본 형태소 분석기는 상업적 용도의 사용을 금지합니다. (안정성 검증 필요, 별도 연락)


개인 및 비상업적 용도로만 사용을 하실 수 있습니다.


※ 현재 자연어처리와 관련된 라이브러리 및 엔진들을 계속적으로 연구하고 만들고자 합니다. 함께 하시길 원하시는 분은 연락부탁드립니다.


==========[2013.03.20. 14:50분 추가]==========

- 현재 성능 테스트, 오류 및 버그 분석을 위해서 기분석 사전(FWD)을 사용하지 않고 있습니다.


==========[2013.03.22. 14:50분 추가]==========

- 현재 내용은 4월 1일부터 새로운 버전으로 릴리즈 예정입니다. 이용에 참고 하시기 바랍니다.


==========[2013.04.01. 23:50분 추가]==========

- 기분석 사전이 포함된 새로운 버전으로 릴리즈 되었습니다. 링크 참고 하시기 바랍니다. ( KOMORAN 0.6 )

- 현재 버전은 기존에 사용중이신 분들을 위해 그대로 유지하겠습니다.


==========[2013.05.20. 11:51분 추가]==========

- 1.0 버전이 릴리즈 되었습니디다. 링크 참고 하시기 바랍니다. ( KOMORAN 1.0 )


저작자 표시 비영리 변경 금지
신고
안녕하세요 | 2013.03.20 13:53 신고 | PERMALINK | EDIT/DEL | REPLY
저는 프로그램같은 건 전혀 모르지만 예시문장부터 오류길래 남겨요. 감기는은 감기/NNG+는/JX 일텐데 프로그램은 동사 감기다로 분석했네요 ^^;
shine_ing | 2013.03.20 14:48 신고 | PERMALINK | EDIT/DEL
안녕하세요^^ 사실 감기가 NNG가 맞지만 현재 어절 내 확률기반으로 계산을 하고 있기 때문에 VV로 나오고 있습니다~ 물론 어절 간의 정보를 이용하면 감기/NNG로 나올 수는 있습니다만, 전체적인 성능은 오히려 떨어지는 단점이 있습니다~ 지적 감사드립니다~

결론 : 데이터 추가 또는 어절 정보 사용으로 수정 가능.
조치 : 조만간 업데이트 예정.
유총재 | 2013.04.01 14:22 신고 | PERMALINK | EDIT/DEL | REPLY
안녕하세요.

분석기 잘 사용하고 있습니다.

Clien에서 졸업작품에 사용한다고 글을 남겼는데..

데이터가 좀 많은 것을 for문으로 돌리면서 넣어봤더니...

Heap space 오류를 뱉어내는군요 ㅠ

다른 부분에서의 Memory Leak은 다 확인 해 보았으나, 형태소 분석기를 추가하면 Memory 오류가 발생합니다.

혹, 분석기 내에서 제가 인풋으로 집어넣은 String이나..String을 통해 분석된 형태소가 계속 저장되어 있는 건 아닌지 싶어 글 남깁니다.

항상 감사하고 있습니다!
shine_ing | 2013.04.02 00:42 신고 | PERMALINK | EDIT/DEL
안녕하세요.
내부적으로 init을 해주어서 메모리 부족문제는 최대한 안나도록 해놓았습니다만, 한번 더 확인해보겠습니다. 혹시 그 데이터를 제가 테스트 해볼 수 있을까요?
========= 이하 추가 내용 =========
현재 1G정도의 문서를 분석해봤는데 memory 오류가 나질 않네요..실험하신 데이터를 제가 직접 돌려봐야할 것 같네요. 데이터 좀 부탁드리겠습니다 ^^
유총재 | 2013.04.02 10:50 신고 | PERMALINK | EDIT/DEL | REPLY
직접 테스트 해 보셨다니 감사합니다.ㅠㅠ

실험 데이터 보기 쉽게 정리해서 올리겠습니다!

소스코드를 코멘트로 올리는 게 편할까요..메일로 따로 보내드릴까요??
shine_ing | 2013.04.02 11:13 신고 | PERMALINK | EDIT/DEL
용량이 크지 않으면 메일로 보내주셨으면 합니다 ^^
shin285 AT naver.com 으로 부탁드리겠습니다~
shine_ing | 2013.04.05 09:18 신고 | PERMALINK | EDIT/DEL | REPLY
"유총재"님이 알려 주신 Heap space 오류는 형태소 분석기 문제가 아닌 것으로 확인 됐습니다.
casionwoo | 2013.05.07 12:29 신고 | PERMALINK | EDIT/DEL | REPLY
질문이 있는데요 혹시 Pair에서 second가 그 형태소의 의미인거같은데 설명을 찾을수가 없어요 혹시 각각이 무슨 뜻인지 알수 있을까요?
shine_ing | 2013.05.08 00:53 신고 | PERMALINK | EDIT/DEL
안녕하세요. KOMORAN 업데이트와 문서 정리를 동시에 하다보니 정신이 없어서 기본적인 설명도 빠트렸네요..ㅠㅠ 기본적으로 형태소 정보는 세종 품사 셋을 따르고 있습니다. http://nlp.kangwon.ac.kr/~nlpdemo/KACTEIL-KMA/right.html 를 참조하시면 될 것 같습니다^^ 감사합니다~
casionwoo | 2013.05.08 11:34 신고 | PERMALINK | EDIT/DEL | REPLY
제가 사용해서 분석을 해 보려하는데 사용은 잘됩니다만 "싸이콘서트"
라는 말을 싸, 이콘서트, 콘서트 이렇게 인식하더라고요

혹시 싸이라는 말을 인식을 못하는거 같은데 사전을 제가 따로 고치는 방법이 있을까요?

원하는 단어를 사전에 등록 시키는 방법이 있는지를 알고 싶습니다.
shine_ing | 2013.05.08 14:46 신고 | PERMALINK | EDIT/DEL
문의주신 내용은 현재 업데이트 되고있는 버전에 반영하였습니다. 금주내로 업데이트 예정이오니 조금만 기다려주세요^^
casionwoo | 2013.05.08 20:07 신고 | PERMALINK | EDIT/DEL | REPLY
혹시 제가 사전을 수정하여서 사용할 수 잇는 방법에는 없을까요?
이상한 에러가 생길때마다 바로바로 수정하여서 사용하고싶어서요.ㅠ
참고로 사용하는 것은 졸업프로젝트에 사용하고 있습니다.
shine_ing | 2013.05.09 02:55 신고 | PERMALINK | EDIT/DEL
사전을 추가 할 수는 있지만 사전을 직접 수정하는 방법은 상당히 위험합니다. 형태소 분석기를 어떤 요소에 사용하고 계신지는 모르겠지만, 사전을 바로바로 수정 하시길 원하신다면 형태소 분석기보다는 정규표현식을 이용한 일반 사전 매칭 방법을 사용하시는 방법이 더 적합할 것 같습니다.
Name
Password
Homepage
Secret
2012.11.05 01:10

자연어처리에 대한 공부를 하다보면 가장 많이 듣는 단어 중 하나는 feature이다.

그리고 항상 실험 부분에서 많이 나오는 단어는 위 제목과 같이 accuracy, precision, recall 이다.

특히 문서 분류나 검색에서 많이 사용되는 실험 척도인데,

주로 precision과 recall을 구한 뒤에 F-measure로 최종 결과를 내는 논문들이 많았다. 

그리고 accuracy로 최종 결과를 내는 논문들 역시 많이 있었는데.

정확률? 재현률? 정밀도?

나 역시 많은 논문을 접하면서 쉽게 단어가 노출되어서 익히 들어왔지만 항상 그때그때 마다 헷갈리는 부분이다.

마치, 일란성 쌍둥이를 한참 들여다보고 나서야 누가 형이고, 동생인지 알 수 있는 것처럼 말이다.

이제 accuracy, precision, recall을 확실하게 기억하기 위해서 집중하도록 하자!!

먼저 표를 살펴보자.



위의 표는 실제 정답(검색, 분류, 띄어쓰기 등..)과 실험 결과를 한 눈에 파악 가능하도록 나타낸 것이다.

먼저 precision에 대해서 알아보도록 하자.


위의 표에서 하늘색 부분을 살펴보자. 실험 결과 true라고 판단 한 것 들이다.

precision은 이렇게 시스템이 true라고 판단 한 것 중에서 실제 true인 것의 percent이다.

즉, 식으로 쓰자면 a/(a+c)가 된다. 

이제 recall에 대해서 알아보자.


recall은 흔히 재현율이라고 번역된다. 실제 정답의 true 중 얼마나 많은 true를 찾아냈느냐 하는 percent이다.

위의 표에서 하늘색 부분이 실제 정답에서의 true이다. 

이 중 시스템이 true라고 판단한 것의 비율이 바로 recall(재현율)이 된다.

즉, 식으로 쓰자면 a/(a+b)가 된다.

마지막으로 accuracy에 대해서 알아보도록 하자.



일반적인 상식(?) 봤을 때 이 시스템의 결과 중 얼마나 맞았는가를 시스템의 성능으로 판단하는 경우가 많다.

이 경우가 바로 accuracy이다.

쉽게 말해서 시스템이 출력해놓은 전체 결과 a, b, c, d 중에서 실제 정답과 같은 판단을 한 비율이 된다.

즉, (a+d)/(a+b+c+d)가 된다.

================================================================================================

이렇게 까지 직접 정리를 해놨으니..다시 까먹는 일이 없었으면 좋겠다..ㅜ_ㅜ

[참조]
http://en.wikipedia.org/wiki/Precision_and_recall
http://www.slideshare.net/nicbet/computing-accuracy-precision-and-recall-presentation

저작자 표시 비영리 변경 금지
신고

'Computer Science > Natural Language Processing' 카테고리의 다른 글

accuracy, precision, recall의 차이  (0) 2012.11.05
Name
Password
Homepage
Secret
2012.10.31 12:01

컴퓨터 전공을 공부하다보면 HMM이라는 말을 자주 접하게 된다.


특히 자연어처리, 패턴인식과 같은 분야에서는 HMM에 대해서 수백번은 들어보게 된다.


HMM은 위키피디아에 보면 정리가 잘 되어있다. (위키피디아 - HMM)


물론 한글로 정리를 잘 해놓으신 분도 계신다. (난다로 님의 블로그)


HMM을 언제 써야하는지 왜 써야하는지는 위에 링크들을 참조하면 큰 도움을 얻을 수 있을 것이다.


필자는 블로그에서 상세히 설명 하고자 하는 것은 아니기 때문에(물론 할 능력도 안되지만..)


단순한 예를 들어서 HMM에 대한 핵심만 정리하도록 하자.


이전 사건에서 현재 사건이 올 수 있는 확률과, 현재 사건 자체가 일어날 확률을 연속적으로 계산하면 된다.


실질적인 예를 들어보자.


공대 사람이 오늘 하루를 돌아다니다가 여자친구를 사귈 수 있는 최적의 장소를 물색해보자


여자친구를 사귀는 중요한 요인이 공대 사람의 행동이라고 가정하자.


공대 사람이 할 수 있는 행동은 "먹기, 놀기, 공부하기, 수면"만 있다고 하자.


과거의 여자친구를 사귄 공대 사람들의 행동과 그 행동을 취한 장소를 살펴보니 다음과 같았다. 


여자친구 있는 공대생 1


도서관    공부

도서관    수면

강의실    놀기

기숙사    먹기

화장실    놀기

기숙사    수면


여자친구 있는 공대생 2


기숙사    수면

강의실    공부

도서관    공부

강의실    수면

화장실    놀기

도서관    놀기

기숙사    수면


오늘도 슬픈 싱글 공대생은 지친 몸을 이끌고 자고->먹고->공부 하려고한다.


이 때 연속된 이 행동을 각각 어떤 장소에서 취해야지 여자친구가 생길 수 있을까?!


HMM으로 학습을 한 후 결과를 보니 도서관->기숙사->강의실 이였다.


어떻게 이러한 결과가 나왔는지 계산해보자.


먼저 주어진 데이터( 여자친구 있는 공대생들의 행동 및 거취 )를 토대로


슬픈 싱글 공대생이 행동할 수 있는 최적의 장소를 구해내야한다.


구하기 위해서는 아래 그림 중에서 가장 높은 값을 갖는 경로 하나를 선택하면 된다.


즉, 아래 그림을 다 계산하면된다. (사실은 다 계산하지 않아도 된다. 자세한 내용은 계속 읽다보면.. )






그러면 끝난다........음 쉽다.........머리는 좀 터질것 같지만 분명히 쉬운게야..


이제 한 스텝씩 해보자.


기본적인 규칙은 이전 장소에서 현재 장소로 올 확률과 현재 장소에서 행동이 일어날 확률을 곱하는 것이다.


먼저 "자고" 파트부터 살펴보자.


시작에서 각각 도서관, 강의실, 기숙사, 화장실로 갈 확률을 구한다. (붉은글씨)


그리고 도서관, 강의실, 기숙사, 화장실에서 각각 잘 확률을 구한다. (파란글씨)


그리고 두 가지 확률을 곱한다. (녹색글씨)






누적확률에 이어서 다음 행동인 먹고를 계산한다.


먹고에서 먼저 도서관부터 계산해보자.


도서관을 계산할 때 아까 자고에서 계산한 누적 확률과 각각의 이전 장소에서 현재 장소인 도서관으로 올 확률을 곱하여 그 중 최대값만 선택한다.


말로하면 어려우니 그림을 보면 쉽게 이해가 된다.






위 그림에서는 이전 누적확률인 1/8과 도서관에서 도서관으로 갈 확률인 1/4를 곱한 값 1/32가 가장 큰 값이다.


구해진 가장 큰 값 1/32와 도서관에서 먹을 확률인 0/4를 곱하면 먹고에서 도서관에 대한 계산은 끝난다.


이런식으로 하여 가장 최대값을 갖는 그래프만 남겨둔 결과는 아래 그림과 같이 된다.


0인 결과는 더 이상 계산하지 않겠다. ( 그림 그리기의 압박.... )






위 그림에서 가장 우측에 계산된 값이 새로운 누적 확률이 된다. 


그럼 이 누적 확률을 갖고 다시 마지막 행동인 공부하기를 계산해보자.


아놔..계산해보니 전부다 0이다. 망했다. 뭘해도 여친은 안생긴다....


사실 확률값을 누적해서 곱하는 알고리즘의 경우에는 대부분 확률값을 0으로 주지 않는다.


그렇기 때문에 여기서는 일단 0을 1/100으로 주고 다시 계산해보자. ( 실제로는 MLE와 같은 방법을 이용하여 0을 대체한다. 이와 관련된 방법은 상당히 매우 무궁무진하기 때문에 생략.... )


최종 결과를 보면 아래 그림과 같다. 





최종적으로 갖게되는 최대값은 0.000855078125 이다.


이 최대값으로부터 지금까지 밟아왔던 곳을 거꾸로 되돌아 가면 가장 최적의 경로가 구해지는 것이다.


지금 계산한 방법이 비터비 알고리즘이다.


초반에 얘기 했듯이 모든 경우의 수를 다 계산하지 않았다. 


이 정도만 대략적으로 살펴본다면 도서관에서 자고 기숙사에서 먹고 강의실에서 공부를 하면 여자친구가 그나마...아주 그나마..생길수도 있다는 기대를 해볼 수 있다.


위의 예를 들어 HMM을 이해하는데 큰 무리는 없을 것이다.


사실 HMM은 형태소 분석기의 품사태거에서 주로 쓰인다. 이전 품사가 현재 품사에 영향을 주기 때문에 HMM이 지향하는 바와 매우 흡사하다.


===================================================================================================


위의 예에서는 확률값 0도 대충 0.01로 주었고,상황 자체도 맞지 않습니다. 단순한 이해를 위한 목적으로 예를 들었으니 너그럽게 이해해주셨으면 합니다.



저작자 표시 비영리 변경 금지
신고

'Computer Science > Machine Learning' 카테고리의 다른 글

HMM (Hidden Markov Model)  (13) 2012.10.31
좋은글 | 2013.04.12 19:22 신고 | PERMALINK | EDIT/DEL | REPLY
영문 hmm설명서보다가 여기와서 읽어보니 단번에 이해되네요ㅎㅎ
shine_ing | 2013.04.13 23:01 신고 | PERMALINK | EDIT/DEL
도움이 되셨다니 다행이네요^^
해리s | 2013.05.28 00:59 신고 | PERMALINK | EDIT/DEL | REPLY
HMM을 혹시 구현하셨나요? ㅎㅎ
포스팅을 보니까 주로 자바를 이용해서 개발을 하시는데 혹시 매트랩도 사용하세요?
shine_ing | 2013.05.28 09:44 신고 | PERMALINK | EDIT/DEL
네 HMM은 자바로 구현되어있습니다^^;
매트랩은 사용해본적이 없어서요 ㅠㅠ
Hoo | 2013.07.10 17:43 신고 | PERMALINK | EDIT/DEL | REPLY
위에 그림에서 보면 시작 -> 도서관,강의실,기숙사,화장실 이렇게 가는 확률이 각각 1/2, 0, 1/2, 0인데 이것을 어떻게 구하죠???
나도공돌 | 2013.11.06 16:33 신고 | PERMALINK | EDIT/DEL | REPLY
웃긴 예시로 잘이해하거갑니다 여친 생기실거에요
공대녀 | 2014.04.09 15:31 신고 | PERMALINK | EDIT/DEL | REPLY
The best ever 이해가 쉬운 글이었습니다 감사합니다~
그런데 HMM학습법에 관해서도 포스팅해주시면 더 좋을것같네요 :)
김영욱 | 2014.09.25 14:15 신고 | PERMALINK | EDIT/DEL | REPLY
정말 많은 도움이 되었습니다. 감사합니다^^
강지훈 | 2014.10.09 10:21 신고 | PERMALINK | EDIT/DEL | REPLY
히든이 없으므로 hmm이 아닌 mm이라능..
shine_ing | 2014.10.09 10:47 신고 | PERMALINK | EDIT/DEL
도서관 강의실 등의 장소가 히든이라는..
이다운 | 2015.06.24 17:52 신고 | PERMALINK | EDIT/DEL | REPLY
감사합니다.
공돌이 | 2015.10.12 16:49 신고 | PERMALINK | EDIT/DEL | REPLY
포스트 내용 잘 봤습니다. 다름이 아니라 시작에서 도서관,강의실,기숙사,화장실 갈 확률이 어떻게 1/2, 0, 1/2, 0 이 되는데 어떻게 해서 저 값이 나오는지 궁금해서 댓글 남깁니다... 감사합니다!
잡상인 | 2016.05.26 22:03 신고 | PERMALINK | EDIT/DEL | REPLY
재미있게 설명하셨네요^^
잘읽었습니다. 감사합니다.
Name
Password
Homepage
Secret
prev"" #1 next