☰
基于 PaddleHub 使用 w2v_baidu_encyclopedia_target_word-wordLR_dim300 中文词向量模型实现词嵌入查询与相似度计算
2026/9/25 3:40:35 网站建设 项目流程
  • 人工智能
  • 大模型
  • 微调
  • 模型推理服务

【免费下载链接】PaddleFormers

PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleFormers
点击查看免费下载

本篇技术指南围绕 PaddleFormers 仓库中收录的预训练中文词嵌入模块w2v_baidu_encyclopedia_target_word-wordLR_dim300展开,讲解如何通过 PaddleHub 安装该模型、调用其search/cosine_sim/dot等 API 获取 300 维词向量,并将其以 Serving 服务的形式在线部署,用于计算任意词对的余弦相似度。读完本文后,你将掌握该 Embedding 模块从安装、本地预测到 HTTP 服务化部署的完整实战链路,并理解其词表、OOV 处理与底层实现原理。

一、模型基本信息

w2v_baidu_encyclopedia_target_word-wordLR_dim300是 PaddleHub 提供的开源预训练词嵌入(Token Embedding)模块,属于文本-词嵌入类别的 w2v 网络模型,训练语料为百度百科(baidu_encyclopedia),词向量维度为 300。模块的完整信息如下表:

模型名称w2v_baidu_encyclopedia_target_word-wordLR_dim300
类别文本-词嵌入
网络w2v
数据集baidu_encyclopedia
是否支持 Fine-tuning否
文件大小678.22MB
词表大小635958
最新更新日期2021-04-28
数据指标-

该模型不支持 Fine-tuning,其定位是开箱即用的静态词向量查询工具。从命名规则可以解读出其训练配置:target.word-wordLR表示以"词-词"为目标、采用 word-LR(词对左右窗口共现)训练策略,dim300表示输出向量维度为 300,词表覆盖约 63.6 万个中文词。PaddleHub 还提供基于不同语料、不同训练方式与不同维度的多组 Embedding 模型,本模块即其中的中文目标词向量之一。

模块的实际定义位于仓库 modules/text/embedding/w2v_baidu_encyclopedia_target_word-wordLR_dim300/module.py,其核心实现如下:

from paddlenlp.embeddings import TokenEmbedding from paddlehub.module.module import moduleinfo from paddlehub.module.nlp_module import EmbeddingModule @moduleinfo( name="w2v_baidu_encyclopedia_target_word-wordLR_dim300", version="1.0.1", summary="", author="paddlepaddle", author_email="", type="nlp/semantic_model", meta=EmbeddingModule) class Embedding(TokenEmbedding): """ Embedding model """ embedding_name = "w2v.baidu_encyclopedia.target.word-wordLR.dim300" def __init__(self, *args, **kwargs): super(Embedding, self).__init__(embedding_name=self.embedding_name, *args, **kwargs)

从源码可以看出,该模块通过@moduleinfo装饰器向 PaddleHub 注册了名称、版本号(1.0.1)与类型(nlp/semantic_model),并将底层实现委托给 PaddleNLP 的TokenEmbedding;内部以embedding_name = "w2v.baidu_encyclopedia.target.word-wordLR.dim300"作为资源标识,用于定位对应的词表与权重文件。

二、环境依赖与安装

1、环境依赖

使用该模块需要满足以下环境条件:

  • paddlepaddle >= 2.0.0
  • paddlehub >= 2.0.0

PaddleHub 的安装方式可参考 PaddleHub 安装指南。

2、安装模块

在满足依赖后,通过hub install命令即可从 PaddleHub 服务器下载并安装该模块:

$ hub install w2v_baidu_encyclopedia_target_word-wordLR_dim300

安装时若遇到问题,可参考对应平台的零基础安装文档:Windows 安装、Linux 安装、MacOS 安装。

