embedding模型计算相似度

要使用这个模型进行相似度计算,假设你有两个文本,可以按照以下步骤进行:

  1. 加载模型和分词器:使用 AutoModelAutoTokenizer 加载预训练的模型和分词器。
  2. 分词:将输入文本进行分词处理。
  3. 获取嵌入:通过模型获取文本的嵌入向量。
  4. 归一化:对嵌入向量进行归一化处理。
  5. 计算相似度:使用余弦相似度计算两个文本之间的相似度。

以下是一个完整的示例代码:

import torch.nn.functional as F
from modelscope import AutoModel, AutoTokenizer

# 输入文本
text1 = "what is the capital of China?"
text2 = "北京"

# 模型名称或路径
model_name_or_path = 'iic/gte_sentence-embedding_multilingual-base'

# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True)

# 分词
input_texts = [text1, text2]
batch_dict = tokenizer(input_texts, max_length=8192, padding=True, truncation=True, return_tensors='pt')

# 获取模型输出
outputs = model(**batch_dict)

# 获取嵌入向量
dimension = 768  # 输出嵌入的维度,应在 [128, 768] 之间
embeddings = outputs.last_hidden_state[:, 0][:dimension]

# 归一化嵌入向量
embeddings = F.normalize(embeddings, p=2, dim=1)

# 计算相似度
similarity = (embeddings[0] @ embeddings[1].T).item()
print(f"文本相似度: {similarity}")

代码解释:

  1. 加载模型和分词器

    tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
    model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True)
    
  2. 分词

    input_texts = [text1, text2]
    batch_dict = tokenizer(input_texts, max_length=8192, padding=True, truncation=True, return_tensors='pt')
    
  3. 获取模型输出

    outputs = model(**batch_dict)
    
  4. 获取嵌入向量

    dimension = 768  # 输出嵌入的维度,应在 [128, 768] 之间
    embeddings = outputs.last_hidden_state[:, 0][:dimension]
    
  5. 归一化嵌入向量

    embeddings = F.normalize(embeddings, p=2, dim=1)
    
  6. 计算相似度

    similarity = (embeddings[0] @ embeddings[1].T).item()
    print(f"文本相似度: {similarity}")
    

通过这些步骤,你可以使用预训练的模型计算两个文本之间的相似度。余弦相似度的值范围在 [-1, 1] 之间,值越接近 1 表示文本越相似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值