Top

자연어 텍스트 처리를 통한 검색 시스템 구축 [아파치 솔라, 루씬, OpenNLP 등 오픈소스 활용]

  • 원서명Taming Text: How to Find, Organize, and Manipulate It (ISBN 9781933988382)
  • 지은이그랜트 잉거솔(Grant Ingersoll), 토마스 모튼(Thomas Morton), 드류 패리스(Drew Farris)
  • 옮긴이임혜연
  • ISBN : 9788960776500
  • 40,000원
  • 2014년 12월 23일 펴냄
  • 페이퍼백 | 456쪽 | 188*235mm
  • 시리즈 : 데이터 과학

책 소개

요약

현대 웹 서비스에서 검색은 빼놓을 수 없는 기능이다. 사용자는 검색에 익숙하고, 검색 결과의 앞부분에서 곧바로 자신이 원하는 링크를 찾길 바란다. 사용자의 기준을 만족시키기는 어렵지만, 다행히 잘 만들어진 오픈 소스가 이미 존재한다. 이 책은 검색과 자연어 처리에 대한 기초적인 지식을 소개하고, 아파치 솔라, OpenNLP 등의 오픈 소스를 이용해서 실제로 기능을 사용하는 법을 알려준다. 이 책은 검색이나 자연어 처리를 서비스의 기능으로 제공해야 하는 개발자에게 좋은 길잡이가 되어줄 것이다.
한국어판에서는 솔라 7.5버전에서 달라진 점과 머하웃을 대체해서 사용할 수 있는 방법을 안내한다.

이 책에서 다루는 내용

삶에는 정보가 너무나 많고, 우리는 거기에 압도당해 있다. 다행히도 영리한 개발자에게 많이 필요한 구명줄을 던져줄 수 있는 구조화되지 않은 텍스트를 관리하기 위한 실용적인 도구와 기법들이 있다. 이 책에서 그 도구와 방법들을 찾아볼 수 있다. 이 책은 실제 애플리케이션에서 텍스트를 다루는 방법에 대한 실용적인 예제 중심의 안내서다. 전문(full-text) 검색, 고유명사 인식, 클러스터링, 태그 부착, 정보 추출, 요약 같은 유용한 기법을 소개한다. 독자는 실제 사용 사례의 기반 지식을 체계적으로 받아들이면서 다양한 사례를 탐구할 수 있다.

■ 텍스트 길들이기 기법
■ 솔라나 머하웃 등의 라이브러리
■ 텍스트 처리 애플리케이션을 구축하는 방법

이 책은 특수 용어를 피하고, 주제를 분명하고 간결하게 보여줘서 통계나 자연 언어 처리에 대한 배경 지식 없이도 이해할 수 있다. 예제는 자바로 돼 있지만, 개념은 어떤 언어에도 적용할 수 있다.

이 책에 쏟아진 찬사

“굉장히 복잡한 프로세스의 수수께끼 같은 면을 끄집어 냈다!
- 리즈 리디(Liz Liddy) / 시라큐즈 대학 정보학부 학과장

“텍스트 분석과 처리를 있는 그대로 보여준다. 분명하고, 실용적이며, 오픈소스를 사용해서 말이다!”
- 데이비드 바이스(David Weiss) / 캐럿 서치(Carrot Search) s.c.

“텍스트 문서에 갇혀 있는 정보를 어떻게 드러내고 활용하는지를 잘 보여준다.”
- 릭 바그너(Rick Wagner) / 레드 햇(Red Hat)

“텍스트 개념을 예제와 함께 익힘으로써, 텍스트 검색을 좀더 손쉬워진다.”
- 더그 워렌(Doug Warren) / 자바 웹 서비스(Java Web Services)

“텍스트 처리 도구와 기법에 대한 훌륭한 가이드”
- 줄리앙 니오슈(Julien Nioche) / 디지털페블(DigitalPebble, Ltd.)

추천의 글

고품질 텍스트 처리 능력에 대한 요구가 기하급수적으로 증가하는 이 시기에 어떤 식으로든 텍스트 정보에 의존하지 않는 분야나 산업을 생각하기는 어렵다. 급성장하는 웹 기반 경제는 극적으로 신속히 의존 정도를 늘렸다. 동시에 재능 있는 기술 전문가의 수요도 빠른 속도로 증가하고 있다. 이런 환경에 나온 훌륭하고 아주 실용적인 이 책은 실질적이고 현실적이며, 테스트된 지침과 설명을 제공해 준다.

몇 년간 나와 함께 일한 적이 있는 탁월하고 대단히 경험 많은 소프트웨어 엔지니어인 그랜트 잉거솔(Grant Ingersoll), 드류 패리스(Drew Farris)와 자연언어 처리 분야의 존경받는 기여자인 톰 모튼(Tom Morton)은 이 책에서 고도로 선별된 텍스트 처리자, 즉 자연언어 처리NLP 엔지니어 집단에 합류하는 데 관심이 있는 다른 기술 분야의 사람들을 안내하기 위한 현실적 과정을 제공한다.

