中文NLP的第二步:分词转词表ID,基于 PaddleHub 实现(学习心得)

2023-11-16

上一步我们做了分词:
中文NLP的第一步:分词,基于 PaddleHub 实现,绝对小白友好(学习心得)

第二步是把分词结果,对照词表转化成 ID

词表是什么呢?

首先我们要知道,中文字符是没办法直接计算的,更不要说进一步的操作了,所以我们需要的是词嵌入,获得 word embedding,详见:
为什么NLP中需要词嵌入 word embeddings(学习心得)

而词语要转化为 word embedding 之前,先要根据词表转化为对应的序号 ID,这样转化程序才知道你转化的是哪个词

所以这里面是 2 重对应关系:

对应到
对应到
词语
词语的ID
词语的向量表示

这里我们直接使用 PaddleHub 提供的 word2vec_skipgram 模型

Word2vec 是常用的词嵌入(word embedding)模型。该PaddleHub Module基于Skip-gram模型,在海量百度搜索数据集下预训练得到中文单词预训练词嵌入。其支持Fine-tune。Word2vec的预训练数据集的词汇表大小为1700249,word embedding维度为128。

模型介绍:
word2vec_skipgram

模型论文:
Efficient Estimation of Word Representations in
Vector Space

程序实现:

import paddlehub as hub
from paddlehub.reader.tokenization import load_vocab

raw_data = [
    ["你觉得明天是个晴天吗","我看还是下雨的可能性大"],
    ["中国哪家公司的人工智能最牛呢"],
    ["我在山上看见爱因斯坦"],
    ["我把车把一把把住了"]
]

lac = hub.Module(name="lac")

tokens = []
for texts in raw_data:
    results = lac.lexical_analysis(texts=texts, use_gpu=False, batch_size=1)
    for result in results: # 取得结果列表中的一个元素
        print(result)
        tokens.append(result['word'])

# 这是把 中文词语 转化为 词表 中对应 ID 的函数
def convert_tokens_to_ids(vocab, tokens): # 输入为词表,和要转化的 text
    wids = [] # 初始化一个空的集合,用于存放输出
    #tokens = text.split(" ") # 将传入的 text 用 空格 做分割,变成 词语字符串 的列表
    for token in tokens: # 每次从列表里取出一个 词语
        wid = vocab.get(token, None)
        if not wid:
            wid = vocab["unknown"]
        wids.append(wid)
    return wids

module = hub.Module(name="word2vec_skipgram") # 实例化 word2vec_skipgram 模型

vocab = load_vocab(module.get_vocab_path()) # 获得 词表 字典

# 我们要获取词表,直接利用 paddlehub.reader.tokenization 中的 load_vocab 函数即可
# load_vocab 函数的输入是具体的词表文件,这里我们用 word2vec_skipgram 附带的词表
# 模块的实例化对象 module 下,用 get_vocab_path() 方法
# 该方法可以在指定的 Module 中(这里就是word2vec_skipgram)查找 assets 文件夹下面有没有 vocab.txt 文件
# 如果找到,则返回该文件的 具体文件路径
# load_vocab 函数的返回值是一个 字典,里面 key 为 词语,value 是词语对应的 ID

tokens_ids = []
for item in tokens:
    item_ids = convert_tokens_to_ids(vocab, item) # 获得组成句子的 词语 的 ID 列表
    tokens_ids.append(item_ids)

for i in range(len(tokens)):
    print("token: %s; id: %s" % (tokens[i], tokens_ids[i]))

运行结果:

token: ['你', '觉得', '明天', '是', '个', '晴天', '吗']; id: [42, 1405, 3867, 10, 132, 15549, 19]
token: ['我', '看', '还是', '下雨', '的', '可能性', '大']; id: [28, 104, 155, 9785, 4, 15268, 76]
token: ['中国', '哪家', '公司', '的', '人工智能', '最', '牛', '呢']; id: [38, 586, 99, 4, 3258, 115, 1721, 286]
token: ['我', '在', '山上', '看见', '爱因斯坦']; id: [28, 21, 19869, 4500, 18837]
token: ['我', '把', '车', '把', '一把把', '住', '了']; id: [28, 166, 244, 166, 400305, 1827, 17]

OK,词语的 ID 转化完成!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中文NLP的第二步:分词转词表ID,基于 PaddleHub 实现(学习心得) 的相关文章

