原文:Text similarity search with vector fields
ES7.3的新功能
基于文本embedding技术,Text similarity search可以用于Question-answering、image search,在ES中新增了一个dense_vector
什么是embedding
-
sentence embedding:InferSent, Universal Sentence Encoder, ELMo,and BERT.
-
优点
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}
}
}
}
局限
- 效率:全部计算目前几乎是不可行的,效率太低,目前还在优化,建议先用一些别的query条件进行初选
- 效果:语义向量本来可能会出现一些badcase,不太好解决。
网友评论