【NPL】daydayup基本概念,词嵌入

NLP基础

基本概念

NLP,自然语言处理,目标是让计算机能够理解、解释、生成人类语言的数据。包括语言理解,语言生成,机器翻译,情感分享,语音识别,语音合成等

应用方向
  • 自然语言理解

    • 情感分析: 给定选项范围内分析文本的情绪是正面还是负面
    • 文本分类:对文本进行分类
    • 信息检索:和搜索引擎相关
    • 抽取式阅读理解:给定文本输入,用文本中的内容回答问题
    • 语义匹配:给定两个文本,判断是否相似
    • 自然语言推理:给定两个文本,判读是蕴涵,矛盾还是无关
    • 命名实体识别:给定文本输入,返回还有命名实体及其对应标签的映射 把实体分为特定的类别
    • 文本摘要:对文本进行摘要
  • 自然语言转换

    • 机器翻译:自然语言转换 seq2seq
    • 非抽取式阅读理解:给定文本,理解文本,回答问题
    • 文本风格转换:转换风格,换一种方式表达
    • 语音识别:语音转文本
    • 意图改写:给定文本,把文本中的意图和核心信息进行重新表达
  • 自然语言生成

    • 文本生成:根据上下文,自动生成文本
    • 语音合成:文本转语音
    • 文本到知识:文本提取知识
    • 语义解析:自然语言转化为逻辑表示,命令解析,查询理解
  • 应用方向

在这里插入图片描述

  • 数据集

可以再github等网站找到一些公开的文本数据集
在这里插入图片描述

NLP基础概念
  • 词表 词库:文本数据集中出现的单词集合
  • 语料库:文本数据集合,原始的语料,书籍文章等
  • 词嵌入:把单词热编码映射到低维空间,可以捕捉语义
  • 停用词:忽略的常见词
  • 分词:把文本分隔为一个个单词
  • 词袋模型:把文本表示为单词的集合,忽略单词的顺序和语法结构
  • N-gram:连续的n个单词组成一个序列,这样的序列可以表示语法,一定的上下文信息

NLP基本流程

  • 语料获取
    • 第三方数据集语料库
    • 网络数据
    • 购买
  • 语料预处理
    • 去除非文本内容
    • 中文分词 如jieba分词
    • 词性标注
    • 去除停用词
  • 文本向量化 把文本转化为特征向量
  • 模型构建 TextCNN RNN LSTM GRM
  • 模型训练
  • 模型评价 roc曲线 AUC线等

NLP中的特征工程

在NLP中,特征工程是将文本数据转化为适合机器学习模型使用的数值表示的过程

  • 词向量
  • 独热编码one-hot 类似机器学习中的字典特征提取,只有一个元素是1,其他为0
  • 词频-逆文档频率
  • n-grams 把连续的n个词组合起来,形成一个短语捕捉上下文信息
    • 常见做法是把n-grams和TF-IDF相结合,先形成n-grams再计算TF-IDF权重
  • 稠密编码 特征嵌入 将热编码这样的离散高维数据转化为低维数据
  • 词嵌入算法
    • Embedding Layer 热编码使用矩阵映射
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from tqdm import tqdm
from sklearn.model_selection import train_test_split

sentences = '''
人闲桂花落
夜静春山空
月出惊山鸟
时鸣春涧中
空山不见人
但闻人语响
返景入深林
复照青苔上
移舟泊烟渚
日暮客愁新
野旷天低树
江清月近人
床前明月光
疑是地上霜
举头望明月
低头思故乡
白日依山尽
黄河入海流
欲穷千里目
更上一层楼
千山鸟飞绝
万径人踪灭
孤舟蓑笠翁
独钓寒江雪
江旷春潮白
山长晓岫青
他乡临睨极
花柳映边亭
'''

sentences = sentences.strip().split('\n')

# 创建词表和对应的映射关系
word_list = [word for word in ''.join(sentences)]
# print(word_list)

word_dict = {w: i for i, w in enumerate(list(set(word_list)))}
number_dict = {i: w for i, w in enumerate(list(set(word_list)))}
n_class = len(word_dict) #词表大小

# 设置模型超参数
m_dim =10 # 嵌入向量的维度
n_hidden = 5 # 神经元数量
n_step = 4 # 输入步长数

# 划分数据集
train_data,test_data = train_test_split(sentences,test_size=0.3,random_state=1,shuffle=True)

# 创建输入的样本和目标值
def make_batch(sentences):
    input_batch = []
    target_batch = []

    for sen in sentences:
        word = [word for word in sen]
        # print(word)
        input = [word_dict[n] for n in word[:-1]]
        target = word_dict[word[-1]]

        input_batch.append(input)
        target_batch.append(target)

    return input_batch, target_batch

# 创建模型
class NNLM(nn.Module):
    def __init__(self, n_step, n_class, m_dim,n_hidden):
        super(NNLM, self).__init__()
        # 定义嵌入层,单词索引映射为嵌入向量
        self.embed = nn.Embedding(n_class, m_dim)
        # 第一层隐藏层
        self.linear1 = nn.Linear(m_dim*n_step, n_hidden)
        # 分类类别数就是词表大小
        self.linear2 = nn.Linear(n_hidden, n_class)

    def forward(self, x):
        x = self.embed(x) # 通过嵌入曾得到的形状是(batch_size, n_step,m_dim)-> (batch_size, n_step*m_dim)
        x = x.view(-1, x.size(1) * x.size(2)) # 拉平为二维数据
        h = torch.tanh(self.linear1(x))
        output = self.linear2(h)
        return output

# 初始化模型
model = NNLM(n_step, n_class, m_dim, n_hidden)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss() # 损失函数 交叉熵
optimizer = optim.Adam(model.parameters(), lr=0.001) # 优化器 学习率

# 准备输入和目标数据
input_batch, target_batch = make_batch(train_data)
input_batch = torch.LongTensor(input_batch)
target_batch = torch.LongTensor(target_batch)

# 开始训练
for epoch in tqdm(range(5000)):
    optimizer.zero_grad()  # 梯度清零
    output = model(input_batch)
    loss = criterion(output, target_batch)

    if (epoch + 1) % 1000 == 0:
        print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.6f}'.format(loss))

    loss.backward()  # 反向传播
    optimizer.step()  # 参数更新

# 训练数据  使用训练好的模型进行预测
input_batch, target_batch = make_batch(test_data)
input_batch = torch.LongTensor(input_batch)
target_batch = torch.LongTensor(target_batch)
predict = model(input_batch).max(1, keepdim=True)[1]

print(predict.squeeze())
print(target_batch)
print(predict.squeeze()==target_batch)
print('acc: ',(predict.squeeze()==target_batch).sum()/len(target_batch))
# 输出预测结果
# print([sen[:-1] for sen in sentences], '->', [number_dict[n.item()] for n in predict.squeeze()])

数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值