请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

2回答

你好,请帮忙确认下输入text是否是正确的?

https://img1.sycdn.imooc.com/szimg/963dfe6709ca643308140460.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 龙仔小帅_qADQ46 #1
    刚才您解释了sentence_transformers可以用以后,我把sentence_transformers和langchain跑通了,然后这个聚类我又用了和视频中一样的方式,成功了。但是transformers库再聚类是失败的
    回复 有任何疑惑可以回复我~ 2025-03-07 11:19:35
  • 阿基米口 回复 提问者 龙仔小帅_qADQ46 #2
    嗯,我的意思是你截图的输入的变量是texts = ['苹果', '菠萝', '西瓜', '斑马', '大象', '老鼠'] 是这个,但是你在做tokenizer的变量是input_texts, 想确认下 你执行的时候这两个变量是不是一样的? 看上面第一条回复的图片的红框部分
    回复 有任何疑惑可以回复我~ 2025-03-07 11:24:16
  • 提问者 龙仔小帅_qADQ46 回复 阿基米口 #3
    回复 阿基米口:对的对的,您说的对,是我马虎了,谢谢!
    回复 有任何疑惑可以回复我~ 2025-03-07 11:54:53
阿基米口 2025-03-07 12:04:03

另外一个,我也试了下第一种的,确实是有可能存在聚类错误的情况(有一定的概率随机性),主要的原因:

  1. 最主要是这个具体类的样本太小了,kmeans算法本身存在初始聚类中心的随机选择,会导致结果可能存在不太一样。可以尝试加大迭代次数max_iter和收敛结束条件

from transformers import AutoTokenizer, AutoModel
from sentence_transformers.util import cos_sim
import torch.nn.functional as F

texts = ['苹果', '菠萝', '西瓜', '斑马', '大象', '老鼠']
batch_tokens = tokenizer(texts,
                        max_length=30,
                        padding=True,
                        truncation=True,
                        return_tensors='pt')

model_path = './data/llm_app/embedding_models/gte-large-zh/'
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModel.from_pretrained(model_path, device_map='cpu')
model.eval()
outputs = model(**batch_tokens)

output_embeddings = outputs.last_hidden_state[:, 0]
# output_embeddings = F.normalize(output_embeddings, p=2, dim=1)
output_embeddings = output_embeddings.detach().numpy()


from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=2, max_iter=3000, tol=1e-10)
kmeans.fit(output_embeddings)
label = kmeans.labels_
for i in range(len(texts)):
    print(f"cls({texts[i]}) = {label[i]}")


也可以把向量的相似度矩阵打印出来(这个是每次执行都一样的)

# 打印下两两的相似度矩阵
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
similarity_matrix = cosine_similarity(output_embeddings)
print("cos相似度矩阵:\n",similarity_matrix)
import numpy as np
from scipy.spatial.distance import cdist
vectors = output_embeddings
distance_matrix = cdist(vectors, vectors, metric='euclidean')
print("欧式距离矩阵:\n", distance_matrix)

https://img1.sycdn.imooc.com/szimg/965f056709ca6e7a11710922.jpg

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号