• 政务问答系统模型动转静,插入milvus.ipynb


    import os
    import paddle
    from paddlenlp.transformers import AutoModel, AutoTokenizer
    import paddle.nn as nn
    import paddle.nn.functional as F
    import numpy as np
    from paddle import inference
    from tqdm import tqdm
    from paddlenlp.data import Pad, Tuple

    class SimCSE(nn.Layer):
        def __init__(self, pretrained_model, dropout=None, margin=0.0, scale=20, output_emb_size=None):
            super().__init__()
            self.ptm = pretrained_model#预训练模型
            #dropout is not None和dropout是不一样的,dropout=0.时,dropout是False,dropout is not None是True
            self.dropout = nn.Dropout(dropout if dropout is not None else 0.1)
            self.output_emb_size = output_emb_size
            if output_emb_size > 0:#如果output_emb_size>0,线性转换
                weight_attr = paddle.ParamAttr(initializer=paddle.nn.initializer.TruncatedNormal(std=0.02))
                self.emb_reduce_linear = paddle.nn.Linear(768, output_emb_size, weight_attr=weight_attr)
            self.margin = margin
            self.scale = scale

        @paddle.jit.to_static(
            input_spec=[
                paddle.static.InputSpec(shape=[None, None], dtype="int64"),
                paddle.static.InputSpec(shape=[None, None], dtype="int64"),
            ]
        )
        def get_pooled_embedding(
            self, input_ids, token_type_ids=None, position_ids=None, attention_mask=None, with_pooler=True
        ):
            # Note: cls_embedding is poolerd embedding with act tanh
            sequence_output, cls_embedding = self.ptm(input_ids, token_type_ids, position_ids, attention_mask)
            if with_pooler is False:#如果ptm不返回池化层,把[CLS]输出作为池化输出
                cls_embedding = sequence_output[:, 0, :]
            if self.output_emb_size > 0:
                cls_embedding = self.emb_reduce_linear(cls_embedding)
            cls_embedding = self.dropout(cls_embedding)
            cls_embedding = F.normalize(cls_embedding, p=2, axis=-1)#向量单位化(b,d)
            return cls_embedding
        def get_semantic_embedding(self, data_loader):
            self.eval()
            with paddle.no_grad():
                for batch_data in data_loader:
                    input_ids, token_type_ids = batch_data
                    text_

  • 相关阅读:
    工业互联网资料整理合集二
    seata事务回滚引起的skywalking数据库存储空间剧增的问题排查
    vs2019+boost库(boost_1_67_0)安装
    基于matlab求两个数最大公约数函数gcd
    大数据Flink(七十六):SQL的渐进式窗口(CUMULATE)
    实践总结:一篇搞懂链表——单链表和双指针技巧
    基于gpio子系统编写LED灯的驱动,编写应用程序测试
    tcp连接+套接字编程
    [漏洞分析] CVE-2023-38545 curl“史上最严重的漏洞“分析
    redis--重要知识点扫盲
  • 原文地址:https://blog.csdn.net/LIjin_1006/article/details/139640191