Embedding技术的两个小应用:鲁迅全集检索 & 新闻早报聚类

向量数据库NoSQL数据库关系型数据库

笔者在上篇文章中介绍了BGE,一个中文领域的通用embedding模型。本文则旨在介绍embedding技术的常见应用。

具体而言 , 笔者基于BGE搭建了 两个应 用: 其一是 鲁迅全集检索 ,将鲁迅全集解析后导入向量引擎,以进行语义搜索 -- 例如 查询鲁迅关于“内卷与躺平“的看法 ; 另一个是 新闻早报聚类 ,将 新闻进行embedding表征,使用聚类算法, 聚合那些相同、相关的新闻 ,以方便阅读。

本文相关代码:

https://github.com/duanyu/embedding\_application

搜索

搜索是text embedding最常见的使用场景之一。

其实现步骤如下:

  1. 提前计算document embedding,并存储在向量数据库之中(如Milvus[1]);
  2. 在检索时,计算query embedding,调用向量数据库进行向量检索,返回Top-K数据,通常来说排序metric为 cosine(query emb, doc emb)

与文本搜索系统(如ElasticSearch等)不同,基于embedding的搜索系统是一种 语义搜索 -- 即使query与doc没有很多重合词,但只要其语义接近,也能够被检索出来。

应用:鲁迅全集检索

笔者以鲁迅全集[2]数据为例,在passage粒度上(使用换行符进行分割)构建了向量引擎。

具体的环境和配置如下:

  1. 机器:Modelscope上的免费GPU机器(共100h免费时长)[3]
  2. 向量数据库:Milvus
  • embedding索引设置: FLAT(数据量小,直接用FLAT即可)
  • metric_type: Inner Product(已对embdedding进行归一化,此时等同于cosine)
  • 向量模型:bge-large-zh-v1.5[4],emb维度为 1024,推理时大约需2G显存
  • 由于BGE采取了instruction-tuning技术,在执行检索时,需在query前拼接instruction - 为这个句子生成表示以用于检索相关文章:

构建好了向量引擎,便能执行检索了。以下是笔者的检索结果示例:

query:男女平等问题

picture.image

query:内卷与躺平

picture.image

query:如何教育孩子

picture.image

从上述例子可以看出,BGE的检索效果还不错。 掉书袋因此可以成为一件很轻松的事情:)

聚类

text embedding的另一个应用,是聚类。

所谓聚类,是将语义相似的内容,聚合在一起。

聚类的实现步骤如下:

  1. 计算待聚类的文本的embedding;
  2. 使用clustering算法(如KMeans、DBSCAN等),基于文本embedding进行聚类。

应用:新闻早报聚类

许多自媒体有日报栏目,这些日报的内容存在一部分交叉、相关的内容。

一个自然的疑问是: 能否将相同、相关的新闻聚合在一起,以方便阅读? 这是一个天然的聚类问题。

为展开实验,笔者选取12.11号, 36kr、腾讯科技和创业邦 的早报,提取了新闻的(title, passage),使用DBSCAN聚类算法展开实验。

机器配置和embedding模型与前文一致,此处不再赘述。其余配置如下:

  1. 新闻表征方法 :将title embedding作为新闻表征
  2. 聚类算法 :DBSCAN
  • metric :cosine distance

  • 算法参数 :eps = 0.3 - 0.45(指一个cluster中,两个样本的距离上限),min_samples=2(指一个cluster的最小样本数)

原公众号链接如下:

36kr:https://mp.weixin.qq.com/s/bz8hnmaX6tdbrmADELbrzQ

腾讯科技:https://mp.weixin.qq.com/s/wvwIBrN6hczhiMIicK0SnA

创业邦:https://mp.weixin.qq.com/s/Gn6NZ9UtTF6Qy2SCOFf-KA

聚类结果如下:

当eps = 0.45时

picture.image

picture.image

  • 可以发现,eps相对较大(0.45)时,聚类的相关性容忍度更高 。小米汽车和比亚迪的新闻会聚合在一起;X与亚马逊合作、马斯克招募openai首席科学家、openai“内幕”新闻均会被聚合在一起。

当eps=0.4时

picture.image

picture.image

picture.image

  • 当eps降低到0.4时,前面提到的 相关新闻大多会被分开 ,只有相关性较高的(如openai“内幕”新闻 与 马斯克招募openai首席科学家的新闻)才会聚合在一起。

当eps=0.3时

picture.image

picture.image

picture.image

  • 将eps进一步降低到0.3,那么只会把 相同 的新闻聚合在一起了。

因此,如果只想要“去重”,那么选择 较小的eps ;如果想要聚合更多相关的新闻,那么选择 稍大的eps

总结

本文通过两个简单而直观的应用,初步介绍了embedding技术的应用方式,希望加深读者对于embedding技术的理解。

本文相关代码如下,欢迎读者朋友基于此展开更多有趣的实验~

https://github.com/duanyu/embedding\_application

关注笔者

笔者将定期分享NLP技术与应用方面的知识,欢迎关注:)

参考资料

[1] Milvus: https://milvus.io/

[2] 鲁迅全集git: https://github.com/Ac-heron/luxun

[3] Modelscope免费GPU: https://modelscope.cn/my/mynotebook/preset

[4] bge模型地址(ms版): https://modelscope.cn/models/Xorbits/bge-large-zh-v1.5/summary

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论