要使用这个模型进行相似度计算,假设你有两个文本,可以按照以下步骤进行:
- 加载模型和分词器:使用
AutoModel
和AutoTokenizer
加载预训练的模型和分词器。 - 分词:将输入文本进行分词处理。
- 获取嵌入:通过模型获取文本的嵌入向量。
- 归一化:对嵌入向量进行归一化处理。
- 计算相似度:使用余弦相似度计算两个文本之间的相似度。
以下是一个完整的示例代码:
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}")
代码解释:
-
加载模型和分词器:
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, 1] 之间,值越接近 1 表示文本越相似。