내가 ‘세상을 위한, 세상 속에서의 학습’이라고 생각하는 것과 같은 방식으로 그랜트, 드류, 톰은 사실 아주 복잡한 프로세스에서 불가사의를 제거했다. 그들은 기존 도구, 구현된 예제, 잘 테스트된 코드에 집중해서 한 학기의 NLP 학습 과정을 수료하지 않고서도 이 책만으로도 가능하게 만들었다.

소프트웨어 엔지니어로서 독자가 예제와 코드 베이스, 여기서 참조한 오픈소스 도구를 자신의 것으로 익힐 수 있는 기초가 있다면, 예상한 것보다 더 빨리 진짜 전문가가 되고 실세계의 기회를 잡을 준비를 할 수 있을 것이다. - 리즈 리디(Liz Liddy) / 시라큐즈 대학 정보학부 학과장

이 책의 대상 독자

이 책이 당신을 위한 것일까? 어쩌면 그럴지도 모른다. 대상 독자는 검색, 자연언어 처리, 기계학습 배경 지식이 (거의) 없는 소프트웨어 현업 종사자다. 사실 이 책은 많은 회사에서 본 것과 같이 새 애플리케이션이나 기존 애플리케이션에 검색과 기타 기능을 추가하는 과제가 주어진 개발 팀이면서 극히 적은 개발자만 텍스트 작업에 대한 경험이 있거나 아예 없는 작업 환경에 있는 현업 종사자들을 목표로 한다. 그들에게는 불필요한 지식 때문에 꼼짝 못하는 일 없이 개념을 이해하는 데 도움이 될 만한 입문서가 필요하다.

많은 경우 위키피디아나 중대한 학술 논문처럼 쉽게 접근할 수 있는 자료에 대한 참고 문헌도 제공한다. 그렇게 해서 독자가 원한다면 더 상세한 내용을 탐구할 수 있는 도약대를 제공한다. 게다가 대다수 오픈소스 도구와 예제가 자바로 돼 있지만, 개념과 아이디어는 수많은 다른 프로그래밍 언어로도 옮길 수 있기 때문에 루비 사용자(Rubyist), 파이썬 사용자(Pythonista), 기타 언어 사용자들도 이 책을 편하게 느낄 수 있다.

이 책은 학생들이 교실과 더 학술 지향적인 책에서 배운 개념을 구현할 필요가 있을 때 도움이 될 것이지만, 이 시스템에 연관된 수학에 대한 설명이나 주제에 대한 학술적인 엄격함을 구하는 사람을 위한 책은 결코 아니다.

경험자들도 이 책 곳곳에서 책이 설명하는 오픈소스 패키지를 사용하는 데 대한 흥미로운 정보를 찾을 수도 있겠지만, 이 책은 다수의 텍스트 기반 애플리케이션을 구축한 적이 있는 경험 있는 현장 실무자를 대상으로 하지는 않는다. 그렇지만 한 명 이상의 경험 있는 실무자들은 이 책이 이 분야에 신참자인 팀 구성원들에게 텍스트 기반 애플리케이션을 작성하는 데 관련된 아이디어와 코드에 대해 속도를 높이게 해 주는 훌륭한 방식이라고 우리에게 말해줬다. 궁극적으로 이 책이 현대 프로그래머를 위한 최신 안내서이면서, 처음 텍스트 기반 애플리케이션 프로그래밍 경력을 시작했을 때 우리가 바라던 바로 그 안내서이기를 바란다.

이 책의 구성

1장, '텍스트 길들이기 시작'에서는 텍스트 처리가 중요한 이유와 이것이 무엇 때문에 도전적인지 설명한다. 텍스트를 길들이는 데 오픈소스 라이브러리를 활용하기 위한 준비를 하면서 사실 기반 질의응답QA 시스템을 간단히 소개한다.

2장, '텍스트 길들이기 기초'에서는 텍스트 처리의 구성 요소인 토큰화, 청크화, 구문 해석, 품사 태그 부착을 소개한다. 또한 아파치 티카(Apache Tika) 오픈소스 프로젝트를 사용해서 몇 가지 일반적인 파일 형식에서 텍스트를 추출하는 방법을 살펴본다.

3장, '검색'에서는 검색 이론과 벡터 공간 모델의 기본 지식을 탐구한다. 아파치 솔라 검색 서버를 소개하고, 솔라를 사용해서 콘텐츠를 인덱스로 만드는 방법을 보여준다. 수량과 품질이라는 검색 성능 요소를 어떻게 평가하는지 배운다.

4장, '유사 문자열 일치'에서는 접두사와 n그램을 사용한 유사 문자열 일치를 살펴본다. 두 개의 문자 중첩 척도, 자카드 척도와 자로 윙클러 거리를 자세히 알아보고, 솔라를 사용해서 일치 후보를 찾고 순위화하는 방법을 설명한다.

