Elasticsearch에 Dense embedding + Cosine Similarity 적용해서 dense score 알고리즘을 사용해서도 빠른 속도로 검색할 수 있게 하였다.
이 링크에 걸어둔 코드
모델: tensorflow pretrained 모델
데이터: json
형식일 때 indexing + search하는 코드이고,
필자는
이렇게 코드를 바꿔서
모델: huggingface에 있는 모델
데이터: csv 형식
에서 사용할 수 있도록 코드를 수정했다.
body = {
"query": {
"script_score": {
"query": {"match_all": {}},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['text_vector']) + 1.0",
"params": {"query_vector": query_vector}
}
}
}
}
body = {
"query": {
"script_score": {
"query": {
"bool":{
"filter": [
{
"regexp": {
"title": ".*"+keyword.replace(' ', '')+".*"
}
}
],
}
},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['text_vector']) + 10.0",
"params": {"query_vector": query_vector}
}
}
}
}
body = {
"query": {
"script_score": {
"query": {
"multi_match": {
"query": keyword,
"fields": ["title^50", "text^10"]
}
},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['text_vector']) + 1.0",
"params": {"query_vector": query_vector}
}
}
}
}