2

부울 검색이 아닌지 이해하는 데 도움이되는 몇 가지 문제가 있습니다. 내가 아는 한 부울 검색은 AND, OR 및 NOT을 쿼리에 사용할 수있게합니다. 하지만 부울 검색이 아닌 것은 어떻습니까? 저는 어딘가에서 단어를 완성하는 것뿐만 아니라 부분 문자열을 검색 할 수 있다는 것을 알았지 만, 각각의 의미를 완전히 이해하고 싶었습니다. 또한 예를 들어 Google 부울 또는 부울이 아닌 것일 수 있습니다. Oracle Text 또는 Apahe Solr는 어떻습니까?부울 대 부울 검색

답변

2

부울 검색에는 순전히 부울 모델 기법이 아닌 접근 방법이 포함됩니다. .

아마도 이러한 방법의 가장 일반적인 예는 vector-space model입니다.
이 모델에서 각 문서는 포함 된 단어 (또는 bi-grams ...)로 표현되는 벡터입니다. 각 문서의 크기는 어휘의 용어 수입니다.

이 모델의 유사점은 쿼리 인 '가짜'문서를 작성하고이 가짜 문서를 코퍼스의 다른 문서와 비교하여 수행됩니다. 쿼리와 문서의 유사성이 높을수록 결과가 좋습니다.

일반적인 유사 측정은 cosine-similarity입니다.
이 모델은 tf-idf model과 잘 어울립니다 (td-idf는 각 벡터의 각 항목에있는 값이 무엇인지 결정합니다).

부울 모델이 아니라는 점에 유의하십시오. 당신은 벡터의 유사성을 비교할 때 '집합'에 초점을 두지 않습니다. 이것은 완전히 다른 모델입니다.
또한이 방법은 중요한 이점이 있습니다. 즉, "관련성 높은"또는 "관련 없음"과 같은 부울 응답뿐만 아니라 각 문서와 관련된 점수를 반환합니다.

벡터 공간은 AND, OR 필드를 허용하지 않지만 2 위상 검색을 수행하면 쉽게 해결할 수 있습니다. 첫 번째는 부울 모델을 사용하여 후보자를 얻는 것이고 두 번째는 벡터 공간을 사용하여 각 문서의 점수를 얻는 것입니다.


다른 모델은 문서 밖으로 language model를 구축 - 언어 모델은 P(word|M) = the probability of the model M to generate the word로 설명되어 있습니다.

일반적인 언어 모델은 P(word|document) = #occurances(word,document)/|document|
입니다. 확률 제로가 발생하지 않도록하려면 - 일반적으로 평활화 기술을 추가합니다. 일반적인 기술은 다음과 같습니다

P(word|document) = alpha*#occurances(word,document)/|document| + (1-alpha)*#occurances(word,corpus)/|corpus| 

지금 - 우리는 하나 개 이상의 용어의 쿼리가있을 때 :이 모델은 실제로 alpha=1을 설정하여 허용과 의미

P(q|d) = P(t1|d)*P(t2|d)*...*P(tn|d) 

하는 것으로, 그리고 : q=t1 t2 ... tn를, 우리가 계산 OR 의미론은 alpha!=1입니다.


(1) 부울 검색은 기본적으로 용어 설정됩니다

각 용어는 그들에이 용어가 모든 문서를 포함하는 세트와 연결되어 있습니다. 자, 세트 세트에 오션을 설정하면됩니다. AND는 교차점이며, OR은 합집합입니다.

+0

감사합니다. 지금은 분명하게 생각합니다.따라서 부울 검색이 아닌 부울 검색을 사용하면 문서 내에서 특정 용어가 얼마나 많이 발견되어 검색과 얼마나 관련이 있는지 확인할 수 있습니다. – carcaret

+1

@ carcaret 일반적으로 그렇습니다. 그러나 그럴 필요는 없습니다. 바이너리 벡터로 벡터 공간 모델을 사용할 수 있습니다. 나는 개인적으로 아무런 이익도 얻지 못한다. (대안보다는 유익하지 않기 때문에) 가능하지만 가능하다. – amit