5장, '인명, 지명, 사물 식별'에서는 개체명 인식 너머의 기본 개념을 소개한다. 개체명을 찾기 위해 OpenNLP를 사용하는 방법을 보이고, 몇 가지 OpenNLP 성능 고려 사항을 설명한다.

6장, '텍스트 클러스터링'에서는 텍스트 클러스터링만을 다룬다. 여기서 일반적인 텍스트 클러스터링 알고리즘 너머의 기본 개념을 배우고, 텍스트 애플리케이션을 향상시키는 데 클러스터링이 어떤 도움을 줄 수 있는지에 대한 예제를 살펴본다. 또한 아파치 머하웃을 사용해 문서 컬렉션 전체를 클러스터링하는 방법과, Carrot2를 사용해 검색 결과를 클러스터링하는 방법도 설명한다.

7장, '분류, 카테고리 분류, 테깅'에서는 분류, 카테고리 분류, 태그 부착 너머의 기본 개념을 설명한다. 카테고리 분류가 텍스트 애플리케이션에서 어떻게 쓰이는지, 어떻게 오픈소스 도구를 사용해서 분류기를 구축하고, 훈련하고, 평가하는지 보여준다. 또한 문서 카테고리 분류기를 구축하기 위해 머하웃의 나이브 베이즈 알고리즘 구현체를 사용한다.

8장, '질의응답 시스템 예제 구축'에서는 QA 시스템 예제를 구축하기 위해 앞서 다른 장에서 배운 모든 것들을 모은다. 이 단순한 애플리케이션은 위키피디아를 지식 기반으로 사용하고, 솔라(Solr)을 기준 시스템으로 사용한다.

9장, '길들여지지 않는 텍스트: 다음 개척지 탐구'에서는 검색과 NLP 다음에 나올 주제와 의미론, 담론, 화용론의 역할을 탐구한다. 여러 언어에 걸친 검색과 콘텐츠에서의 감정 감지, 거기에 더해 최근 생겨난 도구, 애플리케이션, 아이디어를 다룬다.

저자/역자 소개

저자 서문

인생은 뜻하지 않은 순간으로 가득 차 있지만, 그중 지금 내 경력을 정의하는 것과 같은 몇 가지 순간은 나에게 더 두드러지게 나타난 것이다. 텍스트와이즈라는 뉴욕 시라큐즈에 있는 작은 회사의 개발자 구인 광고를 우연히 발견했을 때는 90년대 후반이었고, 그때 나는 분산 전자기학 시뮬레이션 일을 하는 젊은 소프트웨어 개발자였다. 구인 내용을 읽고, 스스로 직무 조건을 만족시킨다고는 거의 생각하지 못했지만, 어쨌든 해보기로 하고 이력서를 보냈다. 어떻게 됐든 그 자리를 얻었고, 검색과 자연언어 처리 분야의 경력을 시작했다. 그때는 이렇게 몇 년 후에 내가 그 주제에 대한 책을 쓰는 것은 물론 여전히 검색과 NLP 분야에 종사할 거라고는 생각지도 못했다.

당시 첫 과제는 사용자가 영어로 질의를 입력해서 프랑스어, 스페인어, 일본어로 된 문서를 찾고 자동으로 번역할 수 있게 해 주는 교차 언어 정보 검색(CLIR, Cross-Language Information Retrieval)시스템에 대한 일이었다. 돌이켜 보면 작업한 첫 시스템은 텍스트를 다루는 맛을 알게 하는 난해한 문제를 다 다루는 것이었다(검색, 분류, 정보 추출, 기계 번역, 문법 학습자를 미치게 만드는 그 모든 언어에 대한 독특한 규칙 등). 첫 프로젝트 후 나는 규칙 기반 분류기부터 질의응답QA 시스템에 이르는 여러 가지 검색과 NLP 시스템 일을 했다.

그 후 2004년, 자연언어 처리 센터(Center for Natural Language Processing)의 새 일 때문에 오픈소스 검색 라이브러리의 실질적 표준인(어쨌든 그때에는) 아파치 루씬(Apache Lucene)을 사용하게 됐다. 나는 또 한 번 CLIR 시스템을 작성하고 있었는데, 이때는 영어와 아랍어에 대한 일이었다. 이 과제를 수행하는 데 루씬 기능이 필요했기 때문에 기능과 버그 수정에 대한 패치를 내놓기 시작했다. 그러고 나서 나는 커미터가 됐다. 거기부터 수문이 열렸다. 오픈소스에 더 관여하게 됐는데, 아파치 머하웃(Apache Mahout) 기계학습 프로젝트를 이자벨 드로스트(Isabel Drost)와 칼 웨틴(Karl Wettin)과 함께 시작했고, 거기 더해 아파치 루씬과 솔라(Solr)를 사용한 검색과 텍스트 분석 중심으로 만든 회사 루시드 이미지네이션(Lucid Imgination)을 공동으로 창립했다.

