为何用set()和np.unique()提取唯一文本与嵌入结果长度不一致?
问题场景
拥有字符串列表titles,以及通过SentenceTransformer("all-mpnet-base-V2")生成的对应密集嵌入数组embeddings。分析时需基于唯一文本开展,因生成嵌入成本高,尝试用set()提取唯一字符串、np.unique(axis=0)提取对应嵌入,但两者结果长度不一致。已通过for循环实现需求,但效率低下,面临更大数据集时担心性能问题,同时顾虑信息丢失风险。
相关代码:
# 数据基本结构 titles = ["some text", "other text", ...] embeddings = [Array1, Array2, ...] # 尝试的去重方式 unique_titles = list(set(titles)) unique_embeddings = np.unique(embeddings, axis = 0) # 长度不一致 len(unique_titles) == len(unique_embeddings) # 返回False # 替代的for循环实现 titles_unique = [] embeddings_unique = np.array([0 for i in range(embeddings.shape[1])]) for t, e in zip(titles, embeddings): if t not in titles_unique: titles_unique.append(t) embeddings_unique = np.vstack([embeddings_unique, e]) # 移除初始化的首行 embeddings_unique = np.delete(embeddings_unique, (0), axis = 0)
长度不一致的原因
- 浮点精度误差:SentenceTransformer生成的嵌入是浮点型数组,
np.unique对数组去重时会严格比较每一位浮点值。即使是相同文本生成的嵌入,也可能因模型推理、浮点存储的微小舍入误差出现细微差异,被np.unique判定为不同数组,导致其结果长度大于unique_titles;极端情况下不同文本可能生成完全一致的嵌入(概率极低),会让unique_embeddings长度更小。 - 去重逻辑不匹配:
set(titles)是基于字符串的完全匹配去重,而np.unique(embeddings, axis=0)是基于数组内容的完全匹配去重,两者的去重依据完全不同,自然无法保证结果长度一致。
高效解决方案
方法1:字典映射(O(n)时间复杂度)
字典的键具有唯一性,且in操作是O(1)复杂度,远快于列表的O(n)判断:
title_embedding_map = {} for title, emb in zip(titles, embeddings): # 只保留首次出现的嵌入,若需保留最后一次则去掉判断直接赋值 if title not in title_embedding_map: title_embedding_map[title] = emb unique_titles = list(title_embedding_map.keys()) unique_embeddings = np.array(list(title_embedding_map.values()))
方法2:Pandas去重(适合结构化数据处理)
Pandas的drop_duplicates可高效按指定列去重,同时保留对应嵌入:
import pandas as pd import numpy as np # 将数据转为DataFrame df = pd.DataFrame({ 'title': titles, 'embedding': [emb.tolist() for emb in embeddings] }) # 按title去重,保留首次出现的记录 df_unique = df.drop_duplicates(subset='title', keep='first') # 提取结果 unique_titles = df_unique['title'].tolist() unique_embeddings = np.array(df_unique['embedding'].tolist())
信息丢失风险说明
上述两种方法均严格基于文本唯一性去重,保留每个唯一文本对应的嵌入(首次/末次出现的嵌入)。由于相同文本生成的嵌入理论上高度一致,即使存在微小浮点误差,这种误差对后续分析(如聚类、相似度计算)的影响可忽略,不会造成有效信息丢失。
内容的提问来源于stack exchange,提问作者MorrisseyJ
相关产品推荐
相关产品推荐

