2014-07-09 4 views
4

주간 프로젝트로 작은 검색 엔진을 작성했습니다. 그것은 질의 벡터와 문서 벡터 사이의 코사인 유사성에 기반합니다. 벡터는 토큰의 tf-idf 염색을 사용하여 계산됩니다.
전체 텍스트 검색 엔진 인 Apache Solr에 대해 알게되었습니다. 내 질문에 solr 검색 결과를 순위 때 내부적으로 코사인 유사성을 사용합니까?solr은 코사인 유사성을 사용합니까?

답변

5

번호 SOLR는 코사인 유사성에 비슷한 를 사용하지만, 꽤 같은 - 몇 가지 중요한 차이점이 있습니다.

동일한 링크 (https://lucene.apache.org/core/4_10_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html)를 방문하여 아래로 스크롤하면 더 자세한 정보를 제공하는 "Lucene Conceptual Scoring Formula"및 "Lucene Practical Scoring Formula"가 표시됩니다.

어떤 인덱스/쿼리 시간 부스트를 무시하고, 다음은 몇 가지 중요한 차이점은 다음과 같습니다

1. 다른 문서 정규화 계수

대신 자사의 TF-IDF의 유클리드 규범에 의해 각 문서를 정상화 벡터에서는 "doc-len-norm"을 사용합니다. 기본 유사성 척도 (DefaultSimilairty)의 경우 이것은 기본적으로 1/sqrt (sum (tf))와 같습니다 - 즉, tf는 문서의 용어 개수의 합계입니다. 유클리드 표준 (Euclidean norm) 및 각 용어의 idf와 같은 제곱은 생략되어 있지 않습니다. 또한이 값은 공간을 절약하기 위해 바이트로 반올림됩니다. 이것은 흔히 코사인 유사성에 사용되는 정규화 인수와 다른 값으로 나옵니다.

2. 추가 "COORD"밀어

여분의 값이 동일한 점수에 곱해도있다 : 문서에 일치하는 쿼리 용어의 수/쿼리 용어의 총 수입니다.

이렇게하면 더 많은 검색어와 일치하는 필드 (문서)에 대한 추가 부스트를 제공하며 의심스러운 값일 수 있습니다. 이것은 본질적으로 tf-idf 벡터 스코어에 다른 내부 생성물을 곱하는 것입니다.이 벡터의 내 부 생성물은 유클리드 (Euclidean)에 의해서만 정규화 된 쿼리 벡터로 부 울린 벡터 (부울 벡터가 주어진 경우에는 0, 그렇지 않으면 0)로 변환됩니다. 표준.

관련 문제