언어처리

Ernie 2011. 3. 4. 18:42

문서에서 사람들이 관심이 있을만한 키워드를 뽑아내는 시스템에 관한 논문.

http://portal.acm.org/citation.cfm?id=1547447


논문 pdf: http://cis.poly.edu/~uirmak/publications/csrank.pdf



Baseline은 Concept Vector를 사용하는 시스템이고, 제안하는 방법은 

1) concept의 문맥에 무관한 interestingness와 
2) concept의 문맥 의존적인 relevance
를 함께 이용하는 시스템.


Baseline 시스템


1) 문서가 주어지면 tf*idf점수를 가지는 텀벡터 생성. 

. 불용어는 제외

. 점수는 0~1 사이로 정규화


2) 문서의 모든 unit에 대해서 unit 벡터 생성 

   (unit은 검색로그에서 통계적으로 생성한 단일 개념의 단어들 ex: New York Times)

. Unit 점수도 0~1 사이로 정규화 (Unit점수란 unit을 구할 때 쓴 MI값?)


3) 텀 벡터를 Unit 벡터에 추가하여 concept 벡터 생성

. 텀이 텀벡터에는 있지만 Unit벡터에는 없을 때: 텀벡터 점수를 내려준 후 추가

. 텀이 텀벡터에는 없고 Unit벡터에만 있다: 텀벡터 점수 그대로 추가

. 텀이 텀벡터에도 Unit벡터에도 있다: 텀벡터점수 + 유닛벡터점수 해서 추가


4) Multi텀 concept에 대해서는 다음 작업을 해줌

. 멀티텀을 구성하는 텀의 텀벡터점수를 몽땅 합쳐서 unit 벡터점수에 더함

  (더 specific한 concept의 점수가 높아짐)


최종 concept 벡터 점수로 랭킹하여 키워드를 추천해줄 수 있겠지.

문제는 문서를 대표하는 일반적인 키워드를 뽑아준다는 것. 되도록 긴 걸 뽑아주긴 하겠지만.

예) "my favorite", "what is happening"

좀 더 specific한 키워드를 뽑아줘야 함.


제안 시스템


A. Concept의 Interestingness (문맥에 무관함)


1) Search log query log 정보

. concept과 정확히 일치하는 질의어의 수 [freq_exact 자질]

. concept을 구로서 포함한 질의어의 수 [freq_phrase_contained 자질]

. concept에 들어있는 텀들의 상호정보(MI) [unit_score 자질]


2) Search engine result page 정보

. concept으로 (phase query로) 검색엔진에서 검색된 문서의 수 [searchengine_phrase 자질]

   --> 검색된 문서가 적어야 더 specific


3) Text based 정보

. concept의 단어 개수 [concept_size 자질]

. concept의 글자 수 [number_of_chars 자질]

. concept에 포함된 sub-concept의 수. sub-concept는 두개 이상의 텀으로 돼 있어야 하고 0.25보다 높은 unit점수를 가져야 함 [subconcepts 자질]


4) Taxonomy based 정보

. 장소, 인명, 조직명 같은 정보 [high_level_type 자질]


5) 기타 정보

. concept에 해당하는 위키피디아 항목의 단어 수 [wiki_word_count 자질]

  --> 길이가 긴 문서일수록 퀄리티 좋은 항목이라는 가정.



B. concept의 문맥내 relevance


concept마다 '관련있는 문맥 키워드' 집합 할당

---> concept에 관련있는 문서에서 (예를 들어) 100개의 키워드를 추출

이 집합이랑 새로운 문서랑 비교해서 유사하면 해당 concept이 관련있는 것임.


관련키워드(와 점수) 마이닝 방법

(문맥 키워드는 stemmed)


1) 검색엔진 스니펫 정보

concept을 검색엔진에 던져 상위 100개의 snippet 추출

100개 snippet을 하나의 문서처럼 다룸 (bag of words)

이 문서의 각 텀 (a word in the bag of words)에 대해 tf*idf 점수 계산 (idf를 알려면 미리 유한개의 concept이 있어야겠네?)

점수 상위 100개 텀을 concept의 관련키워드로 지정.


2) Prisma 질의어 refinement툴