원점으로 돌아와서 검색과 NLP는 문제를 해결하기 위해 데이터 구조와 알고리즘 모두에 대한 정교한 접근 방식이 필요한 컴퓨터 과학의 정의 영역에 속한다고 생각한다. 사용자가 만든 대량의 웹과 소셜 콘텐츠를 처리해야 하는 확장 요구 사항을 더하면 개발자의 꿈을 이루게 된다. 이 책은 텍스트 처리에 대한 어려운 문제를 해결하기 위해 이미 존재하며 검증된 오픈소스 라이브러리를 사용하는 데 초점을 맞춘 엔지니어를 위한, 그리고 엔지니어가 직접 저술한 책이 없는 현실로부터 출발했다. 이 책이 현재 직무에서 일상의 문제를 해결하는 데 도움이 되는 것은 물론이고, 학습에 대한 풍부한 기회로 텍스트의 세계를 보게 독자를 고무하기를 희망한다.
- 그랜트 잉거솔(Grant Ingersoll)

고등학교 2학년 때 인공지능에 매료됐고, 학부시절에 대학원에 진학해서 자연언어 처리에 집중하기로 했다. 펜실베이니아 대학에서 텍스트 처리, 기계학습, 일반적인 알고리즘과 데이터 구조에 대해 믿기 어려울 만큼 많이 배웠다. 자연언어 처리의 최고 지성 몇몇과 일하고 배울 기회도 있었다.

대학원 연구 과정에서 다수의 NLP 시스템 일을 했고 DARPA가 지원하는 동일 지시어, 요약, 질의응답에 대한 수많은 평가에 참여했다. 이 작업 과정에서 루씬과 더 큰 오픈소스 움직임에 익숙해졌다. 또한 효율적인 종단 간 처리를 제공할 수 있는 오픈소스 텍스트 처리 소프트웨어에 구멍이 있는 것도 알아챘다. 학위 논문을 기반으로 해서 OpenNLP 프로젝트에 광범위하게 기여했고, ETS(Educational Testing Services)에서 자동화된 에세이와 짧은 답변 채점에 대한 일을 하는 동안에도 NLP 시스템에 대해 계속 학습했다.

오픈소스 커뮤니티에서 일하는 동안 다른 사람들과 일하는 것에 대해 많이 배웠고, 그래서 훨씬 더 나은 소프트웨어 엔지니어가 됐다. 오늘날 이 책에서 설명한 도구와 기법 상당수를 사용하는 소프트웨어 엔지니어 팀들과 같이 컴캐스트(Comcast Corporation)에서 일한다. 이 책이 내가 대학원에서 가르침을 받은 여러 연구자들과 실제 사람을 위한 현실적인 문제를 해결하기 위해 텍스트 처리를 사용하려는 목적을 가진 모든 소프트웨어 엔지니어 사이의 간극을 메우는 데 도움이 되기를 바란다.
- 토마스 모튼(Thomas Morton)

90년대 중반에 엘리자베스 리디(Elizabeth Liddy) 박사, 백우진(Woojin Paik) 박사 및 텍스트와이즈의 여러 연구자들에게 그랜트(Grant)처럼 정보 검색과 자연언어 처리 분야를 소개받았다. 시라큐즈 대학의 정보학부에서 석사 과정을 마칠 때 그룹에서 일하기 시작했다. 그때 텍스트와이즈는 연구 그룹에서 텍스트 처리 연구 결과에 기반을 두고 애플리케이션을 개발하는 스타트업 비즈니스로 전환하고 있었다. 수년간 그 회사에서 꾸준히 배우고, 새로운 것을 발견했으며, 여러 가지 관점에 따라 기계가 언어를 이해하도록 가르치는 도전에 맞서기로 한 뛰어난 사람들과 같이 일했다.

개인적으로는 소프트웨어 개발자 관점에서 먼저 텍스트 분석 주제에 접근했다. 뛰어난 연구자와 함께 일하면서 그들의 아이디어를 실험에서 동작하는 프로토타입으로, 다시 거대하게 확장 가능한 시스템으로 변형하는 특권을 누렸다. 그 과정에서 최근 데이터 과학으로 알려진 것을 다량으로 할 기회를 얻었고, 거대한 데이터 집합과 거기서 학습하기 위한 도구와 기법을 탐구하고 이해하는 데서 깊은 기쁨을 발견했다.

내 경력에서 오픈소스 소프트웨어가 미친 영향은 아무리 강조해도 모자란다. 일반적으로 연구의 동반자로서 쉽게 사용할 수 있는 소스코드는 텍스트 분석과 소프트웨어 개발에 대해 새로운 기법과 방식을 배우기 위한 대단히 효율적인 방법이다. 자신의 지식과 경험을 협력하고 배우려는 열정을 지닌 타인과 나누기 위해 노력한 모두에게 경의를 표한다. 특히 오픈소스 소프트웨어의 개발과 그것을 지원하는 사람들, 절차, 커뮤니티 전용의 활기찬 생태계를 지속적으로 발달시키는 아파치 소프트웨어 재단의 좋은 사람들에게 감사하고 싶다.

