You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用余弦相似度完成文本分类并计算分类准确率?

基于Sentence-BERT嵌入的情感三分类实现方案

核心分类逻辑

你已经完成了文本向量化步骤,接下来通过相似度匹配规则即可完成三分类,整体流程如下:

  • 首先用训练集数据生成三类情感对应的基准特征:将训练集里同一类的所有样本嵌入取平均值,得到负向、中性、正向三个类别中心向量
  • 对每条测试样本的嵌入,分别计算它和三个类别中心的余弦相似度,取相似度最高的类别作为该样本的预测标签
  • 所有测试样本预测完成后,将预测标签和测试集真实标签比对,计算正确预测的占比即可得到分类准确率

代码实现示例

依赖导入

from sentence_transformers import util
import numpy as np
from sklearn.metrics import accuracy_score

步骤1:计算类别中心向量

# 前置变量说明:
# train_embeddings:训练集所有样本的嵌入数组
# train_labels:训练集对应的标签,约定0=负向、1=中性、2=正向

# 分别提取三类的嵌入并计算均值中心
neg_center = np.mean(train_embeddings[train_labels == 0], axis=0)
neu_center = np.mean(train_embeddings[train_labels == 1], axis=0)
pos_center = np.mean(train_embeddings[train_labels == 2], axis=0)

class_centers = np.array([neg_center, neu_center, pos_center])

步骤2:批量预测测试集标签

# 计算所有测试嵌入和三个类别中心的余弦相似度矩阵
cos_sim_matrix = util.cos_sim(test_embeddings, class_centers)
# 取每行最大值对应的索引作为预测标签
pred_labels = np.argmax(cos_sim_matrix.numpy(), axis=1)

步骤3:计算分类准确率

# test_labels:测试集对应的真实标签
accuracy = accuracy_score(test_labels, pred_labels)
print(f"分类准确率:{accuracy:.4f}")

优化方案

如果你的数据集存在类别不均衡、类内特征差异大的问题,可替换为K近邻分类获得更稳定的效果:

from sklearn.neighbors import KNeighborsClassifier

# 基于余弦距离构建KNN分类器,k值建议取3/5/7等奇数避免平票
knn_clf = KNeighborsClassifier(n_neighbors=5, metric='cosine')
knn_clf.fit(train_embeddings, train_labels)
pred_labels = knn_clf.predict(test_embeddings)
accuracy = accuracy_score(test_labels, pred_labels)

内容的提问来源于stack exchange,提问作者Valdas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:39:04