검색엔진에서 자연어처리, 형태소분석 등이 필요한 이유가 무엇인가요?

superkkt의 이미지

안녕하세요. 오늘도 아침부터 초보적인 질문 하나 적어봅니다.

요즘 검색엔진에 관심을 가져서 이것저것 자료를 찾아보고 있습니다. 그러던 중에 인덱싱된 자료를 검색할때, 특히 한글인 경우, 자연어처리 및 형태소분석 등이 필요하다는 내용을 보았습니다.

이런 내용에 대해서 몰랐을때는 검색 부분은 단순히 입력한 키워드가 있는 페이지를 모두 보여주는데 페이지 랭킹 정도만 계산해서 보여주면 되겠다고 생각했었습니다. 아무래도 이렇게하면 관련성이 적은 페이지도 많이 검색이 되겠죠.

그런데 아무리 생각해봐도 자연어처리, 형태소분석 등을 했을때 어떻게 검색 품질이 좋아지는지 감을 못잡겠습니다. 단순히 입력한 검색어를 AND 연산으로 조회해서 보여주는것보다 어떤 좋은점이 있나요?

lovewar의 이미지

저도 그런 관점에서 의구심이 있어 해매던 중 다음 책을 읽고 있습니다.

'한국어 형태소 분석과 정보 검색"

전문적으로 하는 것이 아니기에 그냥 대충 읽어 넘깁니다만, 한글이 참 어렵다는
생각을 하게 끔 합니다.

왜, 형태소 분석이 필요한지에 대해서 읽다 보면 답이 나오지 않을까 생각합니다만,
생각컨대, 검색엔진들이 진화를 할 것 같은 불길한 생각이 듭니다.

그리고 다음 두 사이트를 관심있게 봅니다.
http://abolapia.egloos.com/
http://hanigamo.egloos.com/

puaxx의 이미지

제가 알고 있기론 형태소 분석 자연어 처리는 인덱싱을 하기위한 단계인것으로 알고 있습니다.
당연하게도 형태소 분석과 자연어 처리의 성능이 좋다면 더 좋은 인덱스(색인)를 만들수가 있겠죠..
그게 곧 검색의 품질과 관련된다고 생각합니다. :-)
생각해 보니 검색 시점에서도 역시 필요할 것 같군요.

kicom95의 이미지

형태소 분석을 해야만 정확한 검색이 가능합니다.

형태소 분석이라고 하긴 보다는 명사추출기가 더욱 어울릴듯도 합니다

문서에 '대한민국에서는' 이라는 단어가 있을때 명사 추출을 하면 '대한민국' 이라고 나옵니다

즉 사용자가 대한민국 이라고 검색을 하게되면 '대한민국에서','대한민국도' ,... 등등...

을 검색하게 됩니다. ( 바로 얼마전 kldp 검색이 문제가 되었던것중 하나가 이 형태소 분석으로..

그래서 결국 구글 검색을 쓰는것으로 알고 있습니다 아닌가 >> ㅡ,ㅡ;;)

물론 형태소 분석을 안해도 가능은 할수 있지만... 검색의 정확도.. 색인 DB 의 증가등의

심각한 문제가 발생할수 있지요 ^^

첨언을 드리자면 랭키또한 무지 많은 모델이 있습니다, 불린,벡터... 구글의 페이지링크

여기에 더하여 트러스트 랭크등...^^ 저도 요 개념을 다안다 할순 없지만요.

가자 해외로 ~ .. 돈 벌러.

superkkt의 이미지

답변 감사합니다. 대충 어떤건지 감은 잡았습니다. 그럼 형태소분석이나 자연어처리 등을 하려면 방대한 양의 자료.. 사전(?)이라고 해야할까요? 아무튼 이런 DB가 필요할것으로 생각되는데 제가 이해한것이 맞는지 모르겠습니다. 생각해보니 알고리즘도 복잡할것 같긴하네요. 검색해보니 대학교에서 만든 상용 프로그램들이 몇개 나오는군요. 혹시 형태소분석하는 프로그램도 오픈소스가 있을까요?^^

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

wkpark의 이미지

오픈소스가 꽤 있습니다.

* KLE:KTS
* MoA http://speech.chungbuk.ac.kr/~owkwon/srhome/lectures/public_software.html (KTS와 같은 연구실 랩이랍니다 ^^;)
* 미지의 kspell (소스는 ㅡㅡ;;)
* KLDPWiki:형태소분석기
* http://kldp.org/node/49996
소스를 보면 대부분이 완성형코드 기반에 완성형코드만 지원합니다.

