https://www.facebook.com/groups/TensorFlowKR/permalink/650448208629574/


안녕하세요!
지난 달부터 개발하기 시작했던 한국어 오픈소스 자연어처리 라이브러리 프로젝트 Koshort(코숏, 한국 길고양이를 부르는 애칭일지도..)을 소개합니다! Koshort은 현재 총 3가지 파이썬 패키지로 이루어져있으며, 다음과 같은 특징을 공통으로 가집니다.

- Windows, Linux, Mac에서 모두 사용이 가능하도록 노력합니다. (호환성 문제에 관해서는 github issue나 pull request로 알려주세요!)
- 손쉬운 설치 (코드 1줄 내지 2줄)
- Python3를 권장합니다. (pyeunjeon, goorm은 python2에서도 잘 동작합니다!)
- 쉽고 배우기 쉬운 고수준(High-level) API를 제공합니다.

프로젝트 홈페이지:
https://koshort.github.io/

#Koshort (코숏): 파이썬 한국어 온라인 트렌드 스트리밍(현재 네이버 검색어, 트위터 실시간 트윗 지원, 디시인사이드 검토중!)
https://github.com/koshort/koshort

#Pyeunjeon (파이은전): 은전한닢 프로젝트와 mecab 기반의 한국어 형태소 분석기의 독립형 python 인터페이스
https://github.com/koshort/pyeunjeon

#Goorm (구름): 한국어 워드 클라우드를 위한 wordcloud 패키지 wrapper
https://github.com/koshort/goorm

현재 부족한 점이 많습니다. 깃허브 이슈나 pull-request를 통한 많은 참여 부탁드립니다 🙂

개발자 깃허브: https://github.com/nyanye

...
Posted by 홍반장水 홍반장水

구글 어시스턴트, 한국어도 “오케이, 구글”


http://www.bloter.net/archives/290622


구글은 9월21일 인공지능(AI) 기반의 음성비서 기술인 구글 어시스턴트의 한국어 서비스를 출시했다.

구글 어시스턴트는 머신러닝을 기반으로 한 자연어 처리, 음성인식, 번역 등과 같은 기술을 바탕으로 사용자의 질문에 대답하고 정보를 찾는 등 맞춤형 서비스를 제공한다. AI 스피커 등에서 쓰이다가 스마트폰에는 올해 3월 처음으로 탑재됐다.

구글 어시스턴트의 한국어 서비스는 LG전자가 최근 출시한 ‘V30’에서 우선 만나볼 수 있다. 몇 주 내로 안드로이드 6.0 이상(마시멜로, 누가, 오레오)을 사용하는 LG폰 외 여타 안드로이드 스마트폰에서도 구글 어시스턴트를 이용할 수 있다. 


구글 어시스턴트를 부르는 방법

구글 어시스턴트 한국어 서비스를 지원하는 스마트폰 기기에서 권한 설정 및 사용자 음성 인식 훈련을 통해 사용 설정을 한다. 이후 홈 버튼을 길게 누르거나 ‘오케이 구글’이라고 부르면 활성화된다.

  1. 일정 관리

구글 어시스턴트는 캘린더, 지메일, 검색, 사진, 지도 등 구글의 다양한 앱과 연결된다. “오늘 내 스케줄 알려줘”라고 말하면 날씨를 알려주고 출근 시간이 얼마나 걸릴지, 첫 미팅이 몇 시에 시작하는지 등 하루 일과에 필요한 정보를 요약해 알려준다.

  • 오늘 내 스케줄 알려 줘
  • 나의 하루는 어때?
  • 내일 아침 7시에 알람 맞춰줘
  • 계란찜 타이머 설정해줘
  1. 실시간 답변

날씨, 좋아하는 스포츠 팀의 경기 결과, 현재 주가에 대한 최근 소식 등 구글 어시스턴트는 인물, 장소 및 사물에 대한 유용한 정보를 제공한다.

  • 내일 서울 날씨 어때?
  • 구글 주가는 얼마야?
  • 265 곱하기 72는?
  1. 여행 어시스턴트 사용

