【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词

本文将介绍如何使用已经在大规模语料上预训练的词向量模型来求近义词和类比词。

1. 下载预训练的词向量

基于PyTorch的关于自然语言处理的常用包有官方的torchtext以及第三方的pytorch-nlp等等。你可以使用pip很方便地按照它们,例如命令行执行

pip install torchtext

详情请参见其README。

本节我们使用torchtext进行练习。下面查看它目前提供的预训练词嵌入的名称。

import torch
import torchtext.vocab as vocab
vocab.pretrained_aliases.keys()

输出:

dict_keys(['charngram.100d', 'fasttext.en.300d', 'fasttext.simple.300d', 'glove.42B.300d', 'glove.840B.300d', 'glove.twitter.27B.25d', 'glove.twitter.27B.50d', 'glove.twitter.27B.100d', 'glove.twitter.27B.200d', 'glove.6B.50d', 'glove.6B.100d', 'glove.6B.200d', 'glove.6B.300d'])

下面查看查看该glove词嵌入提供了哪些预训练的模型。每个模型的词向量维度可能不同,或是在不同数据集上预训练得到的。

[key for key in vocab.pretrained_aliases.keys()
        if "glove" in key]

输出:

['glove.42B.300d',
 'glove.840B.300d',
 'glove.twitter.27B.25d',
 'glove.twitter.27B.50d',
 'glove.twitter.27B.100d',
 'glove.twitter.27B.200d',
 'glove.6B.50d',
 'glove.6B.100d',
 'glove.6B.200d',
 'glove.6B.300d']

预训练的GloVe模型的命名规范大致是“模型.(数据集.)数据集词数.词向量维度”。下面我们使用基于维基百科子集预训练的50维GloVe词向量。第一次创建预训练词向量实例时会自动下载相应的词向量到cache指定文件夹(默认为.vector_cache),因此需要联网。

cache_dir = "./Datasets/glove"   # 预训练模型的下载目录
# glove = vocab.pretrained_aliases["glove.6B.50d"](cache=cache_dir)
glove = vocab.GloVe(name='6B', dim=50, cache=cache_dir) # 与上面等价

返回的实例主要有以下三个属性:

  • stoi: 词到索引的字典:
  • itos: 一个列表,索引到词的映射;
  • vectors: 词向量。

打印词典大小。其中含有40万个词。

print("一共包含%d个词。" % len(glove.stoi))

输出:

一共包含400000个词。

我们可以通过词来获取它在词典中的索引,也可以通过索引获取词。

glove.stoi['beautiful'], glove.itos[3366] # (3366, 'beautiful')

2. 应用预训练词向量

下面我们以GloVe模型为例,展示预训练词向量的应用。

2.1 求近义词

为了在求类比词时重用其中的求k kk近邻(k kk-nearest neighbors)的逻辑,我们将这部分逻辑单独封装在knn函数中。

def knn(W, x, k):
    # 添加的1e-9是为了数值稳定性
    cos = torch.matmul(W, x.view((-1,))) / (
        (torch.sum(W * W, dim=1) + 1e-9).sqrt() * torch.sum(x * x).sqrt())
    _, topk = torch.topk(cos, k=k)
    topk = topk.cpu().numpy()
    return topk, [cos[i].item() for i in topk]

然后,我们通过预训练词向量实例embed来搜索近义词。

def get_similar_tokens(query_token, k, embed):
    # query_token:待搜索词
    # k:最相近的k个词
    # embed:预训练好的词向量模型
    topk, cos = knn(embed.vectors,
                    embed.vectors[embed.stoi[query_token]], k+1)
    for i, c in zip(topk[1:], cos[1:]):  # 除去输入词
        print('cosine sim=%.3f: %s' % (c, (embed.itos[i])))

已创建的预训练词向量实例glove_6b50d的词典中含40万个词和1个特殊的未知词。除去输入词和未知词,我们从中搜索与“chip”语义最相近的3个词。

get_similar_tokens('chip', 3, glove)

输出:

cosine sim=0.856: chips
cosine sim=0.749: intel
cosine sim=0.749: electronics

接下来查找“baby”和“beautiful”的近义词。

get_similar_tokens('baby', 3, glove)

输出:

cosine sim=0.839: babies
cosine sim=0.800: boy
cosine sim=0.792: girl
get_similar_tokens('beautiful', 3, glove)

输出:

cosine sim=0.921: lovely
cosine sim=0.893: gorgeous
cosine sim=0.830: wonderful

2.2 求类比词

除了求近义词以外,我们还可以使用预训练词向量求词与词之间的类比关系。例如,“man”(男人): “woman”(女人):: “son”(儿子) : “daughter”(女儿)是一个类比例子:“man”之于“woman”相当于“son”之于“daughter”。求类比词问题可以定义为:对于类比关系中的4个词a:b::c:d,给定前3个词abc cc,求d。设词w的词向量为vec(w)。求类比词的思路是,搜索与vec(c)+vec(b)vec(a)的结果向量最相似的词向量。

