美文网首页人工智能AI
基于向量数据库的推荐系统

基于向量数据库的推荐系统

作者: 梅西爱骑车 | 来源:发表于2023-12-09 11:52 被阅读0次

    向量数据库( VectorDB)专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、自然语言处理等 AI 领域。鹅厂的云向量数据库可以实现数据写入/检索自动向量化,对齐传统数据库的使用体验,用户无需关注向量生成过程,极大降低使用门槛。

    可以使用Python或者java版本的SDK/API创建向量数据库,本文为了方便演示使用完成相关操作。

    一、新建数据库

    略。。。

    二、创建数据库下的集合

    在向量数据库中,集合是指一组文档组,类似于关系型数据库中的表,其中可包含多条文档数据。集合没有固定的结构,可以插入不同格式和类型的数据。向量数据库支持集合维度的多分片、多副本特性,可以在创建集合时按需指定分片数和副本数。
    注意开启“Embedding”嵌入即向量化,token化,使大语言模型对原始数据处理的关键一环,才能进行后续处理。


    新建集合

    其余配置参数如图:
    vector使用HNSW,其他的索引类型参考官方文档。


    desc启用向量化

    三、向集合插入数据

    使用如下json插入几条数据:

    {
        "database": "guo_db",
        "collection": "Product_recommendation",
        "buildIndex": true,
        "documents": [
            {
                "id": "1",
                "desc": "Xiaomi/小米 笔记本Pro i7笔记本新品轻薄学习办公游戏笔记本电脑",
                "name": "笔记本电脑",
                "link": "https://item.taobao.com/item.htm?spm=a21n57.1.0.0.1b82523cwleRnp&id=732913405210&ns=1&abbucket=13#detail"
            },
            {
                "id": "2",
                "desc": "小米14手机壳新款小米14pro保护套防窥透明双面玻璃防摔小米14Ultra女曲面屏专用全包防摔mi14Por男创意高端",
                "name": "小米手机壳",
                "link": "https://detail.tmall.com/item.htm?ali_refid=a3_430582_1006:1307590102:H:hYlkg1LN3aaPEMltPrqhcIZuKNOtKBV2:d531df1012d324b0dc9fe44f6c976570&ali_trackid=282_d531df1012d324b0dc9fe44f6c976570&id=745504122315&spm=a21n57.1.0.0"
            },
            {
                "id": "3",
                "desc": "ThinkPad P15 至强处理器 15.6英寸16G独显设计图形移动工作站IBM笔记本电脑官方旗舰",
                "name": "thinkpad电脑",
                "link": "https://detail.tmall.com/item.htm?abbucket=13&id=642908199467&ns=1&spm=a21n57.1.0.0.1b82523cwleRnp&sku_properties=1627207:19284974778"
            },
            {
                "id": "4",
                "desc": "小米 原装充电器套装120W氮化镓充电器+双Typc-C接口数据线支持PD快充 便携充电器 适用小米/手机/笔记本",
                "name": "小米充电器",
                "link": "https://detail.tmall.com/item.htm?abbucket=13&id=671557292589&ns=1&spm=a21n57.1.0.0.1b82523cwleRnp&skuId=5009510186581"
            },
            {
                "id": "5",
                "desc": "小米14Pro手机新品新款上市小米徕卡我心澎湃小米官方旗舰店官网小米澎湃OS高通骁龙8Gen3",
                "name": "小米手机",
                "link": "https://detail.tmall.com/item.htm?abbucket=13&id=645529287798&ns=1&spm=a21n57.1.0.0.1b82523cwleRnp&sku_properties=5919063:6536025"
            }
        ]
    }
    

    详细API参考如下SDK,将documents替换上面内容即可:

    import tcvectordb
    from tcvectordb.model.collection import UpdateQuery
    from tcvectordb.model.document import Document, SearchParams, Filter
    from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
    from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
    
    #create a database client object
    client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
    # 指定写入数据的数据库与集合
    db = client.database('db-test')
    coll = db.collection('book-vector')
    
    # 写入数据。
    # 参数 build_index 为 True,指写入数据同时重新创建索引。              
    res = coll.upsert(
                documents=[
                    Document(id='0001', vector=[
                             0.2123, 0.23, 0.213], author='罗贯中', bookName='三国演义', page=21, tags=['曹操','诸葛亮','刘备']),
                    Document(id='0002', vector=[
                             0.2123, 0.22, 0.213], author='吴承恩', bookName='西游记', page=22, tags=['孙悟空','猪八戒','唐僧']),
                    Document(id='0003', vector=[
                             0.2123, 0.21, 0.213], author='曹雪芹', bookName='红楼梦', page=23, tags=['贾宝玉','林黛玉','王熙凤'])
                ],
                build_index=True
            )
    

    四、基于相似度方法查询

    从向量数据库进行相似度查询,示例代码:

    import tcvectordb
    from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel, ReadConsistency
    from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
    from tcvectordb.model.document import Document, Filter, SearchParams
    
    #create a database client object
    client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
    
    db = client.database('db-test')
    coll = db.collection('book-emb')
    
    # search by text
    # embeddingItems 指定了检索的文本
    # filter 指定了过滤条件
    # params 指定索引类型对应的查询参数,HNSW 类型需要设置 ef,指定查询的遍历范围;IVF 系列需要设置 nprobe,指定查询的单位数量
    
    # limit 指定返回最相似的 Top K 条结果。如果插入的数据不足 K 条,则返回实际插入的 Document 数量。
    # output_fields 指定输出字段 
    doc_lists = coll.searchByText(
                     embeddingItems=['天下大势,分久必合,合久必分'],
                     filter=Filter(Filter.In("bookName",["三国演义", "西游记"])),
                     params=SearchParams(ef=200),
                     limit=3,
                     retrieve_vector=False,
                     output_fields=['bookName','author']
                 )           
    # printf             
    for i, docs in enumerate(doc_lists.get("documents")):
                    print(i)
                    for doc in docs:
                            print(doc)
                  
    
    

    当我们输入“office”和“电脑”2个搜索条件,从返回结果可以看到相似度最高的是thinkpad笔记本电脑这条数据。它的score最高0.797445,即79.74%的相似度。

    [
        {
            "id": "3",
            "score": 0.797445,
            "link": "https://detail.tmall.com/item.htm?abbucket=13&id=642908199467&ns=1&spm=a21n57.1.0.0.1b82523cwleRnp&sku_properties=1627207:19284974778",
            "name": "thinkpad电脑",
            "desc": "ThinkPad P15 至强处理器 15.6英寸16G独显设计图形移动工作站IBM笔记本电脑官方旗舰"
        },
        {
            "id": "1",
            "score": 0.750497,
            "desc": "Xiaomi/小米 笔记本Pro i7笔记本新品轻薄学习办公游戏笔记本电脑",
            "link": "https://item.taobao.com/item.htm?spm=a21n57.1.0.0.1b82523cwleRnp&id=732913405210&ns=1&abbucket=13#detail",
            "name": "笔记本电脑"
        }
    ......
    ]
    

    推荐系统的目标是根据用户的历史行为和偏好,向用户推荐可能感兴趣的物品。在这种场景下,将用户行为特征向量化存储在向量数据库。当发起推荐请求时,系统会基于用户特征进行相似度计算,然后返回与用户可能感兴趣的物品作为推荐结果。原理示意图:


    由于使用了深度学习模型,基于向量数据库的推荐系统较传统推荐系统更先进,由于数据已经实现了向量化,支持各种常用的相似度计算指标,包括欧氏距离、内积、余弦相似度等。可以根据应用需求来选择最有效的向量相似度计算方式,得到更精确的相似度。

    相关文章

      网友评论

        本文标题:基于向量数据库的推荐系统

        本文链接:https://www.haomeiwen.com/subject/tawygdtx.html