이 책에 소개된 도구와 기법은 오픈소스 소프트웨어 커뮤니티에 깊은 뿌리를 두고 있다. 루씬, 솔라, 머하웃, OpenNLP는 모두 아파치의 영향 아래에 있다. 이 책에서는 이런 도구로 할 수 있는 일을 겉핥기 정도로 다룬다. 우리의 목표는 텍스트 처리를 둘러싼 핵심 개념을 이해시키고, 이 분야에 대한 이후의 탐구를 위한 견고한 기초를 제공하는 것이다. 행복하게 코딩하시라!
- 드류 패리스(Drew Farris)

저자 소개

그랜트 잉거솔 (Grant Ingersoll)

검색과 자연언어 처리 도구를 개발하는 루시드 이미지네이션Lucid Imagination의 창업자다. 루시드 이미지네이션을 창업하기 전에는 시라큐즈 대학의 자연언어 처리 센터의 시니어 소프트웨어 엔지니어였다. 자연언어 처리 센터와 그 이전에는 MNIS-텍스트와이즈(TextWise)에서 정보 검색, 질의응답, 클러스터링, 요약, 카테고리 분류를 수반하는 다수의 텍스트 처리 애플리케이션을 개발했다. 아파치 루씬(Lucene) 자바 프로젝트의 커미터이면서 강연자이자 트레이너이고, 아파치 머하웃(Mahout) 기계학습 프로젝트의 공동 창립자다. 시라큐즈 대학에서 컴퓨터과학 석사학위를 받았으며, 암허스트 칼리지에서 수학과 컴퓨터과학 학사학위를 받았다.

토마스 모튼 (Thomas Morton)

텍스트 처리와 기계학습 분야의 소프트웨어를 개발하고 연구를 수행한다. 최근 5년 동안 OpenNLP 텍스트 처리 프로젝트와 최대 엔트로피 기계학습 프로젝트의 주요 개발자이자 관리자였다. 2005년, 펜실베이니아 대학에서 컴퓨터과학 박사학위를 받았고, 업계에서 텍스트 처리와 기계학습을 기업 수준의 개발에 적용하는 일을 수행했다. 현재 필라델피아에 있는 컴캐스트 인터랙티브 미디어(Comcast Interactive Media)에서 소프트웨어 아키텍트로 일하고 있다.

드류 패리스 (Drew Farris)

대규모 분석과 분산 컴퓨팅 및 기계학습을 주로 하는 전문 소프트웨어 개발자이자 기술 컨설턴트다. 전에는 텍스트와이즈(Textwise)에서 일하면서 자연언어 처리와 분류, 시각화 기법을 조합해서 다양한 텍스트 조사와 관리, 검색 애플리케이션을 만들었다. 아파치 머하웃, 루씬, 솔라 등의 여러 가지 오픈소스 프로젝트에 기여했고, 시라큐즈 대학 정보학부의 정보자원관리 석사학위와 컴퓨터그래픽스 학사학위를 보유하고 있다.

옮긴이의 말

오래 걸렸습니다. 이 책의 원서가 출간됐을 때 “제가 처음 검색 분야를 접할 때 이런 책이 있었다면 좋았겠다.”는 아쉬움이 들었고, 그래서 이 책의 한국어판이 반드시 필요하다고 생각했습니다. 이 책에는 많은 오픈소스 프로젝트를 사용한 예제가 들어 있고, 이 프로젝트들은 지금도 끊임없이 진화하고 있습니다. 개발자들이 이 책으로 검색과 자연언어 처리를 쉽게 활용하는 시작 지점으로 삼으면 좋겠습니다. 깃허브에 책의 예제가 모두 올라와 있고, 거의 바로 실행시킬 수 있는 정도로 완성도가 높으니 좋은 참고가 될 것이라고 생각합니다.

9개의 장으로 이뤄진 이 책은, 텍스트 처리에 대한 소개부터 시작해서 처리 대상인 텍스트를 얻기 위한 방법, 검색 이론, 검색 서비스를 구성하는 주요 요소가 되는 유사 문자열 일치, 개체명 인식, 결과를 사용자에게 도움이 되는 방식으로 보여주기 위한 클러스터링과 분류, 앞의 내용을 통합해서 적용하는 QA 시스템 소개와 심화된 주제에 이르는 내용으로 구성됐습니다. 순차적으로 읽을 필요는 없지만, 이 분야가 낯선 사람이라도 차근차근 따라갈 수 있게 구성돼 있습니다.

2018년 12월에 솔라 최신 버전인 7.5를 기준으로 책 내용을 검토해, 최신 버전을 사용하려고 하는 이가 어떤 것을 보면 될지에 대한 안내를 덧붙였습니다. 머하웃의 경우에는 패키지 전체적인 변화가 너무 크고, 그동안 더 널리 사용되는 다른 라이브러리(아파치 스파크)가 있어 주석에 책에서 하는 일을 스파크로 하기 위해 어떤 문서를 보면 좋을지에 대해 간단히 설명했습니다.

