from openmind import AutoTokenizer, AutoModel, is_torch_npu_available
from openmind_hub import snapshot_download
import torch
import argparse
import torch.nn.functional as F
# 均值池化 - 考虑注意力掩码以进行正确的平均
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # model_output的第一个元素包含所有token嵌入
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--model_name_or_path",
type=str,
help="Path to model",
default="../",
)
args = parser.parse_args()
return args
def main():
args = parse_args()
model_path = args.model_name_or_path
if is_torch_npu_available():
device = "npu:0"
else:
device = "cpu"
# 我们想要获取句子嵌入的句子
sentences = ['This is an example sentence', 'Each sentence is converted']
# 从openmind_hub加载模型
tokenizer = AutoTokenizer.from_pretrained('Rose/gemma-2B-inst-aipi')
model = AutoModel.from_pretrained('Rose/gemma-2B-inst-aipi')
# 对句子进行分词
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# 计算token嵌入
with torch.no_grad():
model_output = model(**encoded_input)
# 执行池化
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# 归一化嵌入
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Sentence embeddings:")
print(sentence_embeddings)
if __name__ == "__main__":
main()本仓库包含在 sail/symbolic-instruction-tuning 数据集上微调后的 gemma-2B 模型。该模型旨在以更高的准确性和效率来解释和执行符号指令。
gemma-2B 模型最初以其强大的语言理解能力而闻名,现已通过微调来增强其在符号指令数据上的性能。这包括在 sail/symbolic-instruction-tuning 数据集上对模型进行重新训练,该数据集包含各种指令数据,用于测试模型遵循抽象和复杂指令的能力。
在该特定数据集上微调 gemma-2B 的动机是为了弥合语言理解与符号环境中执行之间的差距。这在代码生成、自动推理以及更复杂的 AI 指令遵循等领域具有广泛的应用。
要使用此模型,您需要在 Hugging Face 上拥有一个账户并安装 transformers 库。您可以使用 pip 安装该库:
pip install transformers安装完成后,您可以使用以下代码加载并使用模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "your-huggingface-username/gemma-2B-fine-tuned"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Now you can use the model for inference
input_text = "Your symbolic instruction here"
input_ids = tokenizer.encode(input_text, return_tensors='pt')
# Generate the output
output = model.generate(input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))模型通过以下过程进行微调:
sail/symbolic-instruction-tuning数据集进行预处理,以符合gemma-2B所需的输入格式。training_script.py文件中找到这些参数。