目前分词性能比较差,只有1.65M/s,同事在没有改变主要算法的情况下做了一点优化调整,到3.52M/s,但对性能的提升仍然不够明显。我感觉亟须解决几个问题:
1.search时keyword分词也按多种粒度进行,然后分别sloppyphrase,最后or起来,由于大粒度分的词词频低,因此idf大,它们在排序时优先级更高,符合期望。现在只做一个粒度的切法,又要求在索引里面都能找到,感觉不太现实。改动之后的做法对索引时分词没有苛求,相对来说增加的开销也不会很大,可能就三个粒度的分词,只是如果排序没有考虑的话需要更高一些排序的做法。查全率、召回率都会更高。这样索引分词就专注在按不同粒度切好词即可,不用在切完之后再考虑合并之类复杂奇怪的逻辑,可以追求更高的性能。
2.统一使用trie树(或fst)做检索,trie树也可以定时更新,杜绝用hash做前缀查询,trie树相当于状态机性能更好。
3.建立性能、准确率、召回率的指标,目前算法比较复杂,如果有其他算法综合起来更优,可以替换。
4.目前increment gap没有考虑,不够严谨,可能会出错。
关于目前分词的想法
时间: 2024-11-09 00:35:11