해외 여행할 때 구글 지도와 구글 번역은 필수다. 이제 구글 어시스턴트가 한국어를 지원하니 다음 여행에서는 구글 어시스턴트를 불러 도움을 받아보자. 빠른 번역, 호텔에서 해변으로의 가장 빠른 경로, 환율 등을 알려준다. 또한 현지 식당, 카페, 노래방 등까지 추천해준다. 근처의 장소를 구글 어시스턴트에게 물으면 구글이 알아서 몇 가지 선택지를 제공한다.

  • 1달러는 얼마야?
  • ‘얼마에요’를 스페인어로 번역해 줘
  • 강남역 근처 일식집 알려 줘
  1. 사진 감상 및 비디오 시청

구글 어시스턴트에게 “사진 찍어줘” 혹은 “셀카 찍어줘”라고 말하면 카메라 앱이 실행된다. 찍으려고 굳이 홈 버튼을 누를 시간에 카메라 앱을 켜는 게 빠를 수도 있다. 하지만 사진을 보는 건 확실히 편리하다. 구글 어시스턴트에 “최근에 찍은 내 사진 보여줘”라고 말하면 구글 포토에서 사진을 찾아와서 대화에 불러올 수 있다. 동영상에도 적용되는 기능이다. 좋아하는 뮤직비디오를 보고 싶을 때에도 “유튜브에서 음악 재생해줘”라고 말하면 구글 어시스턴트가 유튜브 앱을 실행한다.

  • 셀카 찍어줘
  • 최근에 찍은 내 사진 보여줘
  • 유튜브에서 음악 재생해줘
  1. 친구 및 가족과 연락하기

전화, 문자, 이메일 전송도 쉽게 할 수 있다. 아이폰의 ‘시리’, 삼성의 ‘빅스비’가 하는 기능과 비슷하다. 손으로 굳이 타이핑을 치지 않아도 될 일은 구글 어시스턴트에게 맡기자.

  • 엄마한테 “5분 뒤에 도착”이라고 문자 보내줘
  • 아빠한테 전화 해줘
  • 이메일 보내줘
  1. 휴대전화 최적화

매번 와이파이, 블루투스를 키고 끄기 위해 스마트폰을 열고 설정을 누르는 게 귀찮았다면 이제 그것도 구글 어시스턴트에게 시키자. 기본적인 설정 조작을 구글 어시스턴트에게 시킬 수 있다. 손전등도 구글 어시스턴트가 켜준다. 또한 비행기 이륙 직전 구글 어시스턴트에게 비행기 모드 활성화를 요청할 수도 있다.

  • 비행기 모드 켜 줘
  • 블루투스 활성화 해 줘
  • 와이파이 켜줘
  1. 재미있는 기능

구글 어시스턴트를 사용해 게임을 즐길 수 있다. 동전을 던져서 누가 다음 차례인지 정하거나, 심심할 때 재미있는 사실을 알아볼 수 있다.

  • 나 심심해
  • 비트박스 해줘
  • 노래 불러 봐
  • 재밌는 얘기 해줘
  • 동전 던지기
  • 사자는 어떻게 울어?

이외에도 구글 어시스턴트는 다양한 기능을 제공한다. 장규혁 구글 테크니컬 프로그램 매니저는 “점점 더 많은 사람들이 구글에서 필요한 정보를 찾을 뿐만 아니라 일상생활에서 도움을 받기를 원한다”면서 “앞으로 더 다양한 기기에 구글 어시스턴트 한국어 서비스를 확대할 수 있기를 희망한다”고 말했다.  

한편 이번 업데이트를 통해 구글 어시스턴트는 ▲한국어 ▲영어 ▲프랑스어 ▲독일어 ▲스페인어 ▲브라질-포르투갈어 ▲힌디어 ▲인도네시아어 ▲일본어 등 총 9개의 언어를 지원하게 됐다.

구글 어시스턴트 한국어 서비스는 1.5GB 이상 RAM과 720P 이상 해상도를 지원하는 안드로이드 6.0 이상 버전 스마트폰에 자동으로 적용될 예정이다. 안드로이드 6.0 이전 버전이라면 구글 어시스턴트는 아쉽게도 사용할 수 없다. 사용자는 별도의 업데이트 없이 구글 어시스턴트를 사용할 수 있다.





