当前位置: 首页 > news >正文

【NLP】无服务器问答系统

一、说明

在NLP的眼见的应用,就是在“  当你在谷歌上提出一个问题并立即得到答案时会发生什么?例如,如果我们在谷歌搜索中询问谁是美国总统,我们会得到以下回答:Joe Biden;这是一个搜索问题,同时又是一个QA问答问题,本文将叙述,在Google的搜索引擎种,NLP库hume-face库的部署,可以作为应用参考。

二、谷歌的问答和搜索

        它显示,Google 最初在 1.6 秒内搜索并排名了 1 亿个页面,然后执行了额外的处理步骤以从页面中找到答案片段。第一个任务是谷歌作为搜索引擎的核心产品。第二个处理步骤(从网页中查找问题的答案)是问答 (QA) NLP 问题。QA NLP 系统是一种 NLP 系统,旨在回答以自然语言(如英语或中文)提出的问题。这些系统使用自然语言理解和知识表示技术的组合来分析问题并提供相关且准确的响应。这些系统通常用于搜索引擎、客户服务聊天机器人和虚拟助手等应用程序。

        在QA NLP系统中,问题和上下文被传递给模型,模型从上下文中提取答案。此方法可用于构建企业级 QA 系统。例如,文档搜索引擎(如弹性搜索)可用于对获得问题答案概率最高的文档进行排名,并使用 QA 模型在该文档中查找答案。这些系统通常被称为读者检索器系统,其中文档搜索是检索器的任务,找到问题的答案是阅读的任务。由专注于NLP的德国公司Deepset开发的Haystack库可用于构建企业级的读取器检索器系统。但是,本文将只关注系统的QA回答(读者)部分,我们有一个上下文和一个问题,并希望得到答案。

图 2,使用 Haystack 库的 QA 系统(取自 Haystack GitHub 存储库)

图 3 显示了用于问答 NLP 系统的读取器-检索器架构示例。

用于问答系统的读取器-检索器架构

图 3:问答系统的读取器-检索器架构

2.1 带变压器的 QA NLP

        现代自然语言处理(NLP)应用程序通常使用Google研究人员在2017年提出的转换器架构构建。1 这些架构优于递归神经网络(RNN)和长短期记忆(LSTM)网络,并使NLP领域的迁移学习成为可能。为大多数NLP应用提供动力的两种最流行的变压器架构是生成式预训练变压器(GPT)2和来自变压器的双向编码器表示(BERT)。3

        最初的转换器论文基于编码器和解码器架构,通常用于机器翻译等任务,其中单词序列从一种语言到另一种语言(图 4)。后来,编码器和解码器模块在许多NLP模型中被改编为独立模型。仅编码器模型将输入标记转换为丰富的数字表示形式,非常适合文本分类或命名实体识别等问题。BERT,RoBERTa和DistilBERT是一些使用仅编码器变压器块的型号。仅解码器模型(即 GPT 模型)通常用于文本生成或自动完成任务,其中每个任务的表示形式取决于左侧上下文。

        

图4 变压器架构(摘自变压器原文))

        变压器还使NLP领域的迁移学习成为可能。迁移学习是计算机视觉中的一种普遍实践,其中卷积神经网络在一项任务上进行训练,然后在新任务上进行微调和采用。在架构上,这涉及将模型拆分为主体和头部,其中头部是特定于任务的网络。在训练期间,体重从大规模数据集(如 ImageNet)中学习广泛的特征,这些数据集用于为新任务初始化新模型。这种方法成为计算机视觉的标准方法。生产中的大多数计算机视觉模型都是使用迁移学习技术进行训练的。

        

        

图 5 迁移学习,其中一个域的主体用于另一个域。

在变压器架构支持NLP中的变压器学习之后,许多机构发布了他们训练有素的NLP模型,供学者和从业者使用。GPT 和 BERT 是两个预先训练的模型,它们在各种 NLP 基准测试中采用了新的技术水平,并开创了变压器时代。随着时间的推移,不同的研究机构发布了转换器架构的不同变体,一些使用PyTorch,另一些使用Tensorflow,这使得从业者很难使用这些模型。HuggingFace创建了一组统一的API和一组预先训练的模型和数据集,简化了从业者采用最先进的NLP模型的过程。

2.2 用于 NLP 的 “抱面”humg-face 库

        拥抱面变压器是最受欢迎的 NLP 库之一,为各种转换器模型以及代码和工具提供了标准化接口,以使这些模型适应新的用例。它还支持三个主要的深度学习框架:Pytorch,Tensorflow和JAX。Hugging Face 生态系统主要由两部分组成:一系列库和 Hub,如下所示。库提供代码,Hub 提供预先训练的模型权重、数据集、评估指标脚本等。

