ES7.3支持语义句向量查询

原文:Text similarity search with vector fields

ES7.3的新功能

基于文本embedding技术,Text similarity search可以用于Question-answering、image search,在ES中新增了一个dense_vector

什么是embedding

  • word embedding:word2vec and GloVe.

  • 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,不太好解决。

你可能感兴趣的:(ES7.3支持语义句向量查询)