...

Posted by 홍반장水 홍반장水

인공지능 씨앗 한글 말뭉치, 2007년 멈춰선 까닭


http://www.bloter.net/archives/260569


자연어 처리는 인공지능 기술에서 중요한 축을 담당한다. 인간의 말을 인식해 메시지를 분석하고 다시 답변을 내놓으려면 자연어를 처리할 수 있는 향상된 기술이 필요하다. 현재 많은 연구들이 인간의 눈을 대체하는 ‘비전 인식’에 몰두하고 있다. 이미지나 영상을 기계가 인식해 사물을 분별하고 나누고 예측하는 다양한 기술들이 선보이고 있다.


인간의 입과 귀를 보완하거나 대신하기 위한 연구도 한창이긴 하다. 애플이 시리나 썸리와 같은 기사 요약 서비스 등이 여기에 해당한다. 번역에서도 자연어 처리는 필수적이다. 하지만 비전 인식에 비해 더딜 수밖에 없다. 문자 언어가 깊숙이 관여돼있기 때문이다.


* 민간이 개발하기엔 너무나도 큰 비용


정부는 한글 말뭉치의 이 같은 성격 때문에 상당한 비용을 들여 프로젝트를 추진했다. 대표적인 사업이 21세기 세종 프로젝트다. 국립국어원은 1998년부터 2007년까지 150억원의 예산을 투입해 이 프로젝트를 완료했다. 여기엔 세종 말뭉치라는 한글 말뭉치 사업이 포함돼있었다. 그것도 무려 2억 어절에 해당하는 방대한 구축 작업이었다. 이는 영국이나 미국, 일본에 뒤지지 않는 규모로 평가됐다.


그렇게 탄생한 세종 말뭉치는 자연어 처리 분야에서 다양하게 활용되고 있다. 대표적으로는 서울대에서 개발한 꼬꼬마 세종 말뭉치 활용 시스템이다. 세종 말뭉치를 데이터베이스에 저장해 웹 프로그램 형태로 구현한 사례다. 말뭉치 통계 정보 조회, 말뭉치 검색, 한국어 쓰기 학습의 세 가지의 기능을 갖추고 있다.


일본어 형태소 분석기 엔진에 세종 말뭉치를 학습해 한국형 형태소 분석기로 탄생한 사례도 있다. 은전한닢 프로젝트에 따라 개발된 ‘mecab-ko’ 형태소 분석기다. ‘mecab-ko‘는 세종 말뭉치에서 2만여 문장을 가져와 분석 엔진을 학습시켰다.


자연어 처리에 광범위하게 활용되던 세종 말뭉치는 2007년 기점으로 업데이트가 사실상 중단됐다. 

더 이상 제2의 21세기 세종 프로젝트가 진행되지 않고 있는 탓이다. 


10년이 지나는 동안 수많은 인터넷 신조어가 탄생하고 있고 광범위하게 일상에 활용되고 있지만 세종 말뭉치에는 반영이 되지 않는다. 비교적 변화가 적은 언어 유형은 상관이 없지만 구어와 같은 메신저 용어 등은 세종 말뭉치에서 품사 구별조차 하지 못하는 실정이다.


세종 말뭉치 사업을 주도하고 관리하고 있는 국립국어원도 아쉬워하기는 마찬가지다. 최정도 국립국어원 학예사는 “국립국어원에서 말뭉치를 만들어서 배포하고 싶지만 지속적으로 지원이 안되는 측면이 있다”고 했다. 그는 “예산을 따서 하고 싶지만 어려운 측면이 있다”고도 했다. 그는 “최신 것들이 코퍼스에 들어와야 하고 구성면에서도 IT와 관련해서 등장하는 단어들을 찾고 싶다면 구성도 잘해야 한다”라며 “하지만 현실적으로 여의치가 않다”고 말했다.


정부가 ’한국형 알파고‘니 하며 인공지능 사업에 1조원의 예산을 투입할 기세지만 한글 말뭉치 사업과 같은 구체적인 항목은 아직 포함되지 않은 상태다.


