原文:Text similarity search with vector fields
ES7.3的新功能
基于文本embedding技術(shù)谱姓,Text similarity search可以用于Question-answering本砰、image search,在ES中新增了一個dense_vector
什么是embedding
sentence embedding:InferSent, Universal Sentence Encoder, ELMo,and BERT.
優(yōu)點
1)可以跨越詞法而獲取語義相似稠炬,比如"zipping up files" returns "Compressing / Decompressing Folders & Files",順序不同的相同詞意義可能完全不一樣
2)稠密低維度缺點
對于長文本句向量效果并不是很好咪啡,一般在短文本上使用
如何在es中使用embedding進行相似度檢索
- 索引
顯式聲明為dense_vector并且維度好像就可以了,似乎不能像分詞插件hanlp一樣直接把model直接嵌入到ES中首启?
"title_vector": {
"type": "dense_vector",
"dims": 512
}
- 語法
{
"script_score": {
"query": {"match_all": {}},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['title_vector']) + 1.0",
"params": {"query_vector": query_vector}
}
}
}
局限
- 效率:全部計算目前幾乎是不可行的,效率太低瑟匆,目前還在優(yōu)化闽坡,建議先用一些別的query條件進行初選
- 效果:語義向量本來可能會出現(xiàn)一些badcase,不太好解決愁溜。