图 6 拥抱脸库的组件。

2.3 质量保证模型构建

        我们使用squad_v2数据集从拥抱面模型中心微调预训练的变压器模型。Squad_v2将 SQuAD100.000 中的 1,1 个问题与众包工作者对抗性编写的 50,000 多个无法回答的问题结合起来,看起来与可回答的问题相似。系统尽可能回答问题,确定段落何时支持不回答并放弃回答。我们将使用MobileBert,流行的BERT模型的压缩版本。在 SQuAD v1.1/v2.0 问答任务中,MobileBERT 获得了 1.90/0.79 的 dev F2 分数(比 BERT_BASE 高 1.5/2.1)1。

        我们将从拥抱面库中引入预先训练的模型和分词器。由于这将是一个同步的无服务器应用程序,我们将使用BERT模型(mobilebert)的小型版本来加快处理时间。以下 python 代码将在数据集上微调Squad_v2 mobilebert 模型下载到目录中。./model

from transformers import AutoModelForQuestionAnswering, AutoTokenizerdef get_model(model):"""Loads model from Huggin face model hub intothe ./model directory"""try:model = AutoModelForQuestionAnswering.from_pretrained(model, use_cdn=True)model.save_pretrained("./model")except Exception as e:raise (e)
get_model("mrm8488/mobilebert-uncased-finetuned-squadv2")

        以下 python 代码将 mibilbert 分词器下载到目录中。./model

def get_tokenizer(tokenizer):"""Loads tokenizer from Huggin face model hub intothe ./model directory"""try:tokenizer = AutoTokenizer.from_pretrained(tokenizer)tokenizer.save_pretrained("./model")except Exception as e:raise (e)get_tokenizer("mrm8488/mobilebert-uncased-finetuned-squadv2")

        一旦我们有了分词器,我们就可以对进入模型的数据进行编码,并对来自模型的响应进行解码。以下代码适用于编码器函数,该函数接受问题、上下文和分词器并返回将传递给模型的 。attention_masksinpud_ids

def encode(tokenizer, question, context):"""encodes the question and context with a given tokenizerthat is understandable to the model"""encoded = tokenizer.encode_plus(question, context)return encoded["input_ids"], encoded["attention_mask"]

此代码片段会将模型的答案解码为人类可读的字符串格式。

def decode(tokenizer, token):"""decodes the tokens to the answer with a given tokenizerto return human readable response in a string format"""answer_tokens = tokenizer.convert_ids_to_tokens(token, skip_special_tokens=True)return tokenizer.convert_tokens_to_string(answer_tokens)

我们必须将编码器、模型预测和解码器组合在一个方法中。下面的代码首先从目录中加载模型和分词器,并通过前面定义的编码器方法传递问题和上下文。然后,输出通过模型传递,最后,答案标记通过解码方法传递,以字符串格式获取答案。./model

from transformers import AutoModelForQuestionAnswering, AutoTokenizer, AutoConfig
import torchdef serverless_pipeline(model_path="./model"):"""Initializes the model and tokenzier and returns a predictfunction that ca be used as pipeline"""tokenizer = AutoTokenizer.from_pretrained(model_path)model = AutoModelForQuestionAnswering.from_pretrained(model_path)def predict(question, context):"""predicts the answer on an given question and context.Uses encode and decode method from above"""input_ids, attention_mask = encode(tokenizer, question, context)start_scores, end_scores = model(torch.tensor([input_ids]), attention_mask=torch.tensor([attention_mask]))ans_tokens = input_ids[torch.argmax(start_scores) : torch.argmax(end_scores) + 1]answer = decode(tokenizer, ans_tokens)return answerreturn predict

三、无服务器架构

        图 1 显示了使用 AWS 云的 QA NLP 应用程序的无服务器架构。该应用程序的无服务器后端使用 AWS lambda、DynamoDB、API 网关和 ECR 进行容器注册表。Lambda 函数是包装在 docker 映像中并上传到 AWS ECR 的推理服务器。AWS API 网关将 POST 请求负载发送到 lambda 函数。AWS DynamoDB 存储发送到推理服务器的数据以进行监控。Lambda 可以使用仅允许对数据库进行写入访问的 IAM 角色与 DynamoDB 通信。

图 7 AWS 上的无服务器 QA NLP 架构