한국 말뭉치 업그레이드가 단절되면 자연어처리 기술로 인공지능 시장에 진입하고자 하는 스타트업이 부담이 된다. 당장 IT 대기업과 이 분야에서 간극을 좁히기가 어렵다. 네이버와 같은 IT 대기업들은 이미 십수년 간 수집한 뉴스 문서, 기타 블로그와 전문 자료들을 광범위하게 확보해 정교한 말뭉치를 자체적으로 구축해왔다. 오랜 공을 들여 구축한 말뭉치이기에 공개하기도 어렵다. 반면 스타트업이 이에 준하는 수준으로 말뭉치를 구축하기는 비용 문제로 사실상 불가능하다. 말뭉치라는 디지털 커먼스가 공공에서 제공돼야 할 이유이기도 하다.


학계는 웹 서비스화 돼 있는 전문 말뭉치를 사용하면 된다. 고려대 민족문화연구원이 구축한 ’물결 21‘은 대학연구소가 개발한 최대 규모의 디지털 말뭉치다. 국내 4대 일간지의 14년치(2001년~2014년) 6억 어절의 문서가 분석돼있다. 이 서비스를 이용하면 언어 연구에 필요한 결과를 다양한 형태로 받아갈 수 있다(최재웅&이도길. 2014).


그러나 이 말뭉치는 한계도 있다. 외부 형태소 분석기과 결합해 사용하기 어렵다는 점이다. 세종 말뭉치와 달리 소스 파일이 공개돼있지 않아서다. 일반적으로 기분석 사전과 형태소 분석기를 통합하면 높은 정확도와 효율성을 만들어낼 수 있다. 곽수정(2013) 등은 “기분석 사전은 대용량의 품사 부착 말뭉치의 고빈도 어절로 구축되어 형태소 분석기의 속도를 향상시키기 위해 사용돼왔다”고 적고 있다. 기분석 사전을 구축하려면 기존 말뭉치가 필요한데, 소스 파일이 공개되지 않아 두 시스템을 결합하기 어려운 것이다.


연세대 말뭉치, 카이스트 코퍼스 등 공개된 말뭉치가 없지는 않지만 규모로 따지면 세종 말뭉치나 물결21에 비할 바는 못된다. 말뭉치는 공공이 개입해 커먼스로 구축하기에 적합한 모델이라고 할 수 있다.


* 디지털 커먼스로서 한글 말뭉치와 공공의 역할


언어는 끊임없이 변화한다. 신조어 탄생하는가 하면 일부 어휘는 사멸하기도 한다. 예전 단어에 새로운 의미가 부여되는가 하면 단어와 단어의 새로운 결합이 나타나 전혀 다른 용례로 쓰이기도 한다. 말뭉치는 이처럼 역동적인 언어의 변동에 대응할 수 있어야 한다. 자연어 처리를 기반으로 하는 인공지능 기술은 역동성에 대응하는 말뭉치의 힘에 의존할 수밖에 없다.


문제는 막대한 비용이 투입되는 말뭉치를 누가 구축할 것이냐이다. 말뭉치 구축은 따지면 기초연구에 해당한다. 비용은 많이 들지만 곧장 수익이 나지 않는 사업이다. 그것의 공적 가치는 무한하지만 그 자체의 상업적 가치는 제한적일 수밖에 없다. 2007년 이후로 멈춰버린 세종 한글 말뭉치, 인공지능 기술이 부상하는 현재 국면에서 여전히 외면받고 있는 현실이 안타까울 수밖에 없다.


...

Posted by 홍반장水 홍반장水

노가다 없는 텍스트 분석을 위한 한국어 NLP - pycon kr 2017



파이콘 2017 에서 발표할 한국어 자연어처리 문서입니다. 확률 모델이 아닌, 분석하려는 데이터 기반으로 단어 추출 / 명사 추출 / 토크나이징 / 사용자 사전 + KoNLPy 응용의 내용이 담겨 있습니다.


Soy Korean Natural Language Processing Toolkits 

customized KoNLPy - KoNLPy + 사용자사전


 

...


Posted by 홍반장水 홍반장水

twitter-korean-text - 트위터에서 만든 오픈소스 한국어 처리기


https://github.com/twitter/twitter-korean-text



