PostgreSQL码农集散地

大量重复 短视频、音频、图片、文章 怎么去重?

短视频、音频、图片、文章 怎么去重?

如何对视频、音频、图片、文章 去重?

非结构化数据在数据库中要以向量表示,才能与大模型应用结合。

1、使用embedding模型, 将内容转换为向量.

例如使用bailian的多模态模型: multimodal-embedding-v1

https://help.aliyun.com/zh/model-studio/model-user-guide

示例代码

import dashscope  
import json  
from http import HTTPStatus  
# 实际使用中请将url地址替换为您的视频url地址  
video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250107/lbcemt/new+video.mp4"
input = [{'video': video}]  
# 调用模型接口  
resp = dashscope.MultiModalEmbedding.call(  
    model="multimodal-embedding-v1",  
    input=input  
)  

if resp.status_code == HTTPStatus.OK:  
print(json.dumps(resp.output, ensure_ascii=False, indent=4))  

输出示例

{  
"status_code": 200,  
"request_id": "23478d14-55c6-98cc-9706-29d23de742fb",  
"code": "",  
"message": "",  
"output": {  
"embeddings": [  
            {  
"index": 0,  
"embedding": [  
                    -0.0396728515625,  
                    0.00650787353515625,  
                    -0.0223388671875,  
                    ...  
                ],  
"type": "image"
            }  
        ]  
    },  
"usage": {  
"input_tokens": 0,  
"image_count": 1,  
"duration": 0  
    }  
}  

2、将embeddings值写入向量数据库, 例如pgvector, tbl表.

3、创建向量索引

去重方法

1、输入一个视频, 判断这个视频是否在已有视频中存在.

先用前面的方法得到输入视频的embedding值v1, 示例SQL:

-- 不同的距离算法使用不同的ops, 详见: https://github.com/pgvector/pgvector
-- 以下伪代码 
select 1 from tbl where vec <-> v1 < 相似度阈值 limit 1; -- 有返回表示有重复  
select vec <-> v1 < 相似度阈值 from tbl order by vec <-> v1 limit 1;  -- true 表示有重复    

2、如果要对已有视频进去全面去重复, 需要做笛卡尔乘积运算。可以开启并行计算加速处理。

向量优化方法参考

以下参考文章来自: https://github.com/digoal/blog

《向量搜索优化3板斧: 空间、性能、召回(recall)》

《头大! 索引扫描和全表扫描结果不一样, 这向量数据库还能用? 教你一招大幅提升召回率(recall)》

《如何去除向量数据库的重复相似内容》