随机推荐

  • cesium+vue-cli安装步骤

    1 依赖node所以先安装node 可从官网下载安装 安装一直下一步最后选安装目录 2 win r输入cmd运行 先输入node v和npm v查看node安装是否正常 我这里node是10 5 0 npm是6 1 0 3 安装vue np
  • Log4net等级说明以及按照不同级别写入多个日志文件

    等级说明 Level级别 DEBUG
  • canvas制作在线画板

    上效果图
  • ubuntu中使用Deb安装VS Code

    01 进入VS Code 下载安装包 网址 https code visualstudio com 02 将Windows系统中下载的deb安装包复制到虚拟机ubuntu中 03 进入虚拟机ubuntu中 通过cd命令进入到deb安装包目录
  • 点云配准注意的地方

    1 法向量是局部坐标系的概念 因此要将点云中心移到原点 再计算法向量 类似于先平移再旋转 而不是先旋转再平移 2 用kdtree时 用近邻点个数 而不是距离 因为点云各个不同 3 变换矩阵的对角线是目标与源点云的相似度 位移为0 x det
  • Unity小地图制作

    Unity小地图制作 方法一 简易版 如果角色有跳跃功能不建议使用 原理 利用一个新的摄像机来制作小地图 步骤 1 先搭建一个简单场景 2 在层级列表先创建一个摄像机 移出其中的Audio Listener组件 一个场景中只能有一个Audi
  • 题目 1054: 二级C语言-计算素数和

    输入两个正整数m和n m
  • 锁消除和锁粗化

    一 锁消除 JIT 及时编译器 对锁的优化 因为正常都是多个线程去竞争同一把锁 但是当前代码中每调用一次m1方法就会创建一个新的对象 也可以理解为每个线程对应了一把新的锁 没有竞争的情况 毫无意义 所以叫锁消除 锁消除 public cla
  • C语言实现数据高低位翻转

    通过指针转换为字节类型 直接交换 include
  • 73. Set Matrix Zeroes

    Given a m x n matrix if an element is 0 set its entire row and column to 0 Do it in place 这题有很多方法 一开始想的是用O m n 的空间 用vect
  • 使用Freemarker 实现JSP页面的静态化

    使用Freemarker 静态化网页 一 原理 Freemarker 生成静态页面 首先需要使用自己定义的模板页面 这个模板页面可以是最最普通的html 也可以是嵌套freemarker中的 取值表达式 标签或者自定义标签等等 然后后台读取
  • 【网络】Wireshark分析RST消息

    文章目录 前言 1 定义 2 有三个条件可以产生RST 3 说明 4 RST数据报文产生情况 1 端口未打开 系列文章 Wireshark分析Netty建链过程 tcp三次握手 osi模型 IPV4数据报头部格式 Wireshark分析RS
  • 数据结构双向链表,实现增删改查

    一 双向链表的描述 在单链表中 查找直接后继结点的执行时间为O 1 而查找直接前驱的执行时间为O n 为克服单链表这种单向性的缺点 可以用双向链表 在双向链表的结点中有两个指针域 一个指向直接后继 另一个指向直接前驱 二 双向链表的存储结构
  • Base64 转 文件下载

    将base64字符串转化为文件 1 将下面代码另存为html文件 2 用浏览器打开 3 点击下载 代码如下 div 输入base64字符串 div
  • opensips之yyparse( )

    parse the config file prior to this only default values e g for debugging settings will be used yyin cfg stream if yypar
  • HTTPS协议详解

    文章目录 一 HTTPS是什么 二 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 三 HTTPS 与 HTTP 的区别 区别 HTTPS的优缺点 总结 一 HTTPS是什么 HTTPS HTTPS 也是一个应用层协议
  • stm32f10x 时钟系统详解/时钟树/时钟初始化/SystemInit函数全注解

    STM32F10x 时钟系统初学总结 一 时钟系统 1 概述 用通俗的话来说 时钟是单片机的 脉搏 是单片机的驱动源 使用单片机中的任何一个外设都必须打开此外设相应的时钟 这样的好处是 在不使用某个外设的时候 关闭此时钟外设 从而可以降低系
  • 合并两个有序链表(精美图示详解哦)

    全文目录 引言 合并两个有序链表 题目描述 方法一 将第二个链表合并到第一个 思路 实现 方法二 尾插到哨兵位的头节点 思路 实现 总结 引言 在前面两篇文章中 我们介绍了几道链表的习题 反转链表 链表的中间结点 链表的倒数第k个结点 戳我
  • 深度学习实战28-AIGC项目:自动生成定制化的PPT文件

    大家好 我是微学AI 今天给大家介绍一下深度学习实战28 AIGC项目 自动生成定制化的PPT文件 AIGC项目是一个基于自然语言处理技术的创新性项目 旨在利用ChatGPT模型生成定制化的PPT文件 该项目主要应用于商务和教育领域 可以帮
  • 中文NLP的第二步:分词转词表ID,基于 PaddleHub 实现(学习心得)

    上一步我们做了分词 中文NLP的第一步 分词 基于 PaddleHub 实现 绝对小白友好 学习心得 第二步是把分词结果 对照词表转化成 ID 词表是什么呢 首先我们要知道 中文字符是没办法直接计算的 更不要说进一步的操作了 所以我们需要的