옮긴이 소개

임혜연

소프트웨어가 세상을 더 좋게 바꿀 수 있는지 고민하며 사는 개발자다. 인간 언어와 프로그래밍 언어, 프론트엔드부터 백엔드까지 다 파고들고 싶은 욕심이 있는 사람이다. 옮긴 책으로는 에이콘출판사에서 발간한 『데이터 접근 패턴』(2013)이 있다.

목차

목차
  • 1장. 텍스트 길들이기 시작
  • 1.1 텍스트 길들이기가 중요한 이유
  • 1.2 미리보기: 사실 기반 질의응답 시스템
    • 1.2.1 안녕하세요, 프랑켄슈타인 박사님
  • 1.3 텍스트를 이해하기는 어렵다
  • 1.4 길들여진 텍스트
  • 1.5 텍스트와 지능적인 앱: 검색과 그 너머
    • 1.5.1 검색과 일치
    • 1.5.2 정보 추출
    • 1.5.3 정보 그룹화
    • 1.5.4 지능적인 애플리케이션
  • 1.6 정리
  • 1.7 참고 자료

  • 2장. 텍스트 길들이기 기초
  • 2.1 언어의 기초
    • 2.1.1 단어와 그 범주
    • 2.1.2 구와 절
    • 2.1.3 형태론
  • 2.2 텍스트 프로세싱을 위한 일반적인 도구
    • 2.2.1 문자열 조작 도구
    • 2.2.2 토큰과 토큰 분리
    • 2.2.3 품사 배정
    • 2.2.4 어간 추출
    • 2.2.5 문장 탐지
    • 2.2.6 구문 분석과 문법
    • 2.7.7 시퀀스 모델링
  • 2.3 일반 파일 형식에서 콘텐츠의 전처리와 추출
    • 2.3.1 전처리의 중요성
    • 2.3.2 아파치 티카를 사용한 콘텐츠 추출
  • 2.4 정리
  • 2.5 참고 자료

  • 3장. 검색
  • 3.1 검색과 패싯 사례: 아마존
  • 3.2 검색 개념 개론
    • 3.2.1 콘텐츠로 색인 만들기
    • 3.2.2 사용자 입력
    • 3.2.3 벡터 공간 모델로 문서 순위화
    • 3.2.4 결과 표시
  • 3.3 아파치 솔라 검색 서버 소개
    • 3.3.1 솔라 처음 실행
    • 3.3.2 솔라 개념 이해
  • 3.4 아파치 솔라를 사용한 콘텐츠 색인
    • 3.4.1 XML을 사용한 인덱스
    • 3.4.2 솔라와 아파치 티카를 사용한 콘텐츠 추출과 인덱스 작성
  • 3.5 아파치 솔라로 콘텐츠 검색
    • 3.5.1 솔라 질의 입력 파라미터
    • 3.5.2 추출된 콘텐츠에 대한 패싯
  • 3.6 검색 성능 요소 이해
    • 3.6.1 품질 판단
    • 3.6.2 수량 판단
  • 3.7 검색 성능 개선
    • 3.7.1 하드웨어 개선
    • 3.7.2 분석 개선
    • 3.7.3 질의 성능 개선
    • 3.7.4 대안적인 채점 모델
    • 3.7.5 솔라의 성능 개선을 위한 기법
  • 3.8 검색 대안
  • 3.9 정리
  • 3.10 참고 자료

  • 4장. 유사 문자열 일치
  • 4.1 유사 문자열 일치에 대한 접근 방식
    • 4.1.1 문자 겹침 척도
    • 4.1.2 편집 거리 척도
    • 4.1.3 n그램 편집 거리
  • 4.2 유사 일치 문자열 검색
    • 4.2.1 접두사를 사용한 일치 확인을 솔라로 수행
    • 4.2.2 접두사 일치를 위한 트라이 사용
    • 4.2.3 일치 확인을 위한 n그램 사용
  • 4.3 유사 문자열 일치 애플리케이션 작성
    • 4.3.1 검색에 사전 입력 추가
    • 4.3.2 검색을 위한 질의 철자 검사
    • 4.3.3 레코드 일치 확인
  • 4.4 정리
  • 4.5 참고 자료

  • 5장. 인명, 지명. 사물 식별
  • 5.1 개체명 인식에 대한 접근법
    • 5.1.1 규칙을 사용한 이름 인식
    • 5.1.2 이름 인식에 통계적 분류기 사용
  • 5.2 OpenNLP를 사용한 기본적인 개체 인식
    • 5.2.1 OpenNLP로 이름 찾기
    • 5.2.2 OpenNLP로 식별된 이름 해석
    • 5.2.3 확률 기반 이름 필터링
  • 5.3 OpenNLP를 이용한 심도 있는 개체 식별
    • 5.3.1 OpenNLP로 복수의 개체 유형 인식
    • 5.3.2 후드 아래: OpenNLP가 이름을 식별하는 방법
  • 5.4 OpenNLP의 성능
    • 5.4.1 결과의 품질
    • 5.4.2 실행 시간 성능
    • 5.4.3 OpenNLP의 메모리 사용량
  • 5.5 OpenNLP 개체명 식별을 새 도메인의 요구 사항에 맞추기
    • 5.5.1 모델 훈련 이유와 방법
    • 5.5.2 OpenNLP 모델 훈련
    • 5.5.3 모델링 입력 바꾸기
    • 5.5.4 이름을 모델로 만드는 새로운 방법
  • 5.6 정리
  • 5.7 추가 자료

  • 6장. 텍스트 클러스터링
  • 6.1 구글 뉴스 문서 클러스터링
  • 6.2 클러스터링 기초
    • 6.2.1 클러스터링의 대상인 세 가지 텍스트 유형
    • 6.2.2 클러스터링 알고리즘의 선택
    • 6.2.3 유사도 결정
    • 6.2.4 결과에 라벨 붙이기
    • 6.2.5 클러스터링 결과의 평가 방법
  • 6.3 간단한 클러스터링 애플리케이션 설정
  • 6.4 Carrot2를 사용한 검색 결과 클러스터링
    • 6.4.1 Carrot2 API 사용
    • 6.4.2 Carrot2를 사용한 솔라 검색 결과 클러스터링
  • 6.5 아파치 머하웃을 사용한 문서 컬렉션 클러스터링
    • 6.5.1 클러스터링용 데이터 준비
    • 6.5.2 K 평균 클러스터링
  • 6.6 아파치 머하웃을 사용한 주제 모델링
  • 6.7 클러스터링 성능 분석
    • 6.7.1 자질 선택과 축소
    • 6.7.2 Carrot2 성능과 품질
    • 6.7.3 머하웃 클러스터링 벤치마크
  • 6.8 감사의 말
  • 6.9 정리
  • 6.10 참고 자료

  • 7장. 분류, 커테고리 분류, 태깅
  • 7.1 분류와 카테고리 분류 소개
  • 7.2 분류 과정
    • 7.2.1 분류 체계 선택
    • 7.2.2 텍스트 카테고리 분류를 위한 자질 찾기
    • 7.2.3 훈련 데이터의 중요성
    • 7.2.4 분류기 성능 평가
    • 7.2.5 분류기를 생산 환경에 배치
  • 7.3 아파치 루씬으로 문서 카테고리 분류기 작성
    • 7.3.1 루씬으로 텍스트 카테고리 분류
    • 7.3.2 MoreLikeThis 카테고리 분류기에 사용할 훈련 데이터 준비
    • 7.3.3 MoreLikeThis 분류기 훈련
    • 7.3.4 MoreLikeThis 카테고리 분류기로 문서를 카테고리 분류
    • 7.3.5 MoreLikeThis 카테고리 분류기 테스트
    • 7.3.6 생산 단계에서의 MoreLikeThis
  • 7.4 아파치 머하웃으로 나이브 베이즈 분류기 훈련
    • 7.4.1 나이브 베이즈 분류 방식으로 텍스트를 카테고리 분류
    • 7.4.2 훈련 데이터 준비
    • 7.4.3 테스트 데이터 숨겨두기
    • 7.4.4 분류기 훈련
    • 7.4.5 분류기 테스트
    • 7.4.6 부트스트래핑 프로세스 개선
    • 7.4.7 솔라와 머하웃 베이즈 분류기 통합
  • 7.5 OpenNLP로 문서 카테고리 분류
    • 7.5.1 회귀 모델과 최대 엔트로피 문서 카테고리 분류
    • 7.5.2 최대 엔트로피 문서 카테고리 분류기를 위해 훈련 데이터 준비
    • 7.5.3 최대 엔트로피 문서 카테고리 분류기 훈련
    • 7.5.4 최대 엔트로피 분류기 테스트
    • 7.5.5 생산 시스템에서의 최대 엔트로피 문서 카테고리 분류
  • 7.6 아파치 솔라를 사용하는 태그 추천기 작성
    • 7.6.1 태그 추천을 위한 훈련 데이터 수집
    • 7.6.2 훈련 데이터 준비
    • 7.6.3 솔라 태그 추천기 훈련
    • 7.6.4 추천 태그 생성
    • 7.6.5 태그 추천기 평가
  • 7.7 정리
  • 7.8 참고 자료

  • 8장. 질의응답 시스템 예제 구축
  • 8.1 질의응답 시스템의 기초
  • 8.2 QA 코드 설치와 실행
  • 8.3 표본 질의응답 아키텍처
  • 8.4 질문의 이해와 답변 생성
    • 8.4.1 답변 유형 분류기 훈련
    • 8.4.2 질의를 청크로 분리
    • 8.4.3 답변 유형 계산
    • 8.4.4 질의 생성
    • 8.4.5 후보 패시지 순위화
  • 8.5 시스템 개선을 위한 과정
  • 8.6 정리
  • 8.7 참고 자료

  • 9장. 길들여지지 않는 텍스트: 다음 개척지 탐구
  • 9.1 의미론, 담론, 화용론: 고수준 NLP 탐구
    • 9.1.1 의미론
    • 9.1.2 담화
    • 9.1.3 화용론
  • 9.2 문서와 컬렉션 요약
  • 9.3 관계 추출
    • 9.3.1 접근 방식 개요
    • 9.3.2 평가
    • 9.3.3 관계 추출을 위한 도구
  • 9.4 중요한 콘텐츠와 인물 식별
    • 9.4.1 전반적 중요도와 권위
    • 9.4.2 개인적 중요도
    • 9.4.3 중요성에 대한 자료와 포인터
  • 9.5 정서 분석을 통해 감정 감지
    • 9.5.1 역사와 비평
    • 9.5.2 도구와 데이터 요구
    • 9.5.3 기본적 극성 알고리즘
    • 9.5.4 고급 주제
    • 9.5.5 정서 분석을 위한 오픈소스 라이브러리
  • 9.6 교차 언어 정보 검색
  • 9.7 정리
  • 9.8 참고 자료

