ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleHub 语言模型(Language Model)模块实战指南:词嵌入、语义匹配与预训练语义模型全解析

PaddleHub 语言模型(Language Model)模块实战指南:词嵌入、语义匹配与预训练语义模型全解析 人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载本指南以本仓库 modules/text/language_model 目录为核心系统梳理 PaddleHub 语言模型模块的模型家族与实战用法。你将掌握三类核心能力基于word2vec_skipgram为下游任务提供可微调的词嵌入、基于simnet_bow完成短文本相似度计算、基于ERNIE等预训练语义模型完成文本分类与序列标注并学会通过 PaddleHub Serving 将模型一键部署为在线服务。一、模块概览language_model 目录里有什么language_model目录是 PaddleHub 自然语言处理能力中“语言模型Language Model”的集中承载区目录下每个子目录都是一个可独立安装、加载的 PaddleHub Module。从目录结构看该模块家族可大致分为三类推荐模型word2vec_skipgram词嵌入、simnet_bow文本相似度、ernie知识增强语义模型即官方推荐的首选模型Transformer 预训练语言模型家族bert-*、albert-*、electra_*、chinese_electra_*、roberta-wwm-ext*、rbt3/rbtl3、ernie_tiny、ernie_v2_eng_*等可用于文本分类、序列标注、文本匹配等迁移学习任务主题模型lda_news、lda_novel、lda_webpage以及slda_news、slda_novel、slda_webpage、slda_weibo用于文档主题分布推理与语义距离计算。官方文档给出的推荐模型如下信息完整保留自 README_en.md模型名称模块简介word2vec_skipgram在海量百度搜索数据集下预训练得到中文单词预训练词嵌入支持 Fine-tune。预训练数据集词汇表大小为 1700249词嵌入维度为 128。simnet_bow根据用户输入的两个文本计算文本相似度得分。ERNIE基于百科类、资讯类、论坛对话类数据等中文语料自研的模型可用于文本分类、序列标注、阅读理解等任务。下面逐一展开这三个推荐模型并结合仓库内的子模块文档与源码说明底层实现。二、词嵌入模型 word2vec_skipgram为迁移学习提供可微调词向量模型基本信息word2vec_skipgram是常用的词嵌入word embedding模型基于 Skip-gram 网络结构在海量百度搜索数据集下预训练得到中文单词预训练词嵌入。其元信息见 modules/text/embedding/word2vec_skipgram/README.md如下属性值类别文本-词嵌入网络skip-gram数据集百度自建数据集是否支持 Fine-tuning是模型大小861MB词汇表大小1700249词嵌入维度128安装与环境依赖环境依赖paddlepaddle 1.8.2、paddlehub 1.8.0PaddleHub 的安装方式可参考 docs/docs_ch/get_start/installation.rst。安装命令$ hub install word2vec_skipgramFine-tune 代码示例与 context API该模块的核心价值在于向自定义模型提供预训练词向量。加载模块后通过context()接口取回输入变量与输出变量即可将词嵌入接入自己的网络实现迁移学习import paddlehub as hub # 加载 word2vec 预训练模型 module hub.Module(nameword2vec_skipgram) inputs, outputs, program module.context(trainableTrue) # 必须提供模块所需的全部输入张量 word_ids inputs[text] # 使用预训练词嵌入 embedding outputs[emb]context接口签名与参数含义context(trainableFalse, max_seq_len128, num_slots1)参数类型说明trainablebool为True时program 中的参数在 Fine-tune 阶段会被微调否则保持不变。max_seq_lenint模型使用的最大序列长度。num_slotsint输入到模型所需的文本个数单句文本分类任务传1pointwise 文本匹配任务传2pairwise 文本匹配任务传3。返回值为inputsprogram 的输入变量、outputsprogram 的输出变量与main_program携带预训练参数的 program三者的字典/对象。从版本历史看1.1.0 版本起模型支持用于文本分类、文本匹配等各种任务的迁移学习这与context中num_slots支持多槽位输入的设定是配套的。三、短文本语义匹配模型 simnet_bow两句话算出相似度模型基本信息simnet_bow是短文本语义匹配模型SimilarityNet, SimNet的 PaddleHub 实现根据用户输入的两个文本计算相似度得分。SimNet 在百度各产品上广泛应用适用于信息检索、新闻推荐、智能客服等场景。该 Module 基于 BOWBag-of-Words网络结构支持预测。属性值类别文本-语义匹配网络BOW数据集百度自建数据集是否支持 Fine-tuning否模型大小245MB命令行预测$ hub run simnet_bow --text_1 这道题很难 --text_2 这道题不简单命令行方式调用模块的更多参数如--use_gpu、--batch_size、--input_file定义在 simnet_bow/module.py 的add_module_config_arg与add_module_input_arg中其中--input_file支持从文件批量读取待预测文本。命令行机制的通用说明可参考 docs/docs_ch/tutorial/cmd_usage.rst。Python 预测代码示例import paddlehub as hub simnet_bow hub.Module(namesimnet_bow) # 待预测数据 test_text_1 [这道题太难了, 这道题太难了, 这道题太难了] test_text_2 [这道题是上一年的考题, 这道题不简单, 这道题很有意思] inputs {text_1: test_text_1, text_2: test_text_2} results simnet_bow.similarity(datainputs, batch_size2) print(results) # [{text_1: 这道题太难了, text_2: 这道题是上一年的考题, similarity: 0.689}, # {text_1: 这道题太难了, text_2: 这道题不简单, similarity: 0.855}, # {text_1: 这道题太难了, text_2: 这道题很有意思, similarity: 0.8166}]API 说明similarity(texts[], use_gpuFalse, batch_size1)参数类型说明textslist待预测数据第一个元素list为第一顺序句子集合第二个元素list为第二顺序句子集合两个元素长度需相同如[[这道题太难了, ...], [这道题不简单, ...]]。use_gpubool是否使用 GPU 预测使用 GPU 前需设置CUDA_VISIBLE_DEVICES环境变量否则会抛出RuntimeError。batch_sizeint批处理大小。返回值results为包含text_1、text_2与similaritycosine 相似度保留 4 位小数的字典列表。另有一个辅助接口get_vocab_path()返回预训练时使用的词汇表路径assets/vocab.txt。源码级实现解析从 simnet_bow/module.py 可以看到其实现并不依赖 Paddle 动态图而是直接使用paddle.inference的Config与create_predictor构建 CPU/GPU 预测器module.py#L65-L85预训练推理模型位于模块目录的assets/infer_model词汇表与参数信息分别位于assets/vocab.txt与assets/params.txt预处理阶段processor.py#L24-L46会先调用lac分词模块对文本做词法分析再将每个词通过词汇表映射为词 id未登录词统一映射为unk推理阶段module.py#L143-L205按batch_size切片为两个输入张量设置 LoD 与形状后调用predictor.run()后处理阶段processor.py#L49-L59将模型输出张量转换为四舍五入保留 4 位小数的similarity字段。这意味着simnet_bow是一个轻量、可直接离线部署的推理模块无需训练框架即可运行。服务化部署PaddleHub Serving第一步启动 PaddleHub Serving$ hub serving start -m simnet_bow启动成功后会显示Loading simnet_bow successful.默认端口号为 8866。如需 GPU 预测须在启动前设置CUDA_VISIBLE_DEVICES环境变量。第二步发送预测请求import requests import json # 待预测数据 test_text_1 [这道题太难了, 这道题太难了, 这道题太难了] test_text_2 [这道题是上一年的考题, 这道题不简单, 这道题很有意思] text [test_text_1, test_text_2] # 对应本地预测 simnet_bow.similarity(textstext, batch_size1, use_gpuTrue) data {texts: text, batch_size: 1, use_gpu: True} # HOST_IP 为服务器 IP url http://HOST_IP:8866/predict/simnet_bow headers {Content-Type: application/json} r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(json.dumps(r.json(), indent4, ensure_asciiFalse))PaddleHub Serving 的通用部署流程可参考 docs/docs_ch/tutorial/serving.md。四、知识增强语义模型 ERNIE文本分类、序列标注与文本匹配模型基本信息ernie是百度提出的基于知识增强的持续学习语义理解模型将大数据预训练与多源丰富知识相结合通过持续学习技术不断吸收海量文本数据中词汇、结构、语义等方面的知识使模型效果持续进化。其元信息见 ernie/README.md如下属性值类别文本-语义模型网络ernie-1.0数据集百度自建数据集是否支持 Fine-tuning是模型大小384MB预训练最大序列长度512安装与环境依赖环境依赖paddlepaddle 2.0.0、paddlehub 2.0.0。安装命令$ hub install ernie如需指定版本如 2.0.2可执行hub install ernie2.0.2。预测代码示例import paddlehub as hub data [ [这个宾馆比较陈旧了特价的房间也很一般。总体来说一般], [怀着十分激动的心情放映可是看着看着发现在放映完毕后出现一集米老鼠的动画片], [作为老的四星酒店房间依然很整洁相当不错。机场接机服务很好可以在车上办理入住手续节省时间。], ] label_map {0: negative, 1: positive} model hub.Module( nameernie, version2.0.2, taskseq-cls, load_checkpoint/path/to/parameters, label_maplabel_map) results model.predict(data, max_seq_len50, batch_size1, use_gpuFalse) for idx, text in enumerate(data): print(Data: {} \t Label: {}.format(text, results[idx]))结合预训练模型做迁移学习的端到端示例可参考 demo/text_classification文本分类与 demo/sequence_labeling序列标注。构造参数与 predict / get_embedding APIdef __init__( taskNone, load_checkpointNone, label_mapNone, num_classes2, suffixFalse, **kwargs, )参数说明task任务名称可为seq-cls文本分类、token-cls序列标注或text-matching文本匹配。load_checkpoint使用 PaddleHub Fine-tune API 训练保存的模型参数文件路径。label_map预测时的类别映射表指定后num_classes自动取映射表长度。num_classes分类任务类别数默认 2 分类指定了label_map时可不传。suffix序列标注任务的标签格式标记为True时标签以-B、-I、-E或-S结尾默认False。def predict( data, max_seq_len128, batch_size1, use_gpuFalse )data待预测数据格式为[[sample_a_text_a, sample_a_text_b], [sample_b_text_a, sample_b_text_b], ...]每个样例可包含text_a与text_b每个样例的文本数量1 个或 2 个需与训练时保持一致max_seq_len模型处理文本的最大长度batch_size批处理大小use_gpu是否使用 GPU默认FalseGPU 用户建议开启。返回值results为 list 类型不同任务返回不同结构文本分类任务返回每个句子的预测标签列表序列标注任务返回每个句子中每个 token 的预测标签列表。另有get_embedding(data, use_gpuFalse)接口用于获取输入文本的句子粒度特征pooled_feature与字粒度特征seq_feature返回格式为[[pooled_a, seq_a], [pooled_b, seq_b], ...]。源码级实现解析从 ernie/module.py 可以看出2.0.x 版本已全面升级为 Paddle 动态图实现底层基于 PaddleNLP 的ErnieModel、ErnieForSequenceClassification、ErnieForTokenClassification组网module.py#L22-L27。构造函数根据task分派网络module.py#L60-L84seq-cls加载ErnieForSequenceClassification损失函数为CrossEntropyLoss评估指标为Accuracytoken-cls加载ErnieForTokenClassification并使用ChunkEvaluator按label_map与suffix计算序列标注指标text-matching加载ErnieModel作为双塔编码器拼接 query 与 title 的池化特征hidden_size 的 3 倍后经Linear输出 2 分类 logits不指定task时仅加载ErnieModel本体可作为通用语义编码器。若传入load_checkpoint且文件存在会通过paddle.load加载参数并覆盖模型权重。2.0.2 版本的moduleinfo元信息module.py#L30-L38同时注明其预训练时max_seq_len512与 1.1.0 版本更新记录一致。服务化部署与前述 Serving 流程一致ERNIE 也可一键服务化$ hub serving start -m ernie默认端口号为 8866然后通过 HTTP 请求获取预测结果请求体以data为 key 传入对应本地调用module.get_embedding(datatext)import requests import json text [[今天是个好日子], [天气预报说今天要下雨]] data {data: text} url http://127.0.0.1:8866/predict/ernie headers {Content-Type: application/json} r requests.post(urlurl, headersheaders, datajson.dumps(data)) print(r.json())五、更多 Transformer 预训练语言模型家族除推荐模型外language_model目录还聚合了完整的 Transformer 语言模型家族均支持 Fine-tuning可作为下游 NLP 任务的基座BERT 系列bert-base-chinese、bert-base-uncased、bert-base-cased、bert-base-multilingual-*、bert-large-*以及chinese_bert_wwm、chinese_bert_wwm_ext等中文预训练变体ALBERT 系列albert-base-v1/v2、albert-xxlarge-v1/v2以及面向中文的albert-chinese-base/large/small/tiny/xlarge/xxlarge全套规格ELECTRA 系列electra_base、electra_large、electra_small与chinese_electra_base、chinese_electra_smallRoBERTa 系列roberta-wwm-ext、roberta-wwm-ext-large、rbt3、rbtl3ERNIE 变体ernie_tiny轻量级、ernie_v2_eng_base、ernie_v2_eng_large。以 bert-base-chinese/README.md 为例其网络为bert-base-chinese、模型大小 681MBAPI 签名与 ERNIE 完全一致同样支持seq-cls/token-cls/text-matching三种任务以及predict、get_embedding接口和 8866 端口的 Serving 部署。也就是说读者只需把上述示例中的nameernie替换为namebert-base-chinese等任一模型名即可在不同基座间无缝切换进行效果对比或任务适配。六、主题模型LDA 与 SLDA 系列除神经语言模型外该模块还包含经典的主题模型实现以 lda_news/README.md 为代表。LDALatent Dirichlet Allocation以无监督方式对文档的隐含语义结构进行聚类通过词共现信息拟合词-文档-主题分布将词与文本映射到语义空间中。lda_news使用百度自建新闻领域数据集训练模型大小 19MB对应地还有小说领域lda_novel、网页领域lda_webpage以及可推断超参数的 SLDA 系列slda_news、slda_novel、slda_webpage、slda_weibo。预测代码示例import paddlehub as hub lda_news hub.Module(namelda_news) # 计算两个文档的距离 jsd, hd lda_news.cal_doc_distance(doc_text1今天的天气如何适合出去游玩吗, doc_text2感觉今天的天气不错可以出去玩一玩了) # jsd 0.003109, hd 0.0573171 # 短文档与长文档的相似度 lda_sim lda_news.cal_query_doc_similarity(query百度搜索引擎, document百度是全球最大的中文搜索引擎、致力于让网民更便捷地获取信息找到所求。百度超过千亿的中文网页数据库可以瞬间找到相关的搜索结果。) # LDA similarity 0.06826 # 提取文档关键词及与原文相似度 results lda_news.cal_doc_keywords_similarity(百度是全球最大的中文搜索引擎、致力于让网民更便捷地获取信息找到所求。百度超过千亿的中文网页数据库可以瞬间找到相关的搜索结果。) # [{word: 百度, similarity: 0.1294}, {word: 信息, similarity: 0.0614}, ...] # 推理文档主题分布 results lda_news.infer_doc_topic_distribution(最近有学者新出了一篇论文关于自然语言处理的可厉害了) # [{topic id: 216, distribution: 0.5222}, {topic id: 1789, distribution: 0.1889}, ...] # 查看指定主题的关键词 keywords lda_news.show_topic_keywords(topic_id216) # {研究: 0.1754, 学术: 0.1316, 论文: 0.1179, ...}API 一览API功能关键参数cal_doc_distance(doc_text1, doc_text2)计算两文档距离返回 JS 散度与海林格距离两个文档字符串cal_doc_keywords_similarity(document, top_k10)查找文档前 k 个关键词及与原文相似度document、top_kcal_query_doc_similarity(query, document)计算短文档与长文档的相似度query、documentinfer_doc_topic_distribution(document)推理文档的主题分布documentshow_topic_keywords(topic_id, k10)展示指定主题下前 k 个关键词及出现概率topic_id、k从实现结构看lda_news 目录下的model.py、inference_engine.py、sampler.py、document.py、vocab.py、vose_alias.py等文件LDA/SLDA 系列是一套独立的纯 Python 主题建模引擎不依赖 GPU非常适合文档聚类、文本检索、舆情分析等无监督场景。七、小结modules/text/language_model为开发者提供了覆盖“词级 → 句级 → 文档级”的完整语言模型工具链词级word2vec_skipgram提供 128 维、词汇表超 170 万的中文预训练词嵌入并通过context()支持各类下游任务的迁移学习句级simnet_bow以 BOW 网络快速计算短文本相似度ernie、bert-base-chinese等 Transformer 模型则以统一的seq-cls/token-cls/text-matching任务接口覆盖分类、标注与匹配场景文档级LDA/SLDA 系列提供主题分布推理、文档距离与关键词提取能力。所有模块统一遵循hub install安装、hub.Module(name...)加载、hub serving start -m ...部署的标准范式三个推荐模型的详细 API 与版本历史可分别查阅 ernie/README.md、simnet_bow/README.md 与 modules/text/embedding/word2vec_skipgram/README.md更多 PaddleHub 命令用法参见 docs/docs_ch/tutorial/cmd_usage.rst。赞分享人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐PaddleHub rbtl3 中文预训练语言模型模块实战文本分类、序列标注与语义向量服务PaddleHub rbtl3 中文预训练语言模型模块实战文本分类、序列标注与语义向量服务 导读 rbtl3 是 PaddleHub本仓库 paddlehu人工智能大模型微调模型推理服务sentence-transformers 预训练模型完整选型指南从通用嵌入到语义搜索、多语言与多模态sentence transformers 预训练模型完整选型指南从通用嵌入到语义搜索、多语言与多模态 导读 本文是一份基于 sentence transfo人工智能NLPEmbedding微调机器学习PaddleNLP XLM 多语言预训练模型全解析配置、模型与 BPE 分词器使用指南PaddleNLP XLM 多语言预训练模型全解析配置、模型与 BPE 分词器使用指南 导读 本文围绕 PaddleNLP 中 Facebook XLMCr人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇Element UIVue 2安装指南npm 与 CDN 双路径实战下一篇网盘直链下载助手完整指南轻松获取九大网盘真实下载地址创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表