词向量

one-hot表示

每个词表示为一个长向量。这个向量的维度就是词表大小,向量中只有一个维度的值为1,其余维度为0
不能展示词与词之间的关系,且特征空间非常大。

分布式表示

word embedding。词向量
表示成一个定长的连续的稠密向量。

分布式表示优点:
(1)词之间存在相似关系:是词之间存在“距离”概念
(2)包含更多的信息,每一维都有特定的含义。

word2vec

预训练词向量

加载TokenEmbedding
tokenEmbedding()参数

embedding_name 模型名称以参数形式传入TokenEmbeddings
w2v.baidu_encyclopedia.target.word-word.dim300的词向量

unknow_token 未知token的表示,默认为[UNK]

unknown_token_vector 未知token的向量表示,默认生成和embedding维数一致,数值均值为0的正态分布向量

extended_vocab_path 扩展词汇列表文件路几个,词表格式一行一个词。

trainable embedding曾是否可悲训练
默认为TRUE

from paddlenlp.embeddings import TokenEmbedding# # 初始化TokenEmbedding, 预训练embedding未下载时会自动下载并加载数据
token_embedding = tokenEmbedding(embedding_name="w2v.baidu_encyclopedia.target.word-word.dim300)# 查看token_embedding详情
print(token_embedding)

认识embedding

TokenEmbedding.search() 获得指定词汇的词向量

test_token_embedding = token_embedding.search("中国")
print(test_token_embedding)


TokenEmbedding.cosine_sim() 计算词向量间余弦相似度,语义相近的词语余弦相似度更高,说明预训练好的词向量空间有很好的语义表示能力。

score1 = token_embedding.cosine_sim("女孩","女人")
score2 = token_embedding.cosine_sim("女孩","书籍")
print('score1:',score1)
print('score2:',score2)


score1 有更好的相似性

词向量映射到低微空间

# 获取词表中前1000个单词
labels = token_embedding.vocab.to_tokens(list(range(0,1000)))# 取出这1000个单词对应的embedding
test_token_embedding = token_embedding.search(labels)# 引入visualDL的logWriter记录日志
from visualdl import LogWriter
with LogWriter(logdir = './token_hidi') as writer:writer.add_embedding(tag='test',mat=[i for i in test_token_embedding],matadata= labels)

基于TokenEmbedding衡量句子语义相似度

词袋模型(Bag of Words,简称BoW)计算语义向量

首先,将两个句子分别进行切词,并在TokenEmbedding中查找相应的单词词向量(word embdding)。

然后,根据词袋模型,将句子的word embedding叠加作为句子向量(sentence embedding)。

最后,计算两个句子向量的余弦相似度。

基于TokenEmbedding的词袋模型

使用BoWEncoder 搭建一个BoW模型用于计算句子语义。

paddlenlp.TokenEmbedding 组建word-embedding层
paddlenlp.seq2vec.BoWEncoder 组建句子建模层

import paddle
import paddle.nn as nn
import paddlenlpclass BoWModel(nn.Layer):def __init__(self,embedder):super().init_()self.embedder = embedderem_dim = self.embedder.embedding_dimself.encoder = paddlenlp.seq2vec.BoWEncoder(eb_dim)self.cos_sim_func = nn.CosineDimilarity(axis=-1)def get_cos_sim(self,text_a,text_b):text_a_embedding = self.forward(text_a)text_b_embedding = self.forward(text_b)cos_sim = self.cos_sim_func(text_a_embedding,text_b_embedding)return cos_simdef forward(self,text):embedded_text = self.embedder(text)summed = self.encoder(embedded_text)return summedmodel = BoWModel(embedder = token_embedding)

构造Tokenizer

使用tokenEmbedding词表构造Tokenizer

from data import Tokenizer
tokenizer = Tokenizer()
toenizer.set_vocab(vocab=token_embedding.vocab)

相似句对数据读取

以提供的样例数据text_pair.txt为例,该数据文件每行包含两个句子

text_pairs = {}
with open("text_pair.txt","r",encoding="utf8") as f:for line in f:text_a,text_b = line.strip().split("\t")if text_a not in text_pairs:text_pairs[text_a]=[]text_pairs[text_a].append(text_b)

查看相似语句相关度

for text_a, text_b_list in text_pairs.items():text_a_ids = paddle.to_tensor([tokenizer.text_to_ids(text_a)])for text_b in text_b_list:text_b_ids = paddle.to_tensor([tokenizer.text_to_ids(text_b)])print("text_a: {}".format(text_a))print("text_b: {}".format(text_b))print("cosine_sim: {}".format(model.get_cos_sim(text_a_ids, text_b_ids).numpy()[0]))print()

使用VisualDL查看句子向量


# 引入VisualDL的LogWriter记录日志
import numpy as np
from visualdl import LogWriter
# 获取句子以及其对应的向量
label_list = []
embedding_list = []for text_a, text_b_list in text_pairs.items():text_a_ids = paddle.to_tensor([tokenizer.text_to_ids(text_a)])embedding_list.append(model(text_a_ids).flatten().numpy())label_list.append(text_a)for text_b in text_b_list:text_b_ids = paddle.to_tensor([tokenizer.text_to_ids(text_b)])embedding_list.append(model(text_b_ids).flatten().numpy())label_list.append(text_b)with LogWriter(logdir='./sentence_hidi') as writer:writer.add_embeddings(tag='test', mat=embedding_list, metadata=label_list)

9.7-一定要开始学了相关推荐

  1. 关于新技术的引入原则 ——从零开始学架构

    不以解决实际问题引入的技术都耍流氓. 新技术的引入不是为了证明自己,而是为了解决实际项目中遇到的问题.希望诸位能够控制住自己的心魔. 新技术的引入要求应该是解决的问题大于带来的问题. 再引入新技术,请 ...

  2. Java学到什么水平能够出去找工作!

    Java学到什么水平能够出去找工作!搞定这些技术吧! 1.JavaSE内容 环境搭建,基础语法,面向对象,数组,集合,常用API,IO流,反射机制,多线程,网络编程 要求: 利用这些基础知识,写出一个 ...

  3. 合肥工业大学—SQL Server数据库实验五:创建和删除索引

    创建和删除索引 1. 用SQL语句建立索引 2. 用SQL语句删除索引Stuspno 1. 用SQL语句建立索引 (1)应用场景:在教务管理系统中,经常需要通过学生的姓名查询学生的基本信息,学生人数大 ...

  4. 合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表

    SQL语句创建和删除基本表 1. 编写6个基本表 2. 修改基本表结构,完整性约束条件 3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系 ...

  5. 零起点学算法104——第几天?

    零起点学算法104--第几天? Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lld Description 给定一个日期,输 ...

  6. 零起点学算法24——求正弦和余弦

    零起点学算法24--求正弦和余弦 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 输入一个正整数n ...

  7. 零起点学算法22——华氏摄氏温度转换

    零起点学算法22--华氏摄氏温度转换 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 输入一个华氏 ...

  8. 零起点学算法17——比较2个数大小

    零起点学算法17--比较2个数大小 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 输入2个整数, ...

  9. 零起点学算法11——求梯形面积

    零起点学算法11--求梯形面积 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 水题 Input ...

  10. 零起点学算法10——求圆柱体的表面积

    零起点学算法10--求圆柱体的表面积 Description 很简单的问题,求圆柱体的表面积 Input 多组测试数据,每组输入底面半径r和高h Output 每组输出圆柱体的表面积,保留3位小数 S ...

最新文章

  1. NASA发现超级地球,真的适宜居住?
  2. displaynone符合html5标准,javascript – JS HTML5验证“display:none”必需的输入元素
  3. tomcat日志,用户以及启动时的一些问题
  4. 一维数组的初始化问题(函数体内与函数体外)
  5. php 小程序 运动步数_微信小程序步数运动-收益讲解
  6. 系统架构设计师-软件水平考试(高级)-理论-项目管理
  7. 原有磁盘上创建lvm_lt;Linuxgt; LVM 原理及应用
  8. 【优化算法】饥饿游戏搜索算法(HGS)【含Matlab源码 1802期】
  9. 数据挖掘概念与技术(原书第三版)范明 孟小峰译-----第一章课后习题答案
  10. c#打包安装程序[VS2010]
  11. 【读书笔记】向上-张自豪:清华学霸的成长之路
  12. python已知三角形的顶点坐标,求任一顶点角度
  13. ONLYOFFICE 如何连接集成到 Wordpress 上
  14. 关于Bmob的后端云的使用---傻瓜式数据库操作
  15. JavaScript模块化功能使用总结
  16. 项目反应理论 matlab,IRTPRO | 项目反应理论软件
  17. mysql三张表 left join
  18. Navicat Premium安装教程(激活)
  19. 数据库常用增删改查sql语句(二)
  20. 移动磁盘显示无法访问设备未就绪,里面的资料如何找到

热门文章

  1. I.MX6 Linux mipi配置数据合成
  2. 百度音乐全接口 API
  3. 托福 独立写作题型分类与总结
  4. (CVPR-2020)动态卷积:注意力卷积核
  5. Day10-feign结合Hystrix使用-p163、p164
  6. 解析访问www.baidu.com百度的流程?
  7. java人品计算器,‎App Store 上的“围棋死活大全”
  8. stranded 和 non-stranded RNA-seq
  9. 管理经济分析05:并购、价格歧视、四个市场、招标与拍卖
  10. 基于matlab的声音识别