트위터에서 만든 오픈소스 한국어 처리기

Scala/Java library to process Korean text with a Java wrapper. twitter-korean-text currently provides Korean normalization and tokenization. Please join our community at Google Forum. The intent of this text processor is not limited to short tweet texts.

스칼라로 쓰여진 한국어 처리기입니다. 현재 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있습니다. 짧은 트윗은 물론이고 긴 글도 처리할 수 있습니다. 개발에 참여하시고 싶은 분은 Google Forum에 가입해 주세요. 사용법을 알고자 하시는 초보부터 코드에 참여하고 싶으신 분들까지 모두 환영합니다.

twitter-korean-text의 목표는 빅데이터 등에서 간단한 한국어 처리를 통해 색인어를 추출하는 데에 있습니다. 완전한 수준의 형태소 분석을 지향하지는 않습니다.

twitter-korean-text는 normalization, tokenization, stemming, phrase extraction 이렇게 네가지 기능을 지원합니다.

정규화 normalization (입니닼ㅋㅋ -> 입니다 ㅋㅋ, 샤릉해 -> 사랑해)

  • 한국어를 처리하는 예시입니닼ㅋㅋㅋㅋㅋ -> 한국어를 처리하는 예시입니다 ㅋㅋ

토큰화 tokenization

  • 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어Noun, 를Josa, 처리Noun, 하는Verb, 예시Noun, 입Adjective, 니다Eomi ㅋㅋKoreanParticle

어근화 stemming (입니다 -> 이다)

  • 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어Noun, 를Josa, 처리Noun, 하다Verb, 예시Noun, 이다Adjective, ㅋㅋKoreanParticle

어구 추출 phrase extraction

  • 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어, 처리, 예시, 처리하는 예시

Introductory Presentation: Google Slides

Try it here

Gunja Agrawal kindly created a test API webpage for this project: http://gunjaagrawal.com/langhack/

Gunja Agrawal님이 만들어주신 테스트 웹 페이지 입니다. http://gunjaagrawal.com/langhack/

Opensourced here: twitter-korean-tokenizer-api

API

scaladoc

mavendoc

Maven

To include this in your Maven-based JVM project, add the following lines to your pom.xml:

Maven을 이용할 경우 pom.xml에 다음의 내용을 추가하시면 됩니다:

  <dependency>
    <groupId>com.twitter.penguin</groupId>
    <artifactId>korean-text</artifactId>
    <version>4.4</version>
  </dependency>

The maven site is available here http://twitter.github.io/twitter-korean-text/ and scaladocs are here http://twitter.github.io/twitter-korean-text/scaladocs/

Support for other languages.

.net

modamoda kindly offered a .net wrapper: https://github.com/modamoda/TwitterKoreanProcessorCS

node.js

Ch0p kindly offered a node.js wrapper: twtkrjs

Youngrok Kim kindly offered a node.js wrapper: node-twitter-korean-text

Python

Baeg-il Kim kindly offered a Python version: https://github.com/cedar101/twitter-korean-py

Jaepil Jeong kindly offered a Python wrapper: https://github.com/jaepil/twkorean

  • Python Korean NLP project KoNLPy now includes twitter-korean-text. 파이썬에서 쉬운 활용이 가능한 KoNLPy 패키지에 twkorean이 포함되었습니다.

Ruby

jun85664396 kindly offered a Ruby wrapper: twitter-korean-text-ruby

  • This provides access to com.twitter.penguin.korean.TwitterKoreanProcessorJava (Java wrapper).

Jaehyun Shin kindly offered a Ruby wrapper: twitter-korean-text-ruby

  • This provides access to com.twitter.penguin.korean.TwitterKoreanProcessor (Original Scala Class).

Elastic Search

socurites's Korean analyzer for elasticsearch based on twitter-korean-text: tkt-elasticsearch

Get the source 소스를 원하시는 경우

Clone the git repo and build using maven.

Git 전체를 클론하고 Maven을 이용하여 빌드합니다.

git clone https://github.com/twitter/twitter-korean-text.git
cd twitter-korean-text
mvn compile

Open 'pom.xml' from your favorite IDE.

Usage 사용 방법

You can find these examples in examples folder.

