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

news2024/9/25 7:02:42

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()])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python办公自动化案例:实现XMind文件转换成Excel文件

案例:实现XMind文件转换成Excel文件 将XMind文件转换为Excel文件的过程可以通过几个步骤来实现,主要涉及到读取XMind文件,解析其内容,然后创建一个Excel文件并将解析的内容写入。以下是一个简化的Python脚本,展示了如何使用xmindparser库来解析XMind文件,并使用pandas库…

搜索引擎简介

搜索引擎架构 整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务 爬虫系统 爬虫分为两个阶段: 第一阶段:根据目标网站的列表页,爬对应的文档 URL 第二阶段:根据文档 URL,下载文档内容 触发器&#xff1…

多级目录SQL分层查询

需求&#xff1a;有多级目录&#xff0c;而目录的层级是不固定的&#xff0c;如下图所示&#xff1a; 数据结构&#xff1a; sql语句&#xff1a; <select id"getList" resultType"com.hikvision.idatafusion.dhidata.bean.vo.knowledgebase.KnowledgeBaseT…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

C++ | Leetcode C++题解之第434题字符串中的单词数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countSegments(string s) {int segmentCount 0;for (int i 0; i < s.size(); i) {if ((i 0 || s[i - 1] ) && s[i] ! ) {segmentCount;}}return segmentCount;} };

一种单目标A*算法设计与实现

一种单目标A*算法设计与实现 作者&#xff1a;吴屏珊 最近在学习简单的单目标A*算法&#xff0c;其中在CSDN上阅读到的一篇博文给了我很大启发&#xff0c;于是在该博文的基础上&#xff0c;笔者记录了一点自己对于A*算法的体会和感悟。原文链接 目录 文章目录 一种单目标A*…

如何破解西门子博途V19里的密码设置

现在使用TIA Portal V19的工程师是越来越多了&#xff0c;V19有个显著的变化就是访问密码的设置&#xff0c;很多小伙伴忽然发现已经用了很多年的功能&#xff0c;在改动以后都不会设置了&#xff0c;那我们今天就带着您看一下如何才能在 V19 中正确的设置 S7-1500 访问密码。 …

论文笔记(四十六)RobotGPT: Robot Manipulation Learning From ChatGPT

xx RobotGPT: Robot Manipulation Learning From ChatGPT 文章概括摘要I. 介绍II. 相关工作III. 方法论A. ChatGPT 提示机器人操作B. 机器人学习 IV. 实验A. 衡量标准B. 实验设置C. 模拟实验D. 真实机器人实验E. AB测试 V. 结论 文章概括 引用&#xff1a; article{jin2024r…

【算法】模拟:(leetcode)6.Z 字形变换(medium)

目录 题目链接 题目介绍 解法 1、模拟&#xff1a; 2、找矩阵中的规律&#xff1a; 公差 第一行和最后一行 中间行 代码 题目链接 6. Z 字形变换 - 力扣&#xff08;LeetCode&#xff09; 题目介绍 解法 1、模拟&#xff1a; 采用模拟的思想&#xff0c;按照Z字形&…

《动手学深度学习》笔记1.7——模型选择 + 过拟合-欠拟合

目录 1. 模型选择 1.1 训练误差 vs. 泛化误差 1.2 验证数据集 vs. 测试数据集 1.3 K-折交叉验证 1.4 总结 2. 过拟合与欠拟合&#xff08;核心知识&#xff09; 2.1 过拟合 vs. 欠拟合 2.2 模型容量 2.3 估计模型容量 2.4 VC维 衡量模型容量 2.5 数据复杂度 3. 代…

Vue3:element-plus el-Table列表合计处理显示字符串类型/计算合计数值

需求整理 1.使用element组件库中的 el-table组件实现图上 底部当前页合计的功能。在一般的情况下&#xff0c;只需要计算数值部分的值&#xff0c;因为组件中的方法中处理的就是将值的类型转换成数值类型&#xff0c;像string类型的字符串的话&#xff0c;在进行转换的时候会出…

什么是远程过程调用(RPC)

进程间通信(IPC) 进程间通信(Inter-Process Communication)是指两个进程或者线程之间传送数据或者信号的一些技术或者方法。进程是计算机进行资源分配的最小的单位。每个进程都有自己独立的系统资源,而且彼此之间是相对隔离的。为了使得不同的进程之间能够互相访问,相互协…

Redis: 特色,业务场景举例,底层原理,持续进阶等问题梳理

Redis 的特色 Redis 是目前使用非常广泛的中间件&#xff0c;在于它功能强大&#xff0c;持续改进&#xff0c;经久不衰主要体现在以下几点 1 ) 高性能: Redis 的底层是C语言编写的&#xff0c;它的定位是内存型数据库而且 Redis 的作者对操作系统也非常的精通它通讯方式采用了…

MobileNetV2: Inverted Residuals and Linear Bottlenecks

Link&#xff1a;https://arxiv.org/abs/1801.04381 这篇文章是一篇关于MobileNetV2的学术论文&#xff0c;主要介绍了MobileNetV2的架构设计及其在图像分类、目标检测和语义分割任务中的应用。以下是对这些核心内容的简要概述&#xff1a; MobileNetV2架构设计&#xff1a; …

深度学习技术在超材料科学中的应用与实操

人工智能算法赋能材料设计与应用专题培训 前沿背景 人工智能与材料科学的融合趋势&#xff1a;在材料科学领域&#xff0c;人工智能&#xff08;AI&#xff09;的引入正在引发一场革命。传统的材料设计和优化依赖于经验和试错方法&#xff0c;这不仅耗时且成本高昂。关于AI赋…

Note_XML学习笔记

XML学习笔记 1. XML 教程 经常见到XML学习一下。由于是学到中间才想起记笔记&#xff0c;之前的就简略回顾一下&#xff1a; 1&#xff09;XML是数据存储的一种语言载体&#xff1b; 2&#xff09;只负责存储&#xff0c;不负责显示&#xff1b; 3&#xff09;和HTML语言的风…

简单的算法题

1、求12345 #include <stdio.h> int main(){int i,s1;for(i1;i<5;i){s s*i;}printf("%d",s); }2、求1357911 #include <stdio.h> int main(){int i,s1;for(i1;i<11;ii2){s s*i;}printf("%d",s); }3、判定2000—2500年中的每一年是否…

CSP-CCF★★★201909-2小明种苹果(续)★★★

一、问题描述 二、解答 关键&#xff1a;判断是否发生苹果掉落&#xff0c;使用flag[]数组来标记&#xff0c;1为掉落&#xff0c;0为没有掉落&#xff0c;这样也是为了后续比较连续三棵树是否掉落 误区&#xff1a;用最后一次正数&#xff08;即最后一次统计苹果个数&#x…

ChatGPT 提取文档内容,高效制作PPT、论文

随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;模式&#xff0c;可以显著提升文档内容提取和内容创作的效率。以下将详细介绍如…

LabVIEW提高开发效率技巧----使用状态机架构

状态机架构&#xff08;State Machine Architecture&#xff09;是LabVIEW编程中的一种常见且高效的设计模式&#xff0c;特别适合用于处理具有多个操作状态的复杂系统。通过这种架构&#xff0c;程序能够根据不同的输入条件或事件&#xff0c;在多个状态之间切换&#xff0c;从…