从仓库中 paddlehub/commands/install.py 的InstallCommand实现可以看到,hub install支持直接传入模块名,也支持通过模块名==版本号的形式安装指定版本(例如下文更新历史中的hub install w2v_baidu_encyclopedia_target_word-wordLR_dim300==1.0.1),命令行参数--ignore_env_mismatch可忽略安装时的环境不匹配检查。安装时若传入的是本地目录或.tar包路径,则会直接以本地资源安装,否则按模块名从远程服务器拉取。

三、模型 API 与预测代码示例

1、预测代码示例

加载模块并执行词向量查询的代码如下:

import paddlehub as hub embedding = hub.Module(name='w2v_baidu_encyclopedia_target_word-wordLR_dim300') # 获取单词的embedding embedding.search("中国") # 计算两个词向量的余弦相似度 embedding.cosine_sim("中国", "美国") # 计算两个词向量的内积 embedding.dot("中国", "美国")

hub.Module(name=...)会根据注册名找到对应模块类并完成实例化,权重与词表会在首次使用时自动下载并缓存。

2、API 详解

__init__
def __init__( *args, **kwargs )

创建一个 Embedding Module 对象,默认无需参数。

  • 参数
    • *args:用户额外指定的列表类型的参数。
    • **kwargs:用户额外指定的关键字字典类型的参数。

关于额外参数的详情可参考 PaddleNLP 的paddlenlp.embeddings模块。从 module.py 可见,__init__会把embedding_name透传给TokenEmbedding,因此额外参数主要用于控制底层词向量的加载行为。

search
def search( words: Union[List[str], str, int], )

获取一个或多个词的 embedding。输入可以是str、List[str]和int类型,分别代表获取一个词、多个词和指定词编号的 embedding。词的编号与模型的词典相关,词典可通过模型实例的vocab属性获取。

  • 参数
    • words:需要获取词向量的词、词列表或者词编号。
cosine_sim
def cosine_sim( word_a: str, word_b: str, )

计算两个词 embedding 的余弦相似度。需要注意的是word_a和word_b都必须是词典内的单词,否则会被判定为 OOV(Out-Of-Vocabulary),并被替换为unknown_token(即<unk>),进而影响相似度结果。

  • 参数
    • word_a:需要计算余弦相似度的单词 a。
    • word_b:需要计算余弦相似度的单词 b。
dot
def dot( word_a: str, word_b: str, )

计算两个词 embedding 的内积(点积)。对于输入单词同样需要注意 OOV 问题,处理逻辑与cosine_sim一致。

  • 参数
    • word_a:需要计算内积的单词 a。
    • word_b:需要计算内积的单词 b。
get_vocab_path
def get_vocab_path()

获取本地词表文件的路径信息。该词表文件以vocab.{embedding_name}的形式存放在 PaddleNLP 的EMBEDDING_HOME目录下,若本地不存在会自动从远程下载,相关逻辑可在 paddlehub/module/nlp_module.py 的EmbeddingModule.get_vocab_path中看到。

get_tokenizer
def get_tokenizer(*args, **kwargs)

获取当前模型的 tokenizer,返回一个JiebaTokenizer的实例,当前仅支持中文 embedding 模型。

  • 参数
    • *args:额外传递的列表形式的参数。
    • **kwargs:额外传递的字典形式的参数。

从源码实现看,get_tokenizer会检查embedding_name是否以.en结尾:英文 embedding 模型会抛出NotImplementedError(暂未支持),中文模型则基于self.vocab构造JiebaTokenizer返回。因此本模块可直接获得基于结巴分词的中文分词器,便于下游对中文文本做分词后再逐词查询向量。

3、底层实现:EmbeddingModule 与 Serving 方法