examples 폴더에 사용 방법 예제 파일이 있습니다.

from Scala

import com.twitter.penguin.korean.TwitterKoreanProcessor
import com.twitter.penguin.korean.phrase_extractor.KoreanPhraseExtractor.KoreanPhrase
import com.twitter.penguin.korean.tokenizer.KoreanTokenizer.KoreanToken

object ScalaTwitterKoreanTextExample {
  def main(args: Array[String]) {
    val text = "한국어를 처리하는 예시입니닼ㅋㅋㅋㅋㅋ #한국어"

    // Normalize
    val normalized: CharSequence = TwitterKoreanProcessor.normalize(text)
    println(normalized)
    // 한국어를 처리하는 예시입니다ㅋㅋ #한국어

    // Tokenize
    val tokens: Seq[KoreanToken] = TwitterKoreanProcessor.tokenize(normalized)
    println(tokens)
    // List(한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하는(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 입니(Adjective: 12, 2), 다(Eomi: 14, 1), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4))

    // Stemming
    val stemmed: Seq[KoreanToken] = TwitterKoreanProcessor.stem(tokens)

    println(stemmed)
    // List(한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하다(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 이다(Adjective: 12, 3), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4))

    // Phrase extraction
    val phrases: Seq[KoreanPhrase] = TwitterKoreanProcessor.extractPhrases(tokens, filterSpam = true, enableHashtags = true)
    println(phrases)
    // List(한국어(Noun: 0, 3), 처리(Noun: 5, 2), 처리하는 예시(Noun: 5, 7), 예시(Noun: 10, 2), #한국어(Hashtag: 18, 4))
  }
}

from Java

import java.util.List;

import scala.collection.Seq;

import com.twitter.penguin.korean.TwitterKoreanProcessor;
import com.twitter.penguin.korean.TwitterKoreanProcessorJava;
import com.twitter.penguin.korean.phrase_extractor.KoreanPhraseExtractor;
import com.twitter.penguin.korean.tokenizer.KoreanTokenizer;

public class JavaTwitterKoreanTextExample {
  public static void main(String[] args) {
    String text = "한국어를 처리하는 예시입니닼ㅋㅋㅋㅋㅋ #한국어";

    // Normalize
    CharSequence normalized = TwitterKoreanProcessorJava.normalize(text);
    System.out.println(normalized);
    // 한국어를 처리하는 예시입니다ㅋㅋ #한국어


    // Tokenize
    Seq<KoreanTokenizer.KoreanToken> tokens = TwitterKoreanProcessorJava.tokenize(normalized);
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaStringList(tokens));
    // [한국어, 를, 처리, 하는, 예시, 입니, 다, ㅋㅋ, #한국어]
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaKoreanTokenList(tokens));
    // [한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하는(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 입니(Adjective: 12, 2), 다(Eomi: 14, 1), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4)]


    // Stemming
    Seq<KoreanTokenizer.KoreanToken> stemmed = TwitterKoreanProcessorJava.stem(tokens);
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaStringList(stemmed));
    // [한국어, 를, 처리, 하다, 예시, 이다, ㅋㅋ, #한국어]
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaKoreanTokenList(stemmed));
    // [한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하다(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 이다(Adjective: 12, 3), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4)]


    // Phrase extraction
    List<KoreanPhraseExtractor.KoreanPhrase> phrases = TwitterKoreanProcessorJava.extractPhrases(tokens, true, true);
    System.out.println(phrases);
    // [한국어(Noun: 0, 3), 처리(Noun: 5, 2), 처리하는 예시(Noun: 5, 7), 예시(Noun: 10, 2), #한국어(Hashtag: 18, 4)]

  }
}

Basics

TwitterKoreanProcessor.scala is the central object that provides the interface for all the features.

TwitterKoreanProcessor.scala에 지원하는 모든 기능을 모아 두었습니다.

Running Tests

mvn test will run our unit tests

모든 유닛 테스트를 실행하려면 mvn test를 이용해 주세요.

Tools

We provide tools for quality assurance and test resources. They can be found under src/main/scala/com/twitter/penguin/korean/qa and src/main/scala/com/twitter/penguin/korean/tools.

