Skip to content

为什么要关闭调频以及与之关联的措施有哪些

amzxyz edited this page Jan 16, 2025 · 5 revisions

调频的危害:

调频会导致词序改变,从而导致组词出现异常

举例:

单字词频排序: 按 暗 安

词组中: 合同、 页面

此时如果不调频我就永远可以打出来:“按合同”、“按页面”

如果调频,假设我输入了一次:暗,此时再去输入就变成了:暗合同 暗页面,这显然不是你想要的;

有的人说了我把这些组合放进词库里不就解决了?

这话没错,那么你的词库得多大?能不能穷尽?

同时扰乱整句输入的体验,调频久了如果没有模型加持将是一团乱麻。

词库应该放什么词:

由上面引出的这个问题词库放什么样子的词汇才是恰当的?要解决这个问题应该先解决词频的排序问题,这是一个非常大的命题

还用这三个字举例:“按 暗 安” 从出现次数来看“安”字的更多,那么我们是不是要把“安”放在前面?

这是极大的错误,现在应该统计单字在词库中的性质。我们知道单字的输入应当以单独出现的可能性为基准统计,分为“头”“尾”“中间结构”,应当认为放大这些字的词频。以两字的组合为基础进语料分词统计,会发现安字虽多但都是以词汇的形式出现的,我们很少去单独输入,如果以三个字的词组进语料会发现安字打头的很少,因此安字无论如何都不应该放在第一位。此时我们回想一下an这个音下面的句中结构发现

按 xxx 俺 xxx

这两个字在句中打头,所以把它两排序在前面是毋庸置疑的,谁排第一,去统计三个字分词中,谁出现在的概率最高,这个例子按应当排序在前面

此时大量的 按合同 按要求 按需求 按种类等等的词汇就可以与二字词汇的最高频进行组合,换句话说词库中就没必要整理这些词组了,尽管他们看起来让你感到那么熟悉

因此词库中应该存放非高频词组的组合,高频首选由他们自由组合起来,这会大大的节省空间,提升效率 当初我各处收集的词库有300万行,但在最终完善的算法后我删除了120万行,其中大量占用空间的是高频二字词汇组成的四个字的组合:人工 服务,学习 进步,简直是不胜枚举加声调后的词库大小能干掉一大半20多兆。

如果你开启了调频,势必要一个300万精品词库才能把这日常一一列举,很显然如果不调频储存60%,那么调频储存的就是100%,我这里讲的也仅仅是2-4个字长度的穷举

语法模型的正确认识

上面的词库靠人统计是很难的,通过大量多方面的语料进行智能化分词发现新的组合,最后依靠ngram工具计算概率,最后形成的100M可容纳1000万行的数据库它实际上就是对词库的一种补充,在命中时将强制替换错误的组合,还是刚刚的例子如果你打出来的是“暗合同”,如果模型中包含 按合同且最高频就会帮你纠正为“按合同”,因此模型就是词库的补充,模型记录的是句子的连续性

模型不是万能我们应该怎么做

这正是万象词库要长期做的事情

1、修正和正确合理的调整1和2字词汇的顺序

2、对于三个字词汇尽可能的穷举高频组合,为了平衡不用模型时候的体验,三个字的结构词是应收尽收

3、算法删除所有由2+2高频词组成的四个字的词汇,对重要的低频之间组成的词汇评估后加入词库

4、模型重点维护三个字到四个字之间的顺滑特性词 我这里有个例子

一个有

一个没有

一个又一个

一个有一个没有

按照字数层层递进

顺滑的组合是没有穷尽的,最终解可能还是更好的本地语言模型,而不是简单的命中逻辑替换逻辑

5、通过配置方案主要场景不调频,万象内置了ac造词功能,他是在有需要的时候引导写入用户词库,模型会干预第一候选,双翻译器会在第二候选展示词库不带模型的组合结果,如果此时你上屏了次选他也将被记录下来,实现了按需造词,私有词汇这样处理。

如果是公共词汇缺失你还可以提issue我会加入词库 整个词汇量加上模型应该说各种场景基本可以应对,如果有不刁钻的句子或者词组打不出来发出来我们一起想办法处理