def get_analogy(token_a, token_b, token_c, embed):
    vecs = [embed.vectors[embed.stoi[t]] 
                for t in [token_a, token_b, token_c]]
    x = vecs[1] - vecs[0] + vecs[2]
    topk, cos = knn(embed.vectors, x, 1)
    return embed.itos[topk[0]]

验证一下“男-女”类比。

get_analogy('man', 'woman', 'son', glove) # 输出:'daughter'

“首都-国家”类比:“beijing”(北京)之于“china”(中国)相当于“tokyo”(东京)之于什么?答案应该是“japan”(日本)。

get_analogy('beijing', 'china', 'tokyo', glove) # 输出:'japan'

“形容词-形容词最高级”类比:“bad”(坏的)之于“worst”(最坏的)相当于“big”(大的)之于什么?答案应该是“biggest”(最大的)。

get_analogy('bad', 'worst', 'big', glove) # 输出:'biggest'

“动词一般时-动词过去时”类比:“do”(做)之于“did”(做过)相当于“go”(去)之于什么?答案应该是“went”(去过)。

get_analogy('do', 'did', 'go', glove) # 输出:'went'


相关文章
|
7天前
|
机器学习/深度学习 数据采集 人工智能
PyTorch学习实战:AI从数学基础到模型优化全流程精解
本文系统讲解人工智能、机器学习与深度学习的层级关系,涵盖PyTorch环境配置、张量操作、数据预处理、神经网络基础及模型训练全流程,结合数学原理与代码实践,深入浅出地介绍激活函数、反向传播等核心概念,助力快速入门深度学习。
37 1
|
4月前
|
数据采集 机器学习/深度学习 自然语言处理
NLP助力非结构化文本抽取:实体关系提取实战
本文介绍了一套基于微博热帖的中文非结构化文本分析系统,通过爬虫代理采集数据,结合NLP技术实现实体识别、关系抽取及情感分析。核心技术包括爬虫模块、请求配置、页面采集和中文NLP处理,最终将数据结构化并保存为CSV文件或生成图谱。代码示例从基础正则规则到高级深度学习模型(如BERT-BiLSTM-CRF)逐步演进,适合初学者与进阶用户调试与扩展,展现了中文NLP在实际场景中的应用价值。
277 3
NLP助力非结构化文本抽取:实体关系提取实战
|
3月前
|
数据采集 缓存 自然语言处理
NLP驱动网页数据分类与抽取实战
本文探讨了使用NLP技术进行网页商品数据抽取时遇到的三大瓶颈:请求延迟高、结构解析慢和分类精度低,并以目标站点goofish.com为例,展示了传统方法在采集商品信息时的性能问题。通过引入爬虫代理降低封禁概率、模拟真实用户行为优化请求,以及利用关键词提取提升分类准确性,实现了请求成功率从65%提升至98%,平均请求耗时减少72.7%,NLP分类错误率下降73.6%的显著优化效果。最终,代码实现快速抓取并解析商品数据,支持价格统计与关键词分析,为构建智能推荐模型奠定了基础。
NLP驱动网页数据分类与抽取实战
|
7月前
|
机器学习/深度学习 数据可视化 算法
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
358 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
|
11月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
1346 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
从词袋到Transformer:自然语言处理的演进与实战
自然语言处理(NLP)是人工智能的重要分支,从早期的规则系统发展到如今的深度学习模型,经历了词袋模型、词嵌入、RNN/LSTM/GRU,再到革命性的Transformer架构。本文通过代码和案例详细介绍了这些技术的演进,并展示了如何从简单的词袋模型过渡到强大的Transformer,涵盖文本分类等实战应用,帮助读者深入理解NLP的核心技术和未来发展潜力。
|
9月前
|
人工智能 自然语言处理
Promptriever:信息检索模型,支持自然语言提示响应用户搜索需求
Promptriever 是一种新型信息检索模型,由约翰斯·霍普金斯大学和 Samaya AI 联合推出。该模型能够接受自然语言提示,并以直观的方式响应用户的搜索需求。通过在 MS MARCO 数据集上的训练,Promptriever 在标准检索任务上表现出色,能够更有效地遵循详细指令,提高查询的鲁棒性和检索性能。
186 6
Promptriever:信息检索模型,支持自然语言提示响应用户搜索需求
|
10月前
|
机器学习/深度学习 自然语言处理 语音技术
探索深度学习中的Transformer模型及其在自然语言处理中的应用
探索深度学习中的Transformer模型及其在自然语言处理中的应用
441 5
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
467 1
|
10月前
|
机器学习/深度学习 自然语言处理 PyTorch
从零开始构建nlp情感分析模型!
本教程介绍了如何使用PyTorch和Hugging Face的Transformers库构建一个情感分析模型。主要内容包括导入所需库、读取训练数据集、加载预训练的BERT模型和分词器、定义情感数据集类、划分训练集和验证集、创建数据加载器、设置训练参数、训练模型、评估模型性能以及定义和测试预测函数。通过这些步骤,可以实现一个简单而有效的情感分析模型。
868 2

推荐镜像

更多