文本预处理的主要环节
文本处理基本方法
文本张量表示方法
文本语料的数据分析
文本特征处理
数据增强的方法
文本预处理方法
分词
词性标注
命名实体识别
文本张量的表示方法
one—hot 编码(不能计算不同单词之间的相似度)
Word2vd
Embedding
文本语料的数据分析
标签数量分布
句子长度分布
词频统计与关键词词云
文本特征处理
添加n—gram特征
文本长度规范
数据增强方法
回译数据增强法
文本预处理的方法
jieba分词
jieba.lcut()将生成器对象以列表的形式返回
在jieba.lcut(文本)的默认情况下,是精确模式分词
import jieba
content = “工信处女干事每月经过下属科室都要亲口交代24口交换机等技术型器件”
print(jieba.cut(content,cut_all=False))
print(jieba.lcut(content,cut_all=False))
#更多的详情见上方代码图片
流行的中英文分词工具hanlp
- 环境安装,Anaconda Prompt pip install hanlp
然后切换pytorch环境再安装一下(我用的是pytorch里的python编译器) - hanlp处理的都是列表形式,如果文本不是列表形式的话,用list给解析一下
- 本小节所使用的部分代码,由于篇幅较长,所以在图片选择的时候,没有选择全部 在敲代码的时候一定要看清括号的嵌套。
词性标注
文本张量的表示
在这里插入图片描述
one-hot编码实现
word2vec的实现
总的来说,CBOW就是用周围的词语来预测中间的词语,在整段语料上,选取窗口大小的语料,计算,并筛选最合适的,然后依次向后进行,直到完成所有语料的遍历。
skipgram则是使用中间的词语来预测前后词语的训练方式。
word2vec代码实现
以上数据加载是在Linux系统下的命令行实现的,接下来讲如何使用Python进行训练。
代码
import fasttext
model = fasttext.train_unsupervised('路径') #设置模型超参数
model.get_nearest_neighbors('某个词')# 查询最近的词向量
model.get_word_vector("the")#获取某个词向量
model.save_model("文件名.bin")#模型保存
model = fasttext.load_model("文件名.bin")#模型重加载
# 模型超参数的设定
model = fasttext.train_unsupervised('路径',"cbow", dim = 300, epoch = 1, lr = 0.1, thread = 8)#无监督训练的方式,dim词嵌入向量维度,epoch总体的数据集循环几轮,初始学习率lr,线程thread
# 模型效果检验
model.get_nearest_neighbors('cat')
#模型保存与重加载
model.save_model("文件名.bin")
model = fasttext.load_model("文件名.bin")
词嵌入
文本张量表示的小结
HMM模型与CRF模型
RNN模型
概念
实例
RNN模型的分类
N-N
N-1
1-N
N-M(seq2seq架构)
RNN小结
传统RNN模型
在代码中体现
import torch
import torch.nn as nn
# 实例化RNN对象
#第一个参数:input_size(输入张量x的维度)
#第二个参数:hidden_size(隐藏层的维度,隐藏层神经元的数量)
#第三个参数:num_layers(隐藏层的层数)
rnn = nn.RNN(input_size, hidden_size, num_layers)
#设定输入的张量x
# seq_len:输入序列的长度。batch_size:批次的样本数。input_size:输入张量x的维度
input = torch.randon(seq_len, batch_size, input_size)
#设定初始化的h0
#第一个参数:num_layers*num_directions(层数*网络方向数)
#batch_size:批次的样本数
# hidden_size:隐藏层的维度,隐藏层神经元的数量
h0 = torch.randn(num_layers, batch_size, hidden_size)
#输入张量放入RNN中,得到输出结果
output, hn = rnn(input1, h0)
print(output)
print(output.shape)
print(hn)
print(hn.shape)
LSTM模型
遗忘门部分结构图
两个输入: 当前时间步的输入xt 与 上一个时间步隐含状态h(t-1)拼接 得到[xt,h(t-1)]经过全连接层与sigmoid函数得到f
在RNN中,tanh的作用是将流经网络的值压缩为[-1,1]之间
而在LSTM中,sigmoid函数的作用是将流经网络中的值压缩在[0,1]之间
输入门部分结构图
将拼接后的值复制两份,然后一个进入sigmoid函数,一个进入tanh函数