관련 블로그 글

컴퓨터와 인간의 소통 방법, 자연어 처리


 


 

최근 핸드폰, 스피커, 리모콘 등 다양한 기계를 음성 인식으로 조작하는 모습을 쉽게 볼 수 있다.

단순한 기계 조작은 물론이고 실제 사람과 대화하듯이 궁금한 것을 묻고 답하는 것도 가능하다.

이외에도 기계 번역, 챗봇, 검색 엔진 등 다양한 분야에서 자연어 처리 기술을 쉽게 찾아볼 수 있다.

 





자연어: 일반 사회에서 자연히 발생하여 쓰이는 언어로, 인공적으로 만들어진 언어인 인공어와 구분하여 부르는 개념 

인공어: 자연적으로 생성된 자연어와 달리 한 사람이나 여러 사람의 의도와 목적에 따라 만들어진 언어

 

자연어 처리란 사용자가 입력하는 자연어를 분석하고 처리해 컴퓨터가 이해할 수 있는 형태로 만드는 기술이다.

자연어 처리에는 사람들이 사용하는 다양한 단어와 각 단어가 사용되는 상황, 상호작용하는 방식 등 방대한 양의 언어 데이터가 필요하며, 사용자가 입력한 데이터의 형태, 구문, 의미 등의 분석을 통해 텍스트를 이해하고 적합한 결과를 출력한다.

