前几天在公众号上看到一篇安利 ternlight 的文章,这是一个 7MB 大小的 Embedding 引擎。采用的是(-1/0/+1)三值权重且推理只有加减法。还能直接在浏览器上运行。
公众号文章的例子是这样写的:
// 两句话的语义相似度
cosineSim(embed(‘我忘了密码’), embed(‘如何重置密码’));
// → 0.88(非常高)
// 在一堆文档里找最相关的
similar(‘我想退款’, [
‘退款流程:如何把钱拿回来’,
‘查看物流状态’,
‘修改收货地址’,
]);
// → 第一个结果相似度 0.70
我看这效果确实蛮不错,就先记下来了,想着以后一些数据是不是可以用到。今晚研究了一下发现并不是这么一回事。这个模型是基于纯英文语料训练的,Tokenizer 也没有覆盖太多中文字符。
复测了下文章中的两个例子,结果也是完全对不上。但我找到了 0.88 和 0.70 的来源。原来作者把 README 中的例子直接给汉化了。
裤子都脱了,还是继续玩一下吧。我让 AI 生成了40句横跨多种语境的中文短句,并用 ternlight 计算全配对的相似度,观察一下分布。
结果是这样的,有将近 80% 的组合相似度都大于 0.5,最相似的一对是「红烧肉的关键在于冰糖炒出焦糖色」和「洗衣机甩干的时候发出奇怪的响声」达到了 0.9919 分。
我还让 Hermes 找些真实中文语料去匹配一下「黄龙江一派全都带蓝牙」,结果如上条微博所说,他直接去匹配我动物园的群聊消息。结果如下:
「这样宽的江到处都是啊」0.9374
「阳江的刀具都很棒」0.9325
「最近买的菜刀餐刀都是阳江的」0.9071
不对劲,好像匹配上的都是包含“江”字的句子。于是往下研究,原来这个字是包含在 bert-base-uncased 词表里面的。