Bert句嵌入模块sentence-transformers实战入门

参考链接:安装 — 句子转换器文档 (sbert.net)

1.安装

环境:python 3.6>=,pytorch 1.6.0>=,transformers v4.6.0>=。不支持 python 2.7

pytorch 安装参考 PyTorch安装报错_piukaty的博客-CSDN博客

transformers 安装:

pip install transformers

sentence-transformers安装:

pip install -U sentence-transformers

 检查:import sentence_transformers。能正常导入,无报错。在官方文档可能会让你输入一段英语小测验一下,其实也没必要。

2.加载中文预训练模型        

from sentence_transformers import SentenceTransformer

# 保存预训练模型的文件夹
save_path = "./bert_based_chinese"

# 加载模型
model = SentenceTransformer('distiluse-base-multilingual-cased-v1')
# 保存模型到指定文件夹
model.save(save_path)

 sentence_transformers 还支持其他的预训练模型,详细见预训练模型 — 句子转换器文档 (sbert.net)。这里我们选择了支持多语言的模型(当然也支持中文)。加载指定模型用:

model = SentenceTransformer('model-name')

其中model-name指你要加载的模型名。当你把模型保存到本地后,就可以用SentenceTransformers(path)来加载模型。model-name替换为保存模型的路径。注意对模型新建一个空的文件夹保存。

3.一个小的尝试:怎么嵌入句向量

from sentence_transformers import SentenceTransformer as st

# 加载模型
model = st("./bert_based_chinese")

# 待编码的句子
sentences = [
      "明月几时有",
      "把酒问青天"
    ]

# 编码
embeddings = model.encode(sentences)

for sentence,embedding in zip(sentences, embeddings):
    print("Sentence:", sentence)
    print("Embedding:", embedding)
    print("")

model.encode参数说明:

  • sentence – 要嵌入的句子

  • batch_size – 用于计算的批大小

  • show_progress_bar – 对句子进行编码时输出进度条

  • output_value – 默认sentence_embedding,用于获取句子嵌入。可以设置为token_embeddings以获取字片标记嵌入。设置为"无",以获取所有输出值

  • convert_to_numpy – 如果为 true,则输出为 numpy 向量的列表。否则,它是一个 pytorch 张量列表。

  • convert_to_tensor – 如果为 true,将返回一个tensor大张量。覆盖convert_to_numpy中的任何设置

  • normalize_embeddings – 如果设置为 true,则返回的向量的长度将为 1。在这种情况下,可以使用更快的点积(util.dot_score)而不是余弦相似性。

需要注意的点:

1.输入的多个句子放在列表里;

2.也可以输入短语或者长句子,超过最大句长会被截断,最大句长为512个单词片段,约为300-400单词(以英语单词来衡量)

# 获取最大句长,默认是128
print("Max Sequence Length:", model.max_seq_length)

# 修改最大句长为200,不然超过支持的512
model.max_seq_length = 200

print("Max Sequence Length:", model.max_seq_length)

你可能感兴趣的:(python,bert,自然语言处理,深度学习)