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