Contribution

Refer to the general contribution guide. We will add this project-specific contribution guide later.

설치 및 수정하는 방법 상세 안내

Performance 처리 속도

Tested on Intel i7 2.3 Ghz

Initial loading time (초기 로딩 시간): 2~4 sec

Average time per parsing a chunk (평균 어절 처리 시간): 0.12 ms

Tweets (Avg length ~50 chars)

Tweets100K200K300K400K500K600K700K800K900K1M
Time in Seconds57.59112.09165.05218.11270.54328.52381.09439.71492.94542.12
Average per tweet: 0.54212 ms

Benchmark test by KoNLPy

Benchmark test

From http://konlpy.org/ko/v0.4.2/morph/

Author(s)


Posted by 홍반장水 홍반장水


It's Easy (On Mac):

  1. Install easy_install  curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python
  2. Install pip  sudo easy_install pip
  3. Install regex module  pip install regex



한국어처럼 Unicode가 사용된 경우에는 위 방법을 이용할 수 없다. 대신 한국어 어절을 분리하고 싶을 때는 regex를 쓰면 편하다.2

>>> import regex
>>> regex.findall(ur'\p{Hangul}+', u'다람쥐 헌 쳇바퀴에 타고파.')
[u'\ub2e4\ub78c\uc950', u'\ud5cc', u'\uccc7\ubc14\ud034\uc5d0', u'\ud0c0\uace0\ud30c']

한국어, 영어, 한자어 등 여러 언어가 혼재된 경우에는 아래와 같이 어절을 분리할 수 있다.

>>> import regex
>>> regex.findall(ur'[\p{Hangul}|\p{Latin}|\p{Han}]+', u'동틀녘 sunlight이 作品!')
>>> [u'\ub3d9\ud2c0\ub158', u'sunlight\uc774', u'\u4f5c\u54c1']


Posted by 홍반장水 홍반장水

파이썬으로 영어와 한국어 텍스트 다루기

https://www.lucypark.kr/courses/2015-dm/text-mining.html




문서 전처리


https://datascienceschool.net/view-notebook/3e7aadbf88ed4f0d87a76f9ddc925d69/



모든 데이터 분석 모형은 숫자로 구성된 고정 차원 벡터를 독립 변수로 하고 있으므로 문서(document)를 분석을 하는 경우에도 숫자로 구성된 특징 벡터(feature vector)를 문서로부터 추출하는 과정이 필요하다. 이러한 과정을 문서 전처리(document preprocessing)라고 한다.


BOW (Bag of Words) 


문서를 숫자 벡터로 변환하는 가장 기본적인 방법은 BOW (Bag of Words) 이다. BOW 방법에서는 전체 문서  {D1,D2,…,Dn}{D1,D2,…,Dn}  를 구성하는 고정된 단어장(vocabulary)  {W1,W2,…,Wm}{W1,W2,…,Wm}  를 만들고  DiDi 라는 개별 문서에 단어장에 해당하는 단어들이 포함되어 있는지를 표시하는 방법이다.


 만약 단어 Wj가 문서Di 안에 있으면 ,→xij=1

 만약 단어 Wj가 문서Di 안에 있으면 ,→xij=1

 

Scikit-Learn 의 문서 전처리 기능 


Scikit-Learn 의 feature_extraction.text 서브 패키지는 다음과 같은 문서 전처리용 클래스를 제공한다.


CountVectorizer:

    문서 집합으로부터 단어의 수를 세어 카운트 행렬을 만든다.

TfidfVectorizer:

    문서 집합으로부터 단어의 수를 세고 TF-IDF 방식으로 단어의 가중치를 조정한 카운트 행렬을 만든다.

HashingVectorizer:

    hashing trick 을 사용하여 빠르게 카운트 행렬을 만든다.


from sklearn.feature_extraction.text import CountVectorizer

corpus = [

    'This is the first document.',

    'This is the second second document.',

    'And the third one.',

    'Is this the first document?',

    'The last document?',    

]

vect = CountVectorizer()

vect.fit(corpus)

vect.vocabulary_


Posted by 홍반장水 홍반장水

MS, 신경망 번역에 ‘한국어’ 추가…11개 언어 지원