지난해 10월 구글은 AI 언어 모델인 버트(BERT)를 발표했다.

버트는 구글의 딥러닝 아키텍처인 '트랜스포머'로 구성된 자연어 처리 모델로 대표적인 자연어 처리 평가 지표인 GLUE(General Language Understanding Evaluation) SQuAD(Stanford Question Answering Dataset) 중 일부 항목에서 인간보다 뛰어난 성적을 보이면서 많은 주목을 받기도 했다.

 



 


활용 사례 1.

태블로 소프트웨어(Tableau Software)는 자연어 질의를 지원하는 애스크 데이터(Ask Data)를 발표했다.

애스크 데이터를 사용해 확인하고 싶은 내용을 입력하면 그에 대한 답변을 시각화 자료로 보여준다.


활용 사례 2.

아시아나항공의 챗봇 서비스 아론(Aron)에서는 간단한 문의는 물론 항공권 예약과 구매까지 가능해졌다.

아론은 애저(Azure)와 루이스(LUIS)를 활용해 개발됐으며, 다양한 메신저와 애플리케이션을 통해 서비스를 제공하고 있다.


활용 사례 3.

퀄컴 테크놀로지는 아마존의 '알렉사 보이스 서비스' 개발 키트를 기반으로 개발한 퀄컴 스마트 오디오 플랫폼을 시연했다.

차량에 설치된 스마트 오디오 플랫폼을 통해 음성으로 길을 검색하거나 음악, 영상을 재상할 수도 있다.

 





자연어 처리 with 파이썬은 파이썬과 자연어 툴킷(NLTK)을 이용해  자연어 처리(NLP)를 수행하는 다양한 방법을 알려주는 독창적인 레시피가 담긴 책이다.

자연어 이해, 자연어 처리, 구문 분석 등 다양한 주제를 포함해 실용적인 감정 분석부터 최신 딥러닝 기술의 적용 방법까지 자연어를 다루는 데 사용할 수 있는 60여 개의 레시피를 접할 수 있다.

자연어 처리에 관심이 있는 독자라면 이 책을 통해 다양한 상황에서 자연어 처리를 어떻게 구현하는지 확인해보자.



CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.114 : 본문 3행]

컬렉션을 받는 데만 SolrServer의 add 메소드를 사용하라.
->
간단히 컬렉션을 받는 SolrServer의 add 메소드를 사용하면 된다.