新书《基于PyTorch的自然语言处理》的详细笔记!
主要是对这本书的代码部分的理解和处理,整理了处理方法的过程,这样可以给刚刚步入NLP的学者提供一些帮助。
博客的内容是按照文章章节的部分来整理的,大家可以选择部分内容进行学习。
这部分主要是介绍了PyTorch中张量的基本概念,张量的类型大小,张量的基本操作,索引,切片和连接。
这里解决习题的代码:
import torch
# 1.随机创建一个二维张量,然后第0维插入1个维度
a = torch.rand(3, 3)
a.unsqueeze(0)
print(a)
# 2.去掉刚刚加入张量上的维度
a.squeeze(0)
print(a)
# 3.在区间[3, 7]中创建一个形状为5*3的随机向量
a = 3 + torch.rand(5, 3)*(7-3)
print(a)
# 4.创建一个具有正态分布(mean = 0, std = 1)值的张量
a = torch.rand(3,3)
a.normal_()
print(a)
print(a.normal_())
# 5.找到torch.Tensor([1,1,1,0,1])中所有非零元素的索引
a = torch.Tensor([1,1,1,0,1])
print(torch.nonzero(a))
# 6.创建一个大小为(3,1)的随机张量,水平扩展4个副本
a = torch.rand(3,1)
print(a.expand(3, 4))
# 7.返回两个3维矩阵的乘积(a=torch.rand(3,4,5), b=torch.rand(3,5,4))
a = torch.rand(3,4,5)
b = torch.rand(3,5,4)
print(torch.bmm(a,b))
# 8.返回一个3维矩阵和一个2维矩阵的乘积(a=torch.rand(3,4,5), b=torch.rand(5,4))
a = torch.rand(3,4,5)
b = torch.rand(5,4)
print(b.unsqueeze(0).expand(a.size(0), *b.size()))
print(torch.bmm(a, b.unsqueeze(0).expand(a.size(0), *b.size())))
刚开始使用spacy包时,导入“en”.
import spacy
nlp = spacy.load("en")
text = "Mary, don't slap the green witch"
print([str(token) for token in nlp(text.lower())])
会出现以下问题:
OSError: [E050] Can’t find model ‘en’.
It doesn’t seem to be a shortcut link, a Python package or a valid path to a data directory
解决方法一:
参考博客:https://blog.csdn.net/mr_muli/article/details/111592360
from spacy.lang.en import English
# 如下会报错:
# import spacy
# spacy_en = spacy.load('en')
# return lambda s: [tok.text for tok in spacy_en.tokenizer(s)]
# 替换之后:
from spacy.lang.en import English
spacy_en = English()
return lambda s: [tok.text for tok in spacy_en.tokenizer(s)]
解决方法二:
参考博客:https://github.com/hamelsmu/Seq2Seq_Tutorial/issues/1
参考博客:https://www.cnblogs.com/zrdm/p/8667131.html(这个是解决方法)
点击en_core_web_sm获得en_core_web_sm-2.2.0.tar
获得en_core_web_sm-2.2.0.tar后:
参考这篇博客:https://www.cnblogs.com/xiaolan-Lin/p/13286885.html
然后执行:
pip install en_core_web_sm-2.2.0.tar.gz
最后,代码如下:
import spacy
nlp = spacy.load("en_core_web_sm")
# nlp = spacy.load('en')
text = "Mary, don't slap the green witch"
print([str(token) for token in nlp(text.lower())])