3.1 在 DynamoDB 中存储日志

        DynamoDB 是一个完全托管的无服务器 NoSQL 数据库,非常适合存储模型的输入和输出,以便监控和评估模型。我们使用 boto3 库将日志放入我们的数据库中。我们将 DynamoDB 的名称保留在 Lambda 的环境变量中。我们希望将时间、有效载荷上下文和问题以及模型的答案存储在数据库中。以下代码在 DyanmoDB 中编写问题、上下文和模型答案。DYNAMO_TABLE

import boto3
import os
import uuid
import timedynamodb = boto3.resource("dynamodb", region_name="us-east-1")
table = dynamodb.Table(os.environ["DYNAMODB_TABLE"])timestamp = str(time.time())
item = {"primary_key": str(uuid.uuid1()),"createdAt": timestamp,"context": body["context"],"question": body["question"],"answer": answer,
}
table.put_item(Item=item)

3.2 λ函数

Lambda 是来自 AWS 的无服务器计算服务,将在其中提供推理服务。Lambda 处理程序是来自 API 请求的信息通过函数并将输出返回到 API 的地方。我们还将包括用于在函数中编写代码的 DynamoDB。

def handler(event, context):try:# loads the incoming event into a dictonarybody = json.loads(event["body"])# uses the pipeline to predict the answeranswer = question_answering_pipeline(question=body["question"], context=body["context"])timestamp = str(time.time())item = {"primary_key": str(uuid.uuid1()),"createdAt": timestamp,"context": body["context"],"question": body["question"],"answer": answer,}table.put_item(Item=item)return {"statusCode": 200,"headers": {"Content-Type": "application/json","Access-Control-Allow-Origin": "*","Access-Control-Allow-Credentials": True,},"body": json.dumps({"answer": answer}),}except Exception as e:print(repr(e))return {"statusCode": 500,"headers": {"Content-Type": "application/json","Access-Control-Allow-Origin": "*","Access-Control-Allow-Credentials": True,},"body": json.dumps({"error": repr(e)}),}

3.3 Dockerize Lambda 函数

        由于 Lambda 函数现在支持 docker 映像,因此我们可以将所有内容 dockerize 并将其上传到 Amazon Elastic Container Registry (Amazon ECR) 存储库。Lambda 函数将访问此图像以进行预测。Dockerfile 使用 AWS 发布的基础映像来执行 Lambda 函数。

FROM public.ecr.aws/lambda/python:3.8# Copy function code and models into our /var/task
COPY ./ ${LAMBDA_TASK_ROOT}/# install our dependencies
RUN python3 -m pip install -r requirements.txt --target ${LAMBDA_TASK_ROOT}# run get_model.py to get model weights and tokenizers
RUN python3 get_model.py# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "handler.handler" ]

        我们需要发送以构建、标记 docker 镜像并将其推送到 ECR 存储库。首先,我们必须使用 AWS CLI 登录到我们的 ECR 存储库。

aws_region=<your aws region>
aws_account_id=<your aws account>aws ecr get-login-password --region $aws_region \
| docker login username AWS --password-stdin $aws_account_id.dkr.ecr.$aws_region.amazonaws.com

然后构建、标记 docker 镜像并将其推送到 ECR 存储库。

docker build -t nlp-lambda:v1 serverless-bert/.
docker tag nlp-lambda:v1 $aws_account_id.dkr.ecr.$aws_region.amazonaws.com/nlp-lambda:v1
docker push $aws_account_id.dkr.ecr.$aws_region.amazonaws.com/nlp-lambda:v1

3.4 部署无服务器应用程序

我们将使用 Serverless 库,这是一个开源且与云无关的库,适用于所有主要的公共云提供商。使用 npm 安装无服务器(如果计算机上尚未安装)。如果您的计算机上没有 npm,请按照此处的安装说明进行操作。

npm install -g serverless

下面是一个无服务器配置文件示例,用于使用 API 网关和 DynamoDB 部署 Lambda 函数,类似于图 7 中所示的架构:

service: serverless-bert-qa-lambda-dockerprovider:name: aws # providerregion: us-east-1 # aws regionmemorySize: 5120 # optional, in MBtimeout: 30 # optional, in secondsenvironment:DYNAMODB_TABLE: ${self:service}-Table-${sls:stage}iamRoleStatements:- Effect: "Allow"Action:- "dynamodb:PutItem"Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-Table-${sls:stage}
functions:questionanswering:image: ${ACOUNT_NUMBER}.dkr.ecr.us-east-1.amazonaws.com/bert-lambda:v1 #ecr urlevents:- http:path: qa # http pathmethod: post # http method
resources:Resources:CustomerTable:Type: AWS::DynamoDB::TableProperties:AttributeDefinitions:- AttributeName: primary_keyAttributeType: SBillingMode: PAY_PER_REQUESTKeySchema:- AttributeName: primary_keyKeyType: HASHTableName: ${self:service}-Table-${sls:stage}

