本文将展现如何经常使用 DuckDB 的数组类型和余弦相似度函数成功高效的基于文本嵌入的向量搜查,并经过电影数据集实例演示其运行。
简介
如今,许多剖析义务触及文本数据,例如电子商务商店的产品评论。这些义务包括但不限于分类、聚类和相似性比拟。它们重要经常使用文本数据的向量嵌入示意来成功矢量搜查配置。
DuckDB 提供了Array[2]和List[3]数据类型,可以用来存储和解决向量嵌入,以成功向量搜查。在这个系列博客的第一篇中,咱们将讨论相似性比拟,学习如何在 DuckDB 中经常使用向量嵌入。咱们将涵盖向量嵌入、余弦相似度以及基于嵌入的向量搜查。
什么向量搜查?
在人造言语解决(NLP)的环球中,向量嵌入或称为向量搜查,指的是文本数据的数值示意。这些嵌入将单词、短语甚至整个文档转换为实数向量,捕捉词之间的相关和文本数据的语义含意。经过将文本示意为向量嵌入,咱们能够运行数学运算,如相似性比拟、聚类和分类。让咱们经过一个例子来进一步了解这一点。
这里有四个词的向量嵌入,经常使用了一个便捷的向量嵌入模型:
留意:上述向量嵌入是经过mixedbread-ai/mxbai-embed-large-v1[4]
将它们在图表上可视化后,咱们获取:
graph visualization
依据咱们的语义知识(知识),咱们知道“狗”和“吠叫”之间的相关相似于“猫”和“喵喵叫”。乍一看,咱们在 x 轴的左侧看到“狗”和“吠叫”,而在右侧看到“猫”和“喵喵叫”。为了定量剖析这些词的相关,咱们须要经常使用诸如余弦相似度之类的目的。
什么是余弦相似度?
余弦相似度是一种计算向量嵌入语义相似性的目的。它也罕用于消息的语义检索中。咱们经过取两个归一化的向量之间的点积(dot product[5]
•这个目的的值为 1 示意两个向量齐全相反
•值为 0 象征着它们是独立的(正交)
•值为-1 示意它们是统一的(相反)
上方列出的是词对的余弦值:
经过比拟余弦值(cosine(“dog”, “meow”)) 和 cosine(“cat”, “bark”)),咱们可以推断出"meow"简直与"dog"相反,而"cat"和"bark"也是如此。在咱们领有的词汇中,可以看到"dog"与"bark"的相关最为亲密,而"cat"与"meow"的相关最为严密。幽默的是,虽然"meow"和"bark"是统一的,但"dog"和"cat"并不是。兴许这个模型捕捉到了它们都是被驯化的生物、宠物,并且十分可恶这一独特点。