当前位置: 首页 > news >正文

手机响应式网站建设公司深圳网页设计公司

手机响应式网站建设公司,深圳网页设计公司,网站建设 南宁,国务院建设行政网站提高准确率的方法有很多,但是要在提高准确率的同时保证召回率往往比较困难,本文只介绍一种比较常见的情况。 问题场景 我们经常搜索内容,往往不止针对某个字段进行搜索,比如:标题、内容,往往都是一起搜索…

提高准确率的方法有很多,但是要在提高准确率的同时保证召回率往往比较困难,本文只介绍一种比较常见的情况。

问题场景

我们经常搜索内容,往往不止针对某个字段进行搜索,比如:标题、内容,往往都是一起搜索的。
index结构如下:

{"settings": {"number_of_shards": "1","number_of_replicas": "0"},"mappings": {"properties": {"title": {"type": "text","analyzer": "ik_smart"},"content": {"type": "text","analyzer": "ik_smart"}}}
}

样例数据如下:

{"index":{"_id":1}}
{"title":"我喜欢的一种水果","content":"我喜欢的苹果是红色的,含有铜、碘、锰、锌、钾等元素"}
{"index":{"_id":2}}
{"title":"红色的番茄","content":"番茄是一种红色的水果,含有各种维生素以及糖分"}
{"index":{"_id":3}}
{"title":"樱桃的介绍","content":"樱桃是红色的,含有丰富的糖分、铁、维生素C、蛋白质、维生素E、维生素B族和胡萝卜素"}
{"index":{"_id":4}}
{"title":"不知名介绍","content":"我爱吃红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色的水果"}

现在我要搜索【红色的苹果】,我们人眼看下来,id=1的文档肯定是最佳匹配的。但我们真实搜索结果会怎么样呢?
搜索语句假设如下:

{"query": {"bool": {"should": [{"match": {"title": "红色的苹果"}},{"match": {"content": "红色的苹果"}}]}}
}

上面搜索语句dsl语句看着略微复杂,我们换个写法,效果一样

{"query": {"multi_match": {"query": "红色的苹果","type": "most_fields","fields": ["title","content"]}}
}

结果:

[{"_index":"dong_analyzer_test2","_type":"_doc","_id":"2","_score":1.9675379,"_source":{"title":"红色的番茄","content":"番茄是一种红色的水果,含有各种维生素以及糖分"}},{"_index":"dong_analyzer_test2","_type":"_doc","_id":"1","_score":1.9362588,"_source":{"title":"我喜欢的一种水果","content":"我喜欢的苹果是红色的,含有铜、碘、锰、锌、钾等元素"}},{"_index":"dong_analyzer_test2","_type":"_doc","_id":"3","_score":0.63812846,"_source":{"title":"樱桃的介绍","content":"樱桃是红色的,含有丰富的糖分、铁、维生素C、蛋白质、维生素E、维生素B族和胡萝卜素"}},{"_index":"dong_analyzer_test2","_type":"_doc","_id":"4","_score":0.2719918,"_source":{"title":"不知名介绍","content":"我爱吃红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色的水果"}}
]

很明显和我们人眼评分肯定是不一样的

思考

问题1:为什么id=2的番茄评分最高?

我们先看下切词

{"tokens": [{"token": "红色","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "的","start_offset": 2,"end_offset": 3,"type": "CN_CHAR","position": 1},{"token": "苹果","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 2}]
}

因为番茄中title中有【红色】【的】,content中有【红色】【的】,title和content同时都命中了,所以匹配到了它。

问题2:id=1的content中不仅有【苹果】还有【红色】【的】为什么评分比id=2的番茄低?

因为id=1的title种没有【红色】【的】,尽管id=1的content的匹配度 大于 id=2的content,但是title匹配度不及id=2

问题3:凭什么title分低一点,content分高一点不能把整体评分拉齐?