该模块的元类meta=EmbeddingModule指向 paddlehub/module/nlp_module.py 中的EmbeddingModule,其类层次为EmbeddingModule(RunModule, EmbeddingServing)。其中:

  • get_vocab_path()负责词表文件的定位与自动下载;
  • get_tokenizer()返回中文JiebaTokenizer;
  • EmbeddingServing.calc_similarity(data)是标注了@serving的服务化入口方法,它会逐个校验输入词对:每个词对必须恰好包含两个字符串元素,且两个词都必须存在于词表中(通过get_idx_from_word与vocab.unk_token比对判断 OOV),最终以字符串形式返回cosine_sim(*word_pair)的计算结果。

这意味着当模块以 Serving 模式部署时,对外暴露的正是"计算两个词向量余弦相似度"的能力,与本文第四部分的在线服务流程一一对应。

四、部署 Serving 在线服务

通过 PaddleHub Serving,可以部署一个在线获取两个词向量余弦相似度的 HTTP 服务。

Step1: 启动 PaddleHub Serving

运行启动命令:

$ hub serving start -m w2v_baidu_encyclopedia_target_word-wordLR_dim300

这样就完成了一个获取词向量余弦相似度服务化 API 的部署,默认端口号为 8866。

NOTE:如使用 GPU 预测,则需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。

从仓库实现看,paddlehub/commands/serving.py 中ServingCommand会读取模块列表并启动 HTTP 服务,paddlehub/serving/app_compat.py 的create_app注册了POST /predict/<module_name>路由,请求体按application/json解析后,交由predict_v2调用模块的 serving 方法(本例即calc_similarity),最终以package_result统一包装返回结果。默认端口为 8866,与文档描述一致。

Step2: 发送预测请求

配置好服务端后,以下数行代码即可实现发送预测请求、获取预测结果:

import requests import json # 指定用于计算余弦相似度的单词对[[word_a, word_b], [word_a, word_b], ... ]] word_pairs = [["中国", "美国"], ["今天", "明天"]] # 以key的方式指定word_pairs传入预测方法的时的参数,此例中为"data",对于每一对单词,调用cosine_sim进行余弦相似度的计算 data = {"data": word_pairs} # 发送post请求,content-type类型应指定json方式,url中的ip地址需改为对应机器的ip url = "http://127.0.0.1:8866/predict/w2v_baidu_encyclopedia_target_word-wordLR_dim300" # 指定post请求的headers为application/json方式 headers = {"Content-Type": "application/json"} r = requests.post(url=url, headers=headers, data=json.dumps(data)) print(r.json())

请求中data键对应calc_similarity的入参,即一组词对列表;服务端对每一对词调用cosine_sim计算余弦相似度,并以 JSON 形式返回结果。服务端会先校验词对格式(长度必须为 2、元素必须为字符串)与词表覆盖情况,若出现不在词表中的单词,calc_similarity会抛出明确的错误信息,例如Word "xxx" is not in vocab. Please check your inputs.。

五、更新历史

  • 1.0.0

    初始发布。

  • 1.0.1

    优化模型。可通过指定版本号安装:

    $ hub install w2v_baidu_encyclopedia_target_word-wordLR_dim300==1.0.1

    当前仓库中 module.py 声明的版本即为1.0.1,与该历史版本保持一致。

六、小结

w2v_baidu_encyclopedia_target_word-wordLR_dim300是一个覆盖约 63.6 万中文词、维度为 300 的静态预训练词向量模块。通过hub install安装后,既可借助search/cosine_sim/dot/get_tokenizer等 API 在本地完成词向量查询、相似度计算与中文分词,也可通过hub serving start -m将其部署为默认端口 8866 的在线相似度计算服务。其底层由 PaddleNLP 的TokenEmbedding与 PaddleHub 的EmbeddingModule框架支撑,词表、权重自动下载缓存,OOV 词统一以unknown_token处理,开箱即用,适合作为中文 NLP 任务中词级特征提取与语义相似度计算的基础组件。

  • 人工智能
  • 大模型
  • 微调
  • 模型推理服务

【免费下载链接】PaddleFormers

PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleFormers
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询