无服务器框架需要 AWS 凭证才能代表我们访问 AWS 资源。如果您没有 IAM 用户,请按照此说明创建 IAM 用户,并使用该用户设置凭证。建议使用 AWS-CLI 配置 AWS 凭证。要通过 进行设置,请先安装它,然后运行以配置 AWS-CLI 和凭证:aws-cliaws configure

$ aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: 
Default output format [None]: 

一切准备就绪后,以下命令将使用无服务器配置文件并将基础设施部署到 AWS。确保您与配置文件位于同一目录中。

serverless deploy

        部署完成后,无服务器将返回可用于测试模型的 API 网关的 URL。您可以使用 Postman、javascript 或 curl 来调用模型。在此项目的 GitHub 存储库中,创建了一个使用 HTML、CSS 和 javascript 的简单前端应用程序,用于与部署的 API 网关进行交互。

图 8 QA NLP 应用程序的前端应用程序

四、总结

问答 NLP 模型通常用于搜索引擎、客户服务聊天机器人和虚拟助手等应用程序。这篇博文描述了 QA NLP 问题,并使用 HuggingFace 库和 AWS 基础设施构建和部署了一个全栈无服务器 QA NLP 应用程序。无服务器 ML 应用程序可能不是适用于所有用例的良好部署方法,但它是您将模型投入生产而无需担心底层基础设施的重要第一步。

相关文章:

【NLP】无服务器问答系统

一、说明 在NLP的眼见的应用&#xff0c;就是在“ 当你在谷歌上提出一个问题并立即得到答案时会发生什么&#xff1f;例如&#xff0c;如果我们在谷歌搜索中询问谁是美国总统&#xff0c;我们会得到以下回答&#xff1a;Joe Biden&#xff1b;这是一个搜索问题&#xff0c;同时…...

Dubbo

Dubbo 简介Dubbo的快速入门Dubbo的基本架构安装DubboAdmin入门案例Dubbo的最佳实践 Dubbo的高级特性启动检查多版本超时与重试负载均衡SpringCloud整合Dubbo案例 简介 Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架。 致力于提高性能和透明化的RPC远程服务调用方…...

Java设计模式之策略(Strategy)模式

策略&#xff08;Strategy&#xff09;设计模式定义了一系列算法&#xff0c;将它们封装起来&#xff0c;并且可以相互替换使用&#xff0c;从而使得算法可以独立于使用它的客户而变化。 什么是策略模式 策略&#xff08;Strategy&#xff09;设计模式是一种行为型设计模式&a…...

Vue引入CDN JS或本地JS文件之后 使用报错

加载问题 正常情况 在public引入script - js文件加载 - 写入内存 - 使用 但使用之前 有可能这个文件还没执行写入内存或者还未加载完毕 此时 需要一个promiss解决 1. 引入script 在 public / index.html 文件内引入你的script标签 <script type"text/javascript"…...

NRF52832-扩展广播

nordic论坛 我想要设置广播名称为 “一二三四五”&#xff0c;当广播名称为FULL_NAME时&#xff0c;但是广播显示还是“一&#xff1f;”&#xff0c;“&#xff1f;”是乱码&#xff0c;后来打开nrf connect观察广播&#xff0c;在没连接的时候&#xff0c;点击一下&#xff0…...

springboot项目新增子module

1. 拉取项目 2. file-new-module 3. 选择版本 4. 1-2-3-4 5. 注释请求统一前缀 (SwaggerConfig.java)...

Python Web 开发及 Django 总结

title: Python Web 开发及 Django 总结 date: 2023-07-24 17:26:26 tags: PythonWeb categories:Python cover: https://cover.png feature: false Python 基础部分见&#xff1a;Python 基础总结 1. 创建项目 1.1 命令行 1、下载安装 Django 在终端输入 pip install djan…...

《向量数据库指南》:向量数据库Pinecone故障排除

目录 无法pip安装 空闲后索引丢失 上传缓慢或延迟高 批处理带来的高查询延迟 使用gRPC客户端进行Upsert限流 Pods已满 安全问题 CORS错误 本节介绍常见问题以及如何解决它们。需要帮助吗?在我们的支持论坛中提问。标准、企业和专用客户还可以联系支持人员寻求帮助。...

[86] 分割链表

