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)

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

piukaty

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

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

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

打赏作者

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

抵扣说明:

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

余额充值