2022-09-12

11 篇热帖

1. 鸿雁输入法——整句输入法中一颗冉冉升起的新星

鸿雁输入法经过重大升级,在整句输入上做到物理上的极致优化。

首先是语料库的升级。目前的语料库有 150GB ,包含 702 亿个字符,有效汉字字符 380 亿个。

其中: epubee 整站电子书 5.3 万本,65.6GB 全网能找到的所有微博语料,38.6GB 百度百科 500 多万条,15.6GB 中文维基百科全部条目,10.1GB 各类新闻语料,12.6GB 微信公众号语料,2.9GB 联合国平行语料库中文部分,1.4GB 1946 年-2003 年人民日报全部数据纯文本,3.1GB

腾讯的自然语言处理研究开源了一个大规模中文词向量: 提供在 300 亿词的语料上训练的、包含 8 百万词汇的中文词向量数据,向量维度为 200 维。

以腾讯的大规模中文词向量作为比较:

腾讯的大规模中文词向量是在 300 亿词的语料上训练的;鸿雁输入法的语料包含 702 亿个字符,有效汉字字符 380 亿个。 腾讯的大规模中文词向量包含 8 百万词汇(最新版是 1200 万);鸿雁输入法包含的词汇量是 2471 万,而且这个数量刚好位于有序与无序的临界点。也就是超过 2471 万的词汇量对词语的质量没有太大提升,反而会浪费储存空间。 腾讯的大规模中文词向量依赖于结巴分词这样的分词软件,会出现分词不完全的情况;鸿雁输入法的分词采用的是机械分词,不会遗漏任何一个可能的词汇,并且从 2-16 个长度的词语全部进行统计。 腾讯的大规模中文词向量语料如果猜测的没错的话,主要是来源于网页抓取;鸿雁输入法同样大部分也是来源于网页抓取,不过数量更加庞大,选择的语料库是经过精心挑选的,具备典型性。

腾讯的大规模中文词向量底层采用 word2vec 技术,将分析的词语赋予一个多维空间的向量,依据向量的空间距离可以获得不同词语的相似度;

image

近距离语义分析,只有在切换输入法的情景才会有效,腾讯的语料库嵌入数据集,1200 万的词条解压后,100 维的版本有 12GB ,200 维的版本有 22GB ,占用空间太大。而且需要相对复杂的余弦相似度运算。 如果要把腾讯的大规模中文词向量用于输入法,还需要调整算法,对一个已知词语的前面和后面的词语进行关联概率统计,概率模型是马尔可夫链。

鸿雁输入法基于词频统计的最大概率排序,同样可以对千万级的词汇进行统计。如果把 2-4 个字的词语前后组合排列,就构成一个更大的词语。在不考虑中文语法规则得情况下,把一个句子当作一个词语,和词语一样,按照语料库的出现概率大小进行排序,同样可以实现整句输入的效果。只要保证足够大、足够全面的语料样本,语句按照词语分割后,按照所有分词组合对应的概率排序,就可以获得质量相当高的整句输入法。鸿雁输入法在语料库分析的时候,最大的词语长度是 16 ,这个长度已经足以覆盖绝大部分中文语句的使用场合。

下图是不同长度的词语出现的数量横向对比图

image

根据上图可以看出,中文词语在超过 8 个字的长度,比例大幅减少。中文词语的长度主要集中在 2-6 个字。

在对 702 亿个字符的语料库统计后,获得 70 亿个词语的数据,约为 63GB 。

下面就面临一个高频词语的选择问题。

一个输入法包含 70 亿个数据,显然这个数据过于庞大。

如果选择的高频词语数量过少,那么输入法的词语准确率就会偏低。 如果选择的高频词语数量太大,因为各种原因产生的错误的词语就会增多。

选择高频词,需要兼顾数据储存空间的效率和语义复杂度的涵盖率。

有一个简单的办法:

1.把 702 亿个字符的语料库分割成 791 个区块,统计出现同一个词语的区块数量。区块数是 1-791 ,而最常见的词语数量数以亿计,最罕见的词语数量只有 1 。使用区块数代替词语数量数,可以将数值缩小在一个相对均匀的范围内。

2.把区块数目相同的词语看作一个集合,并统计这个集合的词语数量,这样就得到一个类似于直方图的统计图