题目链接&#xff1a;86. 分隔链表 - 力扣&#xff08;LeetCode&#xff09; 第一种方法&#xff1a;类似双指针 自己想的&#xff0c;不知道读者是否能看懂&#xff0c;参考注释 ListNode* partition(ListNode* head, int x) {ListNode* bigpos nullptr;ListNode* littlep…...

【python】 清空socket缓冲区

在Python中使用Socket进行网络通信时&#xff0c;可以通过调用socket.recv()函数来接收数据&#xff0c;数据会被存储在缓冲区中。有时候&#xff0c;可能想要先清空缓冲区&#xff0c;以便后续的数据不会被之前的数据影响。以下是一种清空Python Socket缓冲区的方法&#xff1…...

108、RocketMQ的底层实现原理(不需要长篇大论)

RocketMQ的底层实现原理 RocketMQ由NameServer集群、Producer集群、Consumer集群、Broker集群组成&#xff0c;消息生产和消费的大致原理如下: Broker在启动的时候向所有的NameServer注册&#xff0c;并保持长连接&#xff0c;每30s发送一次心跳Producer在发送消息的时候从Na…...

怎么把PDF转为word?1分钟解决难题

PDF文件在我们的电脑上应用非常广泛&#xff0c;由于其较高的安全性和兼容性&#xff0c;得到了广泛的认可。然而&#xff0c;对于一些人来说&#xff0c;PDF文件不能直接进行编辑和修改可能是一个问题。因此&#xff0c;通常我们需要将其转换为Word格式&#xff0c;以便在Word…...

Mysql权限-系统表user,db,talbes_priv,columns_priv详解

一、MySQL 权限场景 可以根据登录用户限制用户访问资源(库、表)可以根据登录用户限制用户的操作权限(能对哪些库、表执行增删改查操作)可以指定用户登录IP或者域名可以限制用户权限分配 二、Mysql五个层级权限级别分析 Mysql权限级别分为了五个层级&#xff0c;并且每个级别…...

GPT-4 模型详细教程

GPT-4&#xff08;Generative Pretrained Transformer 4&#xff09;是 OpenAI 的最新语言生成模型&#xff0c;其在各类文本生成任务中表现优秀&#xff0c;深受开发者和研究者喜爱。这篇教程将帮助你理解 GPT-4 的基本概念&#xff0c;并向你展示如何使用它来生成文本。 什么…...

智慧环保:创造绿色未来

随着全球环境问题的日益严重&#xff0c;智慧环保成为推动绿色发展的关键。智慧环保利用先进的技术手段和智能化设备&#xff0c;致力于解决环境问题&#xff0c;保护生态环境&#xff0c;实现可持续发展。它融合了物联网、人工智能、大数据等技术&#xff0c;将科技的力量与环…...

虚拟 DOM和render()函数和Vue.js模板语法

[TOC](虚拟 DOM和render()函数) 1. 虚拟DOM 虚拟DOM是Vue中非常重要的概念&#xff0c;它是一个虚拟的内存中的数据结构&#xff0c;用来表示真实的DOM树。Vue使用虚拟DOM来减少对真实DOM的操作次数&#xff0c;从而提高页面的性能。 虚拟DOM的工作原理如下&#xff1a; Vu…...

k8s Service网络详解(一)

k8s Service网络详解&#xff08;一&#xff09; 有关K8s网络的几个概念K8s网络模型k8s网络插件ServiceService的访问方式Service的种类无头服务&#xff08;Headless Services&#xff09;带选择算符的服务无选择算符的服务 Service的类型ClusterIPNodeportLoadBalancerExtern…...

抖音账号矩阵系统开发源码

一、技术自研框架开发背景&#xff1a; 抖音账号矩阵系统是一种基于数据分析和管理的全新平台&#xff0c;能够帮助用户更好地管理、扩展和营销抖音账号。 部分源码分享&#xff1a; ic function indexAction() { //面包屑 $breadcrumbs [ [tit…...

Python+Texturepacker自动化处理图片

前言 本篇在讲什么 PythonTexturepacker自动化处理图片 本篇需要什么 对Python语法有简单认知 依赖Python2.7环境 依赖Texturepacker工具 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &…...

K8s Service网络详解(二)

K8s Service网络详解&#xff08;二&#xff09; Kube Proxy调度模式Kube-proxy IptablesKube-proxy IPVS Service SelectorPod DNS种常见的 DNS 服务Kube-DNSCoreDNSCorefile 配置 DNS 记录DNS 记录 ServiceDNS 记录 PodDNS 配置策略 Pod 的主机名设置优先级 Ingress Kube Pro…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...