Prisma에 concept을 날리면 20개의 feedback concept을 돌려줌.

이 20개의 concept를 하나의 문서처럼 만들어 스니펫에 했던 것과 동일한 작업을 함

(tf는 다 1아닌가? 다른 feedback에 같은 텀들이 들어가 있으면 1보단 크겠지만...)


3) Related query suggestions

YDN의 이 서비스에 concept을 날리면 최대 300개까지의 추천후보(텀)와 빈도(query volume)를 리턴.

각 텀 가중치 = 모든 concept에 대해 {텀빈도*idf(텀) }    (대략의 개념. 자세한 건 논문에.)

각 텀들이 관련키워드가 되는거지.



SVM이용. 그런데 관련키워드와 가중치는 어떻게 이용했지?

- 입력이 벡터?








 
 
 

검색

Ernie 2008. 7. 4. 19:31

코딩할 때 문법을 외워서 하는게 아니라 필요할 때마다 인터넷에서 찾아서 쓰는 편인데, 프로그래밍 관련 검색을 할 때는 주로 google이나 yahoo!를 쓴다. Firefox 우상단의 검색창을 이용해 빠르게 필요한 걸 Google이나 Yahoo!에서 검색한다. 그런데 Google은 쓰면 쓸수록 감탄하게 된다. 오늘 겪었던 실제 사례 두 가지를 정리.

사례 1. 평생 처음 php 코딩을 하게 돼서 간단한 문법도 모르는 것 투성이라 PHP의 for 형식을 찾고자 했다. Google로 찾았더니 "PHP for loop"으로 질의 확장을 한 후 검색을 하여 두번째 섹션에 보여준다. 적절한 질의 확장과 적절한 presentation에 감탄 감탄.



for 같은 어휘는 일반적인 분야의 문서에서 전치사로 자주 나오는 단어이다. PHP같은 프로그래밍 언어이름과는 바로 붙어 문서에서 나오는 일이 적기 때문에 'PHP for'를 붙은 두 단어라고 고려하고 키워드간 거리를 고려하여 검색을 하면 적절한 결과를 보여주기 힘든 질의.


이는 실제 Yahoo!의 결과를 보면 알 수 있다. -_-;

 

Yahoo!는 소심하게 "Also Try"로 "php for loop"을 보여주지만 검색 결과를 보려면 다시 한번 클릭해야 한다. 이 경우 실제로는 클릭이 단지 한번 더 느는게 아니라 처음 나온 검색 결과를 다 훑은 다음에 클릭을 하고, 다시 페이지를 훑어야 하기 때문에 원하는 검색 결과를 얻기까지는 적지 않은 시간이 걸린다.

 

 

 

사례2: 오전에는 php로 아장아장 프로그래밍을 하다가 오후에는 Perl로 코딩을 하게 됐다. 잘 안쓰는 ` (역따옴표?)의 리턴값이 있는지 알고 싶어서 google에서 검색을 해봤다. 이 ` 역시 질의 normalization같은 것을 할 때 잘 무시되는 기호라 과연 검색이 잘될까 의심을 하면서 Google에 넣어봤는데...

 

 

대단한 Google. `를 'backtick'이라고 표현하며 검색 결과를 보여준다. 솔직히 이 결과가 제대로 나올 거라곤 상상도 못했다.

 

혹시나 싶어 Yahoo!에서 검색해봤더니 기대 했던대로 `가 무시된 결과가 나온다. 이번엔 Also Try도 없다.

 

 

가려운 곳을 제대로 긁어주는 검색이 제대로 된 검색이라고 생각하는데 Google은 제대로 해준다는 생각. 저걸 일일이 사람이 만들어 넣은 정보를 바탕으로 하는지, 데이터마이닝을 통해 하는지는 몰라도.

 
 
 

검색

Ernie 2008. 4. 21. 14:02
구글에서 tanh를 검색했더니 clustered 검색결과가 보여지더라.

대충 상단은 수학용어 tanh에 대한 결과, 중간은 tanh의 연관검색어(?)인 hyperbolic tangent에 대한 결과, 그리고 제일 하단은 컴퓨터에서 사용하는 함수인 tanh에 대한 결과다.