3.得到图像显示,在这种方式下的词频关系图并不是完全和长尾效应完全一致的,而是一种泊松分布和指数增长的结合体。这在 2 个字的词语统计分布图中尤为明显。随着词语长度的增加,高频词的出现次数和比例大幅度减小,低频词的出现次数和比例随着词语的长度增加而大幅增长。相对高频的词语位于这个与长尾效应类似的曲线尾部和中部。

1 单个字

image

2 个字的词语

image

3 个字的词语

image

4 个字的词语

image

5 个字的词语

image

6 个字的词语

image

7 个字的词语

image

4.以区块数量的某一数值作为边界,对 70 亿个词语进行数据缩减,只保留相对高频的词语。大部分图像显示为长尾图,横轴代表区块数量,竖轴代表同一区块数量对应的词语数量。横轴越小,斜率越大,说明因为词语对应字的排列组合导致无序效应在罕见的词语中越来越明显。为了覆盖足够高的语义复杂度,只需要计算曲线斜率最大值按照一定比例缩小后对应的点,就是无序与有序的临界点。 临界点的斜率是曲线最大斜率的固定比例的关系,如果选择比较合适的临界点处,语义复杂度正在增长,还没到无序到不受控制的增长程度。 临界点选择,使用暴力穷举法,试用不同的比例参数,可以看到,在选择某个参数附近后,分割获得的高频词语数量增长趋于稳定。这个参数就是理想的分割参数。

下图显示通过实验获得的理想参数下的临界点位置:

1 单个字

image

2 个字的词语

image

3 个字的词语

image

4 个字的词语

image

5 个字的词语

image

6 个字的词语

image

7 个字的词语

image

15 个字的词语

image

16 个字的词语

image

使用临界算法初步获得约为 2400 万的词语。

image

加入其他高权词库,合计 2471 万。

这个数量级别的词库,到底整句输入法准确率怎么样呢?

上图

image

使用搜狗拼音,同样可以打出正确的语句。

值得注意的是,搜狗输入法是经过高度算法优化的,一定包含中文语法逻辑。 而鸿雁输入法仅仅是采用 rime 输入法的整句引擎和 1-16 个字长度的词语概率统计。rime 输入法的整句引擎的算法没有仔细看,应该是基于拼音不同拆分,对应的语句组合相应的概率进行优先级排序。

对于底层细节的了解,作者就没有进行更多的整句测试。有兴趣的可以打开中央电视台,按照电视台播音打出语句,测试准确度怎么样。

包含 2471 万词语的鸿雁输入法并没有采用中文语法算法的引擎,仅仅依靠庞大的词语频率统计,在整句输入功能上已经和搜狗输入法不相上下(这只是个人的看法,是否真实需要广大网友的验证)。

在鸿雁输入法之前的描述,可以得知,鸿雁输入法自带的单字拼音库,是目前互联网上公开的最为准确的拼音库。 原来词语的拼音采用暴力穷举的方法,正确的拼音一定有,但是还存在大量的字的拼音是正确的,词语的拼音确是错误的情况。最近,使用现代汉语词典的数据对词语拼音大幅优化,这种情况大大改善。

同时优化了国家拼音标准移植到 rime 输入法后存在的缺陷。

更改特殊拼音

㕶    n ng  呒    fu m  呣    m mou  哏    gen hen n  哼    heng hng  哽    geng ng ying  唔    m n ng wu  嗯    n ng  嘸    fu m wu  噷    hen hm xin  姆    m mu

n    -->    en m    -->    mu hng    -->    heng ng    -->    en hm    -->    hen

在单个字的拼音存在多个声母后,使用 rime 输入法相关的拼音输入会出现优先级被这些特殊的拼音占用的情况。

在从底层消除这些特殊的拼音后,这种情况将彻底消失。

以前输入 ng ,“那个”这样的词语将不会出现在候选列表,除非输入“nge”或者其他组合。 “n”“m”作为拼音的首字母输入的时候,以前不能显示“你”“们”这样的词语,现在这种情况将不复存在。

鸿雁输入法同时优化了 rime 输入法另外一个缺陷。

rime 输入法有两个拼音输入引擎,一个是基于词语的,另外一个是基于语句的。