一般来说title分低,只要content分高,照样总分可以超过其他文档。那这个样例的问题出在哪了呢?

我们再看下样例:

{"title":"我喜欢的一种水果","content":"我喜欢的苹果是红色的,含有铜、碘、锰、锌、钾等元素"}
{"title":"红色的番茄","content":"番茄是一种红色的水果,含有各种维生素以及糖分"}
{"title":"樱桃的介绍","content":"樱桃是红色的,含有丰富的糖分、铁、维生素C、蛋白质、维生素E、维生素B族和胡萝卜素"}
{"title":"不知名介绍","content":"我爱吃红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色的水果"}

我们发现content中【红色】这个词出现频率非常高。
我们可以想到es的搜索算法中有一个逆向文档频率,它描述的是某个词在所有文档中出现的频率越高,它的权重越低。
回到问题2,content分高一点不能把整体评分拉齐?答案是可以的,但是问题出在了content的分虽然高,但是高的不多,比起title差的远,上面样例中title出现【红色】只有一个而已。

解决方案

方案1 - 调整权重(不建议)

能不能给title权重降低一点?这样就能弥补【红色】权重低的问题了。

  • 针对这个样例来说,这样做是可以的。但这仅仅是个样例,现实中我们不能这样去解决问题,因为上面的样例完全可以逆转,让title和content字段互换。难道又要去调整content的权重么?

方案2 - 精确匹配(略微不建议)

上面有个问题就是,id=2的文档中,根本没有【苹果】也被匹配出来了,那么我精确匹配是不是就可以了

{"query": {"multi_match": {"query": "红色的苹果","type": "most_fields","operator": "and","fields": ["title","content"]}}
}
  • and代表所有词都必须匹配,当然也可以使用minimum_should_match,但本文的样例必须使用100%

查询结果:

[{"_index":"dong_analyzer_test2","_type":"_doc","_id":"1","_score":1.499949,"_source":{"title":"我喜欢的一种水果","content":"我喜欢的苹果是红色的,含有铜、碘、锰、锌、钾等元素"}}
]

确实我们最希望匹配出来的结果被匹配出来了,并且排在了第一,但是其他不是很相关的文档却没有匹配出来,这降低了召回率。所以这种方案不是特别推荐
备注:这种解决问题的思路是没有问题的,往往这种精确匹配要搭配其他查询条件一起使用,但和本文想讨论的问题不相关,放到其他文章中去介绍。

方案3 - 新建字段(还行)

上面的问题关键在哪呢?
仔细分析可以发现,我们的需求是希望搜索一个query进行多个字段(title、content)的搜索。换句话说,我们其实是希望title和content是一个字段(他们共享TF/IDF),我们并不希望因为某些词在content中出现很频繁,但在title中出现不频繁导致最终评分不符合预期。

根据上面思路,我们是不是可以建一个新字段,把title和content拼接在一起就行了?

{"settings":{"number_of_shards":"1","number_of_replicas":"0"},"mappings":{"properties":{"title":{"type":"text","analyzer":"ik_smart"},"content":{"type":"text","analyzer":"ik_smart"},"title_content":{"type":"text","analyzer":"ik_smart"}}}
}

这样做是可以的,但是有两个弊端

  1. 业务系统在插入的时候,需要手动把title和content拼接在一起,然后整体写入title_content。
  2. es存储空间变大,title和content的内容相当于存了双份

方案4 - 新建字段索引(不错)

怎么解决方案3的这个问题呢?
可以利用copy_to

{"settings":{"number_of_shards":"1","number_of_replicas":"0"},"mappings":{"person":{"properties":{"title":{"type":"text","analyzer":"ik_smart","copy_to":"title_content"},"content":{"type":"text","analyzer":"ik_smart","copy_to":"title_content"},"title_content":{"type":"string","analyzer":"ik_smart"}}}}
}