온갖 참된 삶은 만남이다 --Martin Buber

kalstein의 이미지

어렵지요... 한글은 조합이 가능하다는 점에서...사용에는 장점이지만 컴퓨팅에서는 조금 불리한점도 있죠.

윗분이 예를드신...어두, 어미, 어간 등의 분리라던가...(영어로는 stemming...일꺼에요 ^^;)

그런게 조금 다른언어에 비해 계산이 복잡한것이 있긴하죠.

그래서 더더욱 그런 처리가 필요한거구요...단순한 불리언 계산 (equal or non-equal) 으로는 한글 검색은

좀 부족한 경우가 많아보입니다.


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

하니가모의 이미지

제가 글제주가 없지만.... http://hanigamo.egloos.com/i4 에 정리를 해보았습니다.

qprk의 이미지

'대학생선교회' 에서 키워드를 추출하면
대학생, 선교회 가 정답일까요?
대학, 생선, 교회 가 정답일까요?
대, 학, 생, 선, 교, 회 가 정답일까요?

머리가 좋은 검색엔진은 어떤 방법으로 분석을 하여도 '대학생' 이라는 검색어에서 위의 문장을 찾아낼 수 있습니다.
하지만.. 대충봐도 두번째는 찾기 힘들어 보이구요.. 세번째는 연산해야할 키워드가 너무 많은것을 알 수 있습니다.

즉 불필요한 단어를 걸러내는것이지요.. 영어에서는 좀더 단순하게 stopping stemming 과정만을 거치면 되지만 한글은 언어의 복잡성으로 그렇지가 못하지요.

'아버지가방에들어가신다' 를 분석할 경우 뛰어쓰기 보정을 한 다음 키워드를 추출해야 좋은 검색 결과를 얻을 수 있을것입니다...

자연어 처리는 어떤 문장에서 위의 형태소 분석을 마친 다음 어떤 단어가 더 중요한가를 따져서 좀더 그에 가까운 문장이 포함된 문서를 찾아주는것이겠지요..

그리고 이런 사전 작업이 색인시에 잘 이루어 져야 좀더 정확한 검색 결과를 얻을 수 있습니다..

예를 들어 문서가 1000 개가 있습니다. 이 문서에서 키워드를 모두 추출하였습니다.

10번 문서에서 서로 다른 단어가 50개가 발견이 되었고 그중 '리눅스' 라는 단어가 100번 나왔고 '윈도우' 라는 단어는 50번 나왔습니다. 즉 10번째 문서만 놓고 보면 '리눅스'가 좀더 비중있게 다루어 졌다고 볼 수 있습니다..
20번 문서에서 서로 다른 단어가 50개가 발견이 되었고 그중 '리눅스' 라는 단어는 20번 나왔고 '윈도우' 라는 단어는 50번 나왔습니다. 즉 20번째 문서만 놓고 보면 '윈도우'가 좀더 비중있게 다루어 졌다고 볼 수 있습니다..

그리고
1000개 문서 전체에서 '리눅스'는 100000번 발견되었고 '윈도우'는 100번 발견되었다고 하면..

마지막으로 검색어가 '리눅스' and '윈도우' 가 되었다면..
수치상으로 보면 10번 문서가 20번 문서보다 정확도가 높아 보입니다. 하지만 통계적으로 보면 '리눅스'는 거의 모든 문서에서 고루 발견되기 때문에 범용적 단어라고 가정할 수가 있습니다. - 어디까지나 가정입니다.
이런 가정하에 20번 문서가 10번 문서보다 좀더 정확하다고 검색엔진은 인식을 합니다. (일반적인 역문서 빈도 계산법)


정확한 단어가 추출되지 않는다면 통계기반의 문서 정확도 산출에 오류가 많이 발생을 하게되어 검색결과의 정확도가 그다지 높아지지 않는 결과가 나오지요..

-----------------------
멋진남자...

멋진남자...

cleansugar의 이미지

형태소 분석 '은전한닢' 프로젝트와 MeCab(메카브)
http://www.iamday.net/apps/article/talk/2122/view.iamday

은전한닢 프로젝트
http://eunjeon.blogspot.kr/2013/02/blog-post.html

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.