词语引擎不能支持整句输入,整句输入引擎使用空格作为分词的按键,这个设计并不合理。 一般用户都习惯使用空格键作为上屏的按键,因为这个按键尺寸最大,而且可以说是跟手距离最近的按键。使用空格分词对词语输入转确率提升不大,使用空格上屏需要按两次,这会影响输入舒适度的设计。一般拼音分词,如果前面的词语出现错误,可以使用 TAB 键或者退格键进行词语重新选择。

稍微修改了一些 rime 输入法的源代码,空格键去除分词功能,改为上屏键。

鸿雁输入法包含五笔、全拼、双拼方案。理论上五笔方案应该重码率更低,也支持整句输入,输入体验更为流畅,作者不懂五笔,有待广大网友的测试。

下图是搜狗输入法和鸿雁输入法语义复杂度的对比,以拼音“jidong”为例:

image

image

搜狗输入法仅有 14 个候选词语;鸿雁输入法有 83 个候选词语。

这只是随机抽取的词语,如果遇到罕见的拼音,那么一定会出现搜狗输入法不能打出的拼音,而鸿雁输入法可以打出的词语。

候选词语数量,上面的例子约为六倍,候选词语倍数是十倍,二十倍的应该是存在的。

输入安装包仅仅包含 262 万的一个轻量版的词语,这是因为 windows 平台的 rime 输入法支持最大数据量有限,超过一定数据量将无法生成索引。 在 linux 平台可以成功生成 2471 万的索引,这个索引拿到 windows 平台和安卓平台都可以使用。

用户需要注意,如果轻量级的词库不能满足实际输入中的准确度需求,需要安装另外一个“预编译词库索引(拼音、五笔)_2471 万词语增强包”。

在 linux 平台生成词库索引需要 22.2GB 的内存

image

输入法安装包自带 262 万轻量级词库生成的词库索引

image

安装“预编译词库索引(拼音、五笔)_2471 万词语增强包”后的词库索引

image

可以看到词库索引从 80 多兆上升到 800 多兆

希望鸿雁输入法能够成为文字工作者、学生、老师、社会各界人士常用的输入法软件。

以上,从技术细节和理论上说明了鸿雁输入法更懂中文,具体实际使用中的体验是否能够达到预期,还需要广大网友的亲身体验。

下载链接:

https://hong-yan.lanzouw.com/b00vvkivc 密码:1234

2. macOS, Linux , Windows 个人使用感觉
我有个问题想问下大家,目前在用 macos ,然后个人使用上感觉(目前电脑内存 16G ),在内存占用大的时候,macos 和 linux 下可以说是不卡不影响使用,但在 Windows 下直接卡的我都认不出这是我电脑了,请问是什么情况呀 xdm ?(勿喷哈,只是个人感觉而已而已)
3. 无聊撸了点检测代理的代码,主要是通过握手时间判断的,来试试?

链接在这里

http 、socks 、vmess 自测都能检测到,也发现似乎不同工具的实现方法还有些不同。

客户端和代理之前的延迟比较低的情况,大概率发现不了。

4. 你手里的苹果设备数量?
  • 2018 年 官网购买 1 台苹果笔记本,定制 16G 内存,14000 多;
  • 2019 年 官网购买 1 台平板+pencil+键盘,10000 多;
  • 2020 年 官网购买 1 台 iphone12p 9000 多;
  • 2020 年 官网购买 1 块 apple watch 3000 多;
  • 2021 年 官网 mnu 台 iphone13p 不到 9000;

一个一个买没觉得,总算下来还是花了不少。 买的设备都还在用,对 ipad pro 最有感情,考信息系统项目管理师记的笔记全在上面(用的 notability)。虽说用纸和笔可能只花不到 10 元钱,但有电子存档可以让我时常温故而知新(自我安慰:P )。

一直对苹果售后客服比较满意,笔记本过保后键盘坏了,联系天才吧技术专家,协调到线下店免费修过一次,换了新的键盘,好像顺带把电池也换新了。

5. watch s5 有必要换 s8 吗?

s5 发售开始戴到现在,除了续航短,好像也没啥不满意的地方。 大家觉着有换 s8 的必要吗?

6. 具备阅读长文能力的重要性

首先来做两个测验,注意长句和短句的区别:

Ⅰ.文学语言应当尽量使用浅显易懂的语言进行表达,一部作品的伟大之处在于作者的思想而不在于华丽的辞藻和繁复的修辞。

Ⅱ. 文学语言应当尽量浅显,尽量易懂,作品因作者思想而伟大,而不在于辞藻和修辞。