마이크로소프트(MS)가 인공지능(AI) 기반으로 개발한 자사 신경망 기반 번역 서비스에 한국어를 추가했다. 최대 1만자까지 신경망 기술을 이용해 번역한다.


신경망 기반 번역은 단편적인 단어에 대한 직역이 아닌, 문장 전체의 맥락을 파악해 사람이 말하는 것처럼 자연스러운 번역이 특징이다. 구글과 네이버도 최근 신경망 기술을 이용한 번역 서비스인 ‘구글 번역’과 ‘파파고’를 선보였다. 구글 신경망 번역은 7가지 언어, 네이버 파파고는 한영 번역을 최대 200자 이내 번역한다.


MS는 지난해 11월 처음으로 신경망 기반 번역 서비스를 공개했다. 당시 영어, 독일어, 아랍어, 중국어, 일본어를 포함한 10가지 언어를 지원했다. 이번에 한국어가 추가하면서 총 11가지 언어를 번역한다.


신경망 번역 원리

신경망 번역 원리


MS 신경망 기반 번역은 인공지능과 머신러닝 알고리즘을 통해 언어를 학습한다. 총 두 단계에 걸쳐 번역한다. 먼저, 번역 대상이 되는 문장을 인공지능으로 분석해, 해당 문자에 사용된 언어가 어떤 문맥을 가졌는지 파악한다. 그다음 문장에 맞는 단어를 골라 뜻을 배치하고 번역한다. 단순히 해당 문장 안에 단어가 몇 개 들어가 있고, 각 단어의 뜻을 기계적으로 번역해서 보여주는 게 아니라 문장 전체 의미를 파악해서 이에 가장 잘 맞는 뜻을 가진 단어를 골라 번역한다.


예를 들어, ‘개가 매우 행복해 보인다. 그 개는 강아지 6마리를 낳았다’라는 문장을 프랑스인과 미국인이 MS 신경망 번역을 이용해 문장을 번역했다 치자. 미국인에게는 ‘The dog looks very happy. The dog bore 6 puppies’라고, 프랑스인에게는 ‘La chienne a l’air très heureux. La chienne portait 6 chiots’라고 보여준다.


프랑스어에서는 똑같은 단어라도 모든 명사에 남성형과 여성형으로 성이 나뉜다. 이 성별이 무엇이냐에 따라 뒤따라오는 동사 형태가 미묘하게 다르다. 여기서 신경망 분석이 빛을 발한다. 신경망 분석은 ‘그 개는 강아지 6마리를 낳았다’라는 문장의 의미를 해석해 ‘그 개 성별은 암컷이다’라고 추론했다. 불어로 ‘개’는 남성형 명사로 ‘le chine’으로 표현하지만, 이 문장에서는 암컷이라고 생각해 여성 형태의 ‘La chienne’를 쓴다. 흐름을 파악해서 자연스러운 번역을 제공한다.


이날 MS는 언어의 의도(Intent)와 실체(Entity)를 파악하는 자연어 처리 서비스 ‘루이스(LUIS, Language Understanding Intelligent Service)’도 이제 한국어를 지원한다고 밝혔다.


루이스는 챗봇과 앱, 그리고 다양한 서비스와 결합해 사용자의 의도를 파악하고, 이에 맞는 서비스를 제공한다. 예를 들어 ‘파리행 티켓을 예약해줘’라는 문장을 입력하면, 루이스와 결합한 서비스 플랫폼에서 파리행 티켓을 예약할 수 있는 웹사이트를 불러온다.


MS 측은 “이미 IT, 제조, 교통, 물류, 쇼핑, 미디어 등 다양한 분야의 국내 많은 기업이 마이크로소프트 루이스 기반의 AI 챗봇과 앱을 통해 서비스를 준비하고 있다”라며 “파트너와 함께 클라우드 기반의 AI 서비스를 활발히 개발 중으로, 이번 루이스의 한국어 지원을 통해 스마트 스피커, ARS 부가 서비스, 상품 예약 및 조회 등 다양한 한국어 애플리케이션들이 개발될 것으로 기대된다”라고 밝혔다.







.

Posted by 홍반장水 홍반장水