例如在 Google 中输入:Java
google 会生成: javascript, java binary search, java 教程等一些列。
这些生成算法应该使用哪些?
1
optional 2022-10-21 10:08:36 +08:00 via iPhone
ML 的经典场景
|
3
XJohn 2022-10-21 10:15:13 +08:00
一般都不是算法生成的。
suggest 数据都会有以下一些来源: 1. 搜索数据本身的一些 title 、tag 属性等 2. 用户的搜索词(如用户可能会搜索 java ,还可能会搜索 javascript) 3. 爬虫抓取 |
5
realrojeralone 2022-10-21 10:35:52 +08:00
最简单的直接基于 Trie 做,query 的权重要加到 TrieNode 里,Trie 树里召回一堆词以后再加入一些提前处理好的非前缀词,比如和召回 query 强相关的中缀、后缀,最后排序
|
6
Braisdom OP @realrojeralone 序列的权重怎么处理呢,例如:java orm 后面的词,单个词的权重容易计算,序列就比较麻烦了。
|
7
optional 2022-10-21 10:38:32 +08:00 via iPhone
如果只是前缀匹配,那非常简单,像楼上说的 trie 树或者直接数据库前缀匹配都可以获得一些推荐,难的是怎么做权重和关联性
|
9
MindMindMax 2022-10-21 10:42:37 +08:00
其实,搜索运营人员也会参与进来
|
11
realrojeralone 2022-10-21 10:44:52 +08:00
@Braisdom 没有序列的概念,每个 suggestion 都是整体,比如 "javascript" / "java orm",在数据挖掘时 "java orm" 是从日志中挖掘出的用户 query ,如果很多人搜了 "java orm",这个 query 的权重就比较高。虽然在搜索时引擎内部会分词做召回,但是实际上用户想搜索的是个整体 "java orm",所以这个 query 就是个 suggestion ,不需要再分词单独计算权重。
|
12
Braisdom OP 我在做一个类似 ThoughtSpot 的项目,目前核心的 SQL 编译已经解决了,就差搜索提醒和 UI 了。
|
13
realrojeralone 2022-10-21 10:47:07 +08:00
没有性能要求,对效果要求也不高,可以直接上 ES ,不然没必要自研,还是挺麻烦的
|
14
Braisdom OP @realrojeralone 搜索日志,只能优化排序,原生的搜索词生成是基于系统的关键字检索出来的,系统在冷启动时,排序可以是随机的,随着使用情况,逐步优化。当然也可以初始化一些排序。
|
15
shoumu 2022-10-21 10:50:30 +08:00
|
16
Braisdom OP @realrojeralone 最关键是能够持续学习,随着持续的使用,能够学习到用户的使用习惯。
|
17
realrojeralone 2022-10-21 11:06:02 +08:00
@Braisdom 听起来不是搜索引擎类产品,那就可以先人工运维一版初始的 query 和权重,后续有了搜索日志以后再优化,或者考虑其他不用 Trie 的实现,完全用算法 比如 n-gram 生成 suggestion
|
18
buyan3303 2022-10-21 11:12:08 +08:00
不懂的人提一嘴 搜索关联展现这东西,好像是叫倒排索引。
至于怎么展现 就是上面各位坛友说的了。 |
19
Braisdom OP @realrojeralone 我想做的是根据用户输入的关键词编译成不同数据库的 SQL ,进行数据分析,和搜索引擎不太一样,但搜索提醒是用户体验的关键,这块做不好,后面再强大,也没啥用。
|
20
fcten 2022-10-21 11:38:40 +08:00
trie 树召回,召回之后再排序。没必要把召回和排序放到一起,不利于后续迭代优化。
|
21
Braisdom OP |
22
joApioVVx4M4X6Rf 2022-10-21 14:51:54 +08:00
老哥你的搜索引擎已经快做完了吗?关注你好久了
|
23
Braisdom OP 还是搜索引擎,但返回的结果不一样了,今年年底前上线第一个版本。必须上线
|
24
Braisdom OP 目前,最复杂的 SQL 编译已经完美的解决了,在学习 React 写前端。
|
25
LookLookBigDick 2022-10-21 15:51:43 +08:00
方案是怎么样的啊 能够说一下吗?
|
26
Braisdom OP @LookLookBigDick 你是指什么方案,SQL 编译,还是搜索词提醒的方案?
|
27
simonlu9 2022-10-22 00:10:06 +08:00
elasticearch,的 suggest 可以根据上下文来推荐搜索推荐词,要定时更新对应的热度,不是一直不变的
|
28
Braisdom OP @simonlu9 我准备用 ArrangoDB 做,就做前缀匹配,排序是综合排序,后面再用机器学习生成,
https://github.com/jermp/autocomplete 这个项目可以用,只要把搜索日志给他就可以了。 |
29
LookLookBigDick 2022-10-22 18:12:24 +08:00
搜索词提醒方案,最终有确定有用方式去实现吗,我想虚心学习一下,因为自己没有思路。
|