可以看得出第一句阅读障碍大于第二句,接下来我再举一个长文与短文的例子。

Ⅰ.卢梭相信,一个理想的社会建立于人与人之间而非人与 goverment 之间的契约关系。与约翰·洛克一样,卢梭认为 goverment 的权力来自被统治者的认可。卢梭声称,一个完美的社会是为人民的“公共意志”所控制的,虽然他没有定义如何达成这个目标,但他建议由公民团体组成的代议机构作为立法者,通过讨论来产生公共意志。 社会契约论的主要表述是探究是否存在合法的 politics 权威,“人是生而自由的,但却无往不在枷锁之中”。他所说的 politics 权威在我们的自然状态中并不存在,所以我们需要一个社会契约。在社会契约中,每个人都放弃天然自由,而获取契约自由;在参与政治的过程中,只有每个人同等地放弃全部天然自由,转让给整个集体,人类才能得到平等的契约自由。(来自维基百科)

Ⅱ.卢梭相信,一个理想的社会,建立于人与人之间,而非人与 goverment 之间的契约关系。

与约翰·洛克一样,卢梭认为,goverment 的权力来自,被统治者的认可。

卢梭声称,一个完美的社会,是为人民的“公共意志”所控制的,虽然他没有定义,如何达成这个目标。

但他建议,由公民团体组成的代议机构,作为立法者,通过讨论,来产生公共意志。

请读完后回答两个问题:

一、在第一个例子中,是否感觉到第二句比第一句更加容易理解? 二、在第二个例子中,读完第一句后再读第二句,是否开始觉得可以理解了。

如果你的答案是两个“是”,那么说明接受测验者不具备阅读长文的能力,尤其是在阅读科研论文上,可能会倍觉痛苦。那么产生这种问题的原因是什么呢?我认为,首先是内心浮躁,因为这些文字如果拆开成短句,被按照句意进行划分,就如同小学生用手指指着书本才能阅读一样。

这很好的解释了,为什么很多 V2er 根本不看帖子内容就开始回复,只输出情绪而不输出任何有意义的论证和观点。因为他们并不在乎作者想表达什么,只想宣泄情绪,所以只看标题就开始谩骂,或者甩下几个不负责任的汉字就继续带着情绪浏览其他帖子,直到整个论坛变得乌烟瘴气为止。

7. Natter: 在 NAT1 下开放公网 TCP 端口

Natter

GitHub: https://github.com/MikeWang000000/Natter


目前公网 IP 越来越稀缺,有些地区已经无法申请公网 IP 了。
不过,在 NAT 1 网络下,我们可以通过一种 “打洞” 的方式,将本地的 TCP 端口暴露至公网上,运行 HTTP 服务等。
经过一番研究,我使用 Python 写了一个工具,起名叫 Natter 。

简洁地说,Natter 的原理就是端口重用:

  1. 由本地端口 A 向外发起 TCP 长连接,维持 NAT 端口映射关系;
  2. 同时监听端口 A ,对外提供服务。

Natter 应当运行于路由器上,因为这样只经过一层 NAT 。不过,正确设置 DMZ 主机,经过多层 NAT 也是 OK 的。

好消息是国内运营商级 NAT 多数已经转为 NAT 1 了,因此开放公网 TCP 端口应该是比较容易的。
目前我在中国移动的家庭宽带上已经成功使用 Natter 开放公网 TCP 端口。

8. 人为什么害怕关系的缺失?

都 2202 年了,程序员都用上 nosql 了,为什么还有无数人沉迷于所谓的人脉、人际关系里不能自拔?

9. 苹果开始拒绝刷线下库存接口的请求

如题。这两天一直在刷线下直营店库存接口,想抢 14pro ,刷到过几次但是都没抢到。感谢大佬的“apple-store-helper”项目。但是下午好像开始全部请求 4xx or 5xx 。

现在是使用代理勉强运行,依然会经常 503 。

不知道有没有朋友遇到同样的问题、

10. 有人存身份证号时丢掉最后一位吗
最后一位校验位去掉,剩下的部分按数字存 int64 理论上没问题,有人考虑这么干吗
11. 还是 iPhone 背部好看,跟 Mate 50 比,你觉得呢?

还是 iPhone 背部好看,有人觉得 Mate 50 背部摄像头太丑了吗? meta50

iphone14