본문 바로가기

전체 글418

Can`t load DaumMapEngineApi.so file 근 5년여 가량 개인 앱 서비스를 운영하고 있었는데, 갑자기 어제 구글플레이개발자콘솔 화면에 아래와 같이 에러 횟수가 확 늘어나는 것을 확인했다. 게다가 어떤 분이 지도보기를 하면 앱이 죽는다고 남겨 주신 리뷰가 해당 버그를 추적하는데 큰 힘이 되었다. 우선 버그를 찾기가 엄청 힘들었다. 일단 내 폰, 와이프 폰에서는 정상 동작 한다!! 사용자 실수인가??? 이런 의심도 찰나.. 우연찮게 빌린 처남 폰에서 지도보기를 하니 앱이 죽는다. -_-;;; 아... 최신 폰에서만 앱이 죽나 보다... 처남에게 양해를 구하고 디버깅 시작!! Can`t load DaumMapEngineApi.so file 위의 에러 메시지가 발생하며 MapView가 실행되지 않는 것을 확인할 수 있었다. '아.. 그래 지도 lib .. 2018. 10. 4.
[HBASE] 간단 명령어 이직하기 전에는 Hbase를 접할 경우가 1도 없었는데, 이직 후 Hbase를 가지고 노는 일이 많기에 사용법을 좀 정리해 보기로 했다. 우선 접속! 아래와 같이 접속하면 된다. $> hbase shell 만약에 customizing한 config 파일이 있고 이 설정대로 접속하고 싶다면? $> hbase --config shell ex) hbase --config /working/hbase shell 위의 명령이 성공하면 hbase shell 내부로 진입 한 것을 확인할 수가 있다.우선 snapshot list를 확인해 보자. hbase> list_snapshots 화면에 snapshot 리스트들이 출력되는 것을 확인할 수가 있다.불필요한 snapshot은 아래 명령을 써서 지워주자. hbase> de.. 2018. 9. 26.
2018 ifkakao 오랜만에 KAKAO에서 개발자 컨퍼런스를 개최했다. 바로 if kakao 등록부터 사람들로 바글바글 하다. KEYNOTE는 신정환 CTO와 김병학 AI장이 맡았다. 만약에 카카오가 한다면?? 이 주제가 메인인 것 같다. 카카오가 한다면 세상을 이렇게 바꿀 수 있다. 이런 의미인가? 대부분 AI 관련된 이야기가 주를 이뤘다. 1. KAKAOi가 작년에 출시되었고 이어서 카카오 미니가 출시되었다.2. 카카오 미니는 처음 발화 인식 실패율이 12%나 됐었는데 훈련을 통해 5.9%까지 낮췄다.3. 카카오 오픈 빌더가 오픈했다. 처음에는 15개의 도메인으로 시작했지만 지금은 40개의 도메인을 갖추었다. 또한 오픈빌더를 통해 개발 시 카카오톡과 함께 카카오미니도 연동할 수 있다.4. KAKAOi의 직접적인 성장도 .. 2018. 9. 5.
hadoop guava 버전 충돌 maven guava 버전을 20.0으로 올리고 map reduce 작업을 돌리는데 자꾸 이전 버전을 타는 문제가 발생했다. 문제는 정확히 아래와 같다. 목표는 입력 url에서 top Domain을 뽑아내기 위함임.top Domain을 뽑기 위해서 guava의 아래의 함수를 사용함. InternetDomainName.from(host_url).topPrivateDomain().toString(); 하지만 위의 함수를 map reduce를 통해 돌릴 경우 InternetDomainName{name="domain"} 이런 식으로 객체가 리턴이 됨. 아무래도 hadoop의 lib와 dependency lib가 서로 충돌이 일어나서 dependency lib를 못 타는 것 같았다. 이를 해결 하기 위해 mave.. 2018. 5. 28.
spaCy 사용하기 - Training Models spaCy의 훈련 로직은 대충 아래의 그림과 같다. training data는 text와 label로 구성이 되어져 있고, Model에서는 해당 text에 대해 label을 예측한다. 정답과 비교해서 차이만큼 gradient를 적용하고 이런식으로 반복함으로써 모델을 update하는 구조이다. spaCy에서는 GoldParse라는 class를 지원하는데 이걸 이용해서 모델을 학습할 수도 있다. entity 학습의 경우 BILUO scheme를 따른다. 또한 학습 성능을 향상시키기 위해 dropout을 적용할 수도 있다. 아래는 간단하게 모델을 업데이트 하는 코드를 설명하고 있다. english 타입의 빈 모델을 만들고, training data를 적당히 섞어 준 다음에 data를 1개씩 가져와서 모델을 업.. 2018. 4. 24.
spaCy 사용하기 - Vectors & Similarity spaCy에서는 vector similarity 기능도 제공을 해 주고 있다. 또한 아래와 같이 vector를 가지고 있는지, norm 값(여기선 L2 norm), out of vocabulary 인지 등도 확인해 볼 수 있다. 문서간의 유사도도 확인해 볼 수가 있다. 홈페이지에서는 주변 단어와의 연결 관계 등을 고려해서 철자가 틀려도 비슷한 유사도를 나타낸다고 쓰여져 있는데, 결과 값이 별로 좋지 못한 관계로 이 부분은 그냥 스킵.. 자신이 직접 단어 벡터를 추가할 수도 있다. (이게 의미가 있나...) glove vector를 추가할 수도 있다. 그 밖의 fastText vector와 같은 다른 벡터들도 추가할 수가 있다. 핵심은 ' '으로 구분하고 첫번째 요소는 단어 2번째는 vector 값의 형태.. 2018. 4. 23.
spaCy 사용하기 - multi-processing 과 serialization spaCy는 아래와 같이 nlp.pipe를 이용해서 병렬 처리가 가능하다. for doc in nlp.pipe(texts, batch_size=10000, n_threads=3):pass 아래의 코드는 Joblib와 spaCy를 이용해서 multi process를 구현한 코드이다. 자세히는 잘 모르겠다. -_- 또한 spaCy에서는 model을 저장 혹은 불러올 수가 있다. # 모델 저장 text = open('customer_feedback_627.txt', 'r').read()doc = nlp(text)doc.to_disk('/customer_feedback_627.bin') # 모델 load from spacy.tokens import Docfrom spacy.vocab import Vocab do.. 2018. 4. 22.
spaCy 사용하기 -Processing Pipelines 우리가 spaCy를 사용하기 위해 nlp 객체에 text 파라미터를 입력하면 결과적으로 아래와 같은 pipeline이 실행 된다. 아래와 같이 model을 호출하면, spaCy에서는 처음에 model의 meta.json을 읽는다. meta.json에는 model name과 language, description pipeline이 json 포멧으로 나타나 있다. nlp = spacy.load('en') {"name": "model_name","lang": "en","description": "model description", "pipeline": ["tagger", "parser"]} spaCy에서는 model.json에 나타난 pipeline을 읽고 해당 pipeline을 처리한 후 결과 Doc 객체를.. 2018. 4. 21.
spaCy 사용하기 - Rule based Matching spaCy에서는 자신이 직접 pattern을 등록시킬 수가 있다. 아래의 조건을 가지는 문자열 패턴을 찾는다고 가정해보자. 1. 소문자가 hello와 매칭되는 경우 2. 쉼표나 콜론 등의 구분자가 존재하는 경우 3. 소문자가 world와 매칭되는 경우 아래는 위의 조건을 코드로 나타낸 것이다. 아래와 같이 두 개 이상의 패턴을 등록할 수도 있다. wildcard token pattern도 등록할 수가 있다. 가령 User name: {username} 이런 형태의 패턴을 등록하고 싶을 경우 아래와 같이 username 항목에 빈 중괄호를 넣어 주게 되면 wildcard 처럼 동작하게 된다. ['ORTH': 'User'}, {'ORTH': 'name'}, {'ORTH': ':'}, {}] 대규모의 용어를 .. 2018. 4. 20.