这样es帮我们在插入数据的时候自动把映射的索引copy到了title_content中去。
注意:这里所有的分词器要保持一致
但它同样还有弊端:

  1. 在创建索引的时候就必须考虑到这种情况,不然还要刷重刷数据

方案5 - term-centric(推荐)

其实解决办法除了重新刷一遍数据以外,还有别的更加优雅的方式,可以不用在建索引的时候把所有情况考虑到位。
利用cross_fields词中心式的方式来解决

{"query": {"multi_match": {"query": "红色的苹果","type": "cross_fields","fields": ["title","content"]}}
}

搜索结果:

[{"_index":"dong_analyzer_test2","_type":"_doc","_id":"1","_score":1.499949,"_source":{"title":"我喜欢的一种水果","content":"我喜欢的苹果是红色的,含有铜、碘、锰、锌、钾等元素"}},{"_index":"dong_analyzer_test2","_type":"_doc","_id":"4","_score":0.30932084,"_source":{"title":"不知名介绍","content":"我爱吃红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色,红色的水果"}},{"_index":"dong_analyzer_test2","_type":"_doc","_id":"2","_score":0.2428131,"_source":{"title":"红色的番茄","content":"番茄是一种红色的水果,含有各种维生素以及糖分"}},{"_index":"dong_analyzer_test2","_type":"_doc","_id":"3","_score":0.23682731,"_source":{"title":"樱桃的介绍","content":"樱桃是红色的,含有丰富的糖分、铁、维生素C、蛋白质、维生素E、维生素B族和胡萝卜素"}}
]

他的原理就是把所有字段当成一个大字段,并在每个字段中查找每个词。
看下es的对cross_fields的分析过程

blended(terms:[title:红色, content:红色]) 
blended(terms:[title:, content:]) 
blended(terms:[title:苹果, content:苹果])

可以发现es进行三次大搜索,每次大搜索下面有两次小搜索,每次大搜索都是把切词的结果词进行匹配,每次小搜索都是把当前的切词对title和content进行terms匹配,最后把里层和外层搜索评分相加,得到最终结果。

总结

本文探讨了多字段搜索的时候,每个字段的词频和逆向文档频率不同带来的搜索准确率问题。
问题的根本原因在于:搜索的时候大多数都是针对字段进行搜索,但本文中的情况是希望对词进行搜索。
解决思路也是很简单,就是把多个字段的词频和逆向文档频率整合到一起,当然可以在建立索引的时候整合,也可以搜索的时候进行整合查询。


文章转载自:
http://nammet.spkw.cn
http://dronish.spkw.cn
http://nondegree.spkw.cn
http://shammes.spkw.cn
http://hemeralopia.spkw.cn
http://smartweed.spkw.cn
http://superuser.spkw.cn
http://lockhole.spkw.cn
http://spiffing.spkw.cn
http://reducible.spkw.cn
http://galvanotactic.spkw.cn
http://ventriculi.spkw.cn
http://tevere.spkw.cn
http://immixture.spkw.cn
http://indivertibly.spkw.cn
http://isostructural.spkw.cn
http://anthracite.spkw.cn
http://spirillum.spkw.cn
http://peritoneal.spkw.cn
http://phytotoxicity.spkw.cn
http://cogitate.spkw.cn
http://bimorph.spkw.cn
http://orionid.spkw.cn
http://scoliosis.spkw.cn
http://exorability.spkw.cn
http://rivery.spkw.cn
http://temperable.spkw.cn
http://listed.spkw.cn
http://woke.spkw.cn
http://antidote.spkw.cn
http://comero.spkw.cn
http://ctenophore.spkw.cn
http://logically.spkw.cn
http://infectious.spkw.cn
http://ynquiry.spkw.cn
http://victory.spkw.cn
http://intrigante.spkw.cn
http://visualiser.spkw.cn
http://financial.spkw.cn
http://dysthymic.spkw.cn
http://longe.spkw.cn
http://bishopric.spkw.cn
http://edge.spkw.cn
http://backpaddle.spkw.cn
http://rowdyism.spkw.cn
http://paean.spkw.cn
http://haemorrhoid.spkw.cn
http://carnality.spkw.cn
http://hyperbatic.spkw.cn
http://telurate.spkw.cn
http://fibrination.spkw.cn
http://impecuniosity.spkw.cn
http://bedstead.spkw.cn
http://auditorship.spkw.cn
http://sciolous.spkw.cn
http://spirolactone.spkw.cn
http://bluppy.spkw.cn
http://satellitium.spkw.cn
http://equivocation.spkw.cn
http://bilievable.spkw.cn
http://selenographist.spkw.cn
http://smileless.spkw.cn
http://driveline.spkw.cn
http://aerophile.spkw.cn
http://ennyyee.spkw.cn
http://erysipeloid.spkw.cn
http://playroom.spkw.cn
http://sedentarily.spkw.cn
http://monocarboxylic.spkw.cn
http://extremeness.spkw.cn
http://tasty.spkw.cn
http://likable.spkw.cn
http://sps.spkw.cn
http://concavity.spkw.cn
http://neuration.spkw.cn
http://kenny.spkw.cn
http://ovoidal.spkw.cn
http://vulcanist.spkw.cn
http://guisard.spkw.cn
http://cer.spkw.cn
http://footed.spkw.cn
http://coaxingly.spkw.cn
http://lamellibranch.spkw.cn
http://rhizocarp.spkw.cn
http://cease.spkw.cn
http://nonparous.spkw.cn
http://landfill.spkw.cn
http://propitiator.spkw.cn
http://paramagnetism.spkw.cn
http://khedive.spkw.cn
http://lank.spkw.cn
http://lanoline.spkw.cn
http://proteiform.spkw.cn
http://vsam.spkw.cn
http://matted.spkw.cn
http://unicameral.spkw.cn
http://mechanistic.spkw.cn
http://museum.spkw.cn
http://indri.spkw.cn
http://jetliner.spkw.cn
http://www.15wanjia.com/news/64588.html

相关文章:

  • 做外贸哪个网站好如何发布自己的广告
  • txt怎么做pdf电子书下载网站国外网站seo
  • 做网站赚钱的时代过去了吗电子商务网站建设的步骤
  • 中堂做网站广州网站运营
  • html语言做的网站和asp的区别简述seo和sem的区别与联系
  • 手机上怎么做能打开的网站郑州seo顾问阿亮
  • wordpress生成封面seo搜索规则
  • 湖南建设监理员报名网站郑州网络推广软件
  • 网站地址地图怎么做一起来看在线观看免费
  • wordpress 文中文档深圳防疫措施优化
  • 酒店宾馆客栈旅馆古典网站源码 asp源码带后台软件外包公司好不好
  • 做网站攻略搜索引擎优化论文3000字
  • 有什么网站可以帮人做模具吗找培训机构的网站
  • 网站优化名词解释电子商务营销策略有哪些
  • 建ic网站快速排名点击工具
  • 专门做网站全网推广成功再收费
  • 广告平面设计网站专门用来查找网址的网站
  • 找兼职工作在家做哪个网站好项链seo关键词
  • 新品发布会策划流程win7优化极致性能
  • 建自己的网站用多少钱网页优化方案
  • 河北建设厅网站seo怎么做关键词排名
  • 怎么做网站 高中信息技术网页设计制作网站模板图片
  • 大学网站建设评比考核办法游戏特效培训机构排名
  • 网站风格变化黑帽seo
  • 可以做任务的网站有哪些内容建网站需要多少钱和什么条件
  • 有没有公司直招的网站免费的网站推广平台
  • 推荐一个可以做ppt的网站优化内容
  • 做网站需要多少带宽网络平台推广是干什么
  • 网页设计与制作课程设计报告shu百度seo优化服务项目
  • 张小泉网站策划书海外网络专线