对多标签的数据进行近似度比较的算法
编辑
8
2025-03-18
在评估 MemeMeow 这个项目图片输入的标签获取方式时,提出了以下方案:
- 直接采用图片上文字(仅适用于具有文字的表情包)
- 使用VLM对图片生成从内容、文字等多方面的标签后,将整体作为标签使用
- 一个图片具有多个标签
方法3的评估较为复杂,因为每个图片对应的是一个列表,我们可以采取以下方式进行评估。
我们需要查询 q 和一张图片 I 的标签集 \{t_1, t_2, ..., t_n\} ,首先计算查询向量 \vec{q} 与每个标签向量 \vec{t_i} 的余弦相似度:
\text{sim}(q, t_i) = \frac{\vec{q} \cdot \vec{t_i}}{||\vec{q}|| \cdot ||\vec{t_i}||}
接下来将每个标签的相似度作为其权重,对于每张图片,可以计算其标签的加权平均分数:
w_i = \max(0, \text{sim}(q, t_i))
\text{Score}(q,I) = \text{avgSim}(q, I) = \frac{\sum_{i=1}^{n} \text{sim}(q, t_i) \cdot w_i}{\sum_{i=1}^{n} w_i}
这样我们不难发现,相似度越高的标签,其权重也越大,对最终评分的影响也越大;相似度为负或很小的标签几乎不会影响最终评分;理论上标签数量不影响评分。
最终分数是加权平均相似度与最大相似度的组合:
\text{finalScore}(q, I) = 0.7 \cdot \text{avgSim}(q, I) + 0.3 \cdot \max_{i}(\text{sim}(q, t_i))
其中 0.7 与 0.3 是人工赋予的权重,加权平均能够考虑所有标签的整体相关性;同时最大相似度能够保证单一高相关性标签也能贡献分数。
以上便简单实现了对一对多标签的输入方式的近似度评估,但是目前还没有进行详细的测试,固定的加权值后续可能需要通过实验来具体调整,同时对于不同场景与不同类型的表情包集还应采用不同的权值。同时还需要解决搜索标签与查询高度相似但是不准确的情况,这可能会对结果造成影响。并且目前近似含义标签过多,当同一图片拥有多个相近标签时,得分可能会过高,比如:“开心“、”高兴“、“快乐”、“大笑”(可能与前几个不那么相近,没有测试过),导致更合理的图片反而评分更低的结果,所以在实际运用中标签的数量可能还是会使图片占据一定优势,或许可以规范“相近语义标签仅能出现一次”来解决问题。后续仍需更多实验数据来评估三种数据处理方式。·
- 1
- 0
-
分享