当前位置: 首页 > news >正文

深度学习之NLP基础

NLP(自然语言处理)基础

一、基本概念

NLP = Natural Language Processing(自然语言处理),是人工智能和语言学领域的一个分支,它涉及到计算机和人类(自然)语言之间的相互作用。它的主要目标是让计算机能够理解、解释和生成人类语言的数据。NLP结合了计算机科学、人工智能和语言学的技术和理论,旨在填补人与机器之间的交流隔阂。

NLP的核心任务主要为:

任务说明示例
1. 分词(Tokenization)把句子切分成词或子词单元"我爱NLP"["我", "爱", "NLP"]
2. 词性标注(POS Tagging)标注每个词的词性"跑步" → 动词,"苹果" → 名词
3. 命名实体识别(NER)识别专有名词(人名、地名、组织等)"马云在杭州创立了阿里巴巴" → 马云(人名),杭州(地点),阿里巴巴(组织)
4. 句法分析(Parsing)分析句子语法结构(主谓宾)画出依存句法树
5. 语义分析(Semantic Analysis)理解词语和句子的含义区分“苹果”是水果还是公司
6. 情感分析(Sentiment Analysis)判断文本情感倾向"这电影太棒了!" → 正面
7. 文本分类(Text Classification)给文本打标签新闻分类:体育 / 科技 / 娱乐
8. 机器翻译(MT)不同语言之间翻译"Hello""你好"
9. 问答系统(QA)回答用户问题输入:“谁是爱因斯坦?” 输出:“物理学家…”
10. 文本生成(Text Generation)自动生成连贯文本写文章、写诗、聊天机器人
11. 摘要生成(Summarization)生成文本的简短摘要将一篇新闻浓缩成一句话

应用方向有:

应用领域典型产品/场景
智能客服淘宝客服、银行机器人
搜索引擎百度、Google 的语义理解
语音助手Siri、小爱同学、天猫精灵
机器翻译Google Translate、DeepL、有道翻译
推荐系统根据评论情感推荐商品
舆情分析监测社交媒体情绪(如微博、抖音)
智能写作AI 写新闻、写周报、写文案
医疗 NLP从病历中提取诊断信息
法律 NLP合同审查、判例检索

NLP的基本流程如下:

1、语料获取

通过利用搭建好的数据集或第三方语料库、爬取网络数据、购买数据等方法获得文本语料库。

2、语料预处理

(1)去除数据中的非文本内容,如HTML代码中的标签、不需要的标点符号等等。

(2)分词。如果处理的语言种类为中文,需要下载第三方软件如jieba、FoolNlTK、HanLP、THULAC、NLPIR、LTP等。(这里我是在python环境中使用“pip install jieba”安装的jieba进行中文分词)

(3)标注。为分好的词语打赏此类标注,如动词、名词、形容词等,标注方法往往基于标注的算法。

(4)去除停用词。停用词即句子中没必要存在的词,去掉停用词后对理解整个句子的语义没有影响。

3、特征工程

在处理好语料获得干净的词以后,需要将词语转化为特征向量如one-hot编码、词向量等。

4、模型构建

文本向量化后,根据文本分析的需求选择合适的模型进行模型构建,同类模型也需要多准备几个备选用于效果对比。

5、模型训练

模型构建完成后,需要进行模型训练,其中包括模型微调等。训练时可先使用小批量数据进行试验,这样可以避免直接使用大批量数据训练导致训练时间过长等问题。在模型训练的过程中要注意两个问题:一个为在训练集上表现很好,但在测试集上表现很差的过拟合问题;另一个为模型不能很好地拟合数据的欠拟合问题。同时;还要避免出现梯度消失和梯度爆炸问题。

6、模型评估

对训练好的模型效果进行评估。评价指标指主要有准确率(Accuracy)、精确率(Precision)、召回率、F1值、ROC曲线、AUC线等。

二、基础知识

1、词向量

在自然语言处理中,计算机无法直接理解“单词”,所以我们需要一种方法把单词转换成 数值化的表示,方便模型处理。词向量就是将每个词映射为一个实数向量的过程。

例如:

单词词向量(前 5 维示例)
king[0.52, 0.25, 0.13, -0.44, 0.77, …]
queen[0.50, 0.27, 0.15, -0.43, 0.80, …]
man[0.45, 0.18, 0.11, -0.40, 0.72, …]
woman[0.47, 0.20, 0.12, -0.39, 0.74, …]

在向量空间里我们可以进行类似代数的操作:
king−man+woman≈queen king - man + woman ≈ queen kingman+womanqueen
也就是说,如果你取 king 的向量减去 man 的向量,再加上 woman 的向量,结果会非常接近 queen 的向量。

这说明 词向量能够捕捉语义关系,比如性别(man ↔ woman)和角色(king ↔ queen)。

2、词嵌入层

词嵌入层—Embedding Layer,从数学原理上:等价于“将词转为 One-Hot 编码,再乘以一个嵌入矩阵”,从而生成一个单词的词向量。

在 PyTorch 中,我们可以使用 nn.Embedding 词嵌入层来实现输入词的向量化。

例如:

现在我们有一段文字

text = "灌伤害,骗骗花,拉开距离回回拉,给压压,再开大,压力有点大刚雷,压力大,压力雷,压力像个大暴雷。"

我们要转换为向量表示,需要进行如下步骤:

1、对文本进行分词:

words = jieba.cut(text)
words_unique = list(set(words))

这里我们导入了jieba进行分词操作,如果是英文文本则需要手动使用.join() 将字符串里的单词装进一个列表。

2、构建词表:

words2index = {k: v for v, k in enumerate(words_unique)}
index2words = {k: v for k, v in enumerate(words_unique)}

words2index为词到词索引的映射,词索引对应的向量即为该词对应的数值化后的向量表示;index2words为词索引到文本(即单词本身)的映射。

3、接下来创建词嵌入层:

embedding = nn.Embedding(num_embeddings=len(words2index), embedding_dim=5)

其中,num_embeddings表示词的数量,也就是词表的大小;embedding_dim表示使用多少维的向量来表示每个词

4、对词库中每个词进行词向量的映射

for word in words_unique:if word in words2index:index = torch.tensor(words2index[word])vector = embedding(index)print(vector)

整个代码为:

import jieba
import torch.nn as nn
import torchtext = "灌伤害,骗骗花,拉开距离回回拉,给压压,再开大,压力有点大刚雷,压力大,压力雷,压力像个大暴雷。"words = jieba.cut(text)
words_unique = list(set(words))words2index = {k: v for v, k in enumerate(words_unique)}
index2words = {k: v for k, v in enumerate(words_unique)}print(words2index)
print(index2words)embedding = nn.Embedding(num_embeddings=len(words2index), embedding_dim=5)
for word in words_unique:if word in words2index:index = torch.tensor(words2index[word])vector = embedding(index)print(vector)
3、word2vec

Word2Vec最早、最经典的预训练语言模型之一,通过在大规模无标签文本上“预先训练”,学习到通用的词向量表示,然后可以用于各种下游 NLP 任务。

预训练模型是指在大量通用文本数据集上训练好的模型,它可以捕捉到语言的广泛特征,例如词汇、句法、语境相关性等。这些模型训练完成后,可以在特定的下游任务上进行微调(fine-tuning),以适应特定的应用场景,如情感分析、问答系统、文档摘要等。

在模型初始化阶段,通过 Embedding Layer 映射得到的词向量是随机的 (如果从零开始训练模型),所以可以通过预训练模型得到训练好的具备语义和语境的词向量。

word2vec一般分为**CBOW(Continuous Bag-of-Words)**与 Skip-Gram 两种模型。接下来我们依次介绍这两种模型的实现逻辑。

  • CBOW

连续词袋模型(CBOW)是一种根据上下文单词来预测目标单词的模型。具体来说,给定一个窗口大小为 n 的上下文单词序列,连续词袋模型的任务是预测中间的目标单词。

实现核心:在一个固定大小的窗口中,取目标词(center word)周围的上下文词(context words)作为输入,把它们的词向量求平均(或加和),再通过一个神经网络预测中心词的概率分布。训练时,模型会不断调整词向量,使得“由上下文预测中心词”的概率最大化。

举例:
目标词是 “sat”,窗口大小为 2,上下文是 [the, cat, on, the]

 输入(上下文): the   cat   on   the↓     ↓     ↓     ↓Embedding 向量化↓     ↓     ↓     ↓┌─────────── 求平均 ───────────┐↓隐藏层(线性变换)↓Softmax输出↓预测目标词: sat

CBOW优点主要为模型参数较少,训练速度相对较快,适合对小型数据库进行训练。

  • Skip-gram

Skip-gram 模型是一种根据目标单词来预测上下文单词的模型。具体来说,给定一个中心单词,Skip-gram 模型的任务是预测在它周围窗口大小为 n 内的上下文单词。

实现核心:通过输入一个中心词,预测它周围的上下文词。也就是说,模型会先将中心词映射到一个低维的词向量空间,然后通过该向量去预测窗口内可能出现的上下文词的概率。训练过程中,模型不断调整词向量,使得在语料库中经常同时出现的词(如 “cat” 和 “dog”)的向量更接近,而不相关的词向量则更远。最终得到的就是一个能捕捉语义关系的词向量表示。

输入(中心词):    like↓
Embedding 向量化:↓
[0.2, -0.5, 0.7]   ← 词向量 (input vector)↓
隐藏层(线性变换)↓
Softmax 输出↓
预测上下文词:     I, drink

Skip-gram模型能够生成更多的训练数据,因此可以更好地训练低频词汇的表示,在处理大规模语料库时效果比 CBOW 模型更好

word2vec的API调用

我们可以使用gensim包里的Word2vec类创建模型对象。

首先需要安装包:

pip install gensim

使用API:

model = Word2Vec(sentence=[words], vector_size=5, window=3, min_count=1, sg=0)

参数表:

参数说明
sentences可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或lineSentence构建。
vector_sizeword向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好。推荐值为几十到几百。
alpha学习率
window表示当前词与预测词在一个句子中的最大距离是多少。
min_count可以对字典做截断。词频少于min_count次数的单词会被丢弃掉,默认值为5。
max_vocab_size设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
sample高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)
seed用于随机数发生器。与初始化词向量有关。
workers参数控制训练的并行数。
sg用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
hs如果为1则会采用hierarchica·softmax技巧。如果设置为0(default),则negative sampling会被使用。
negative如果>0,则会采用negative samping,用于设置多少个noise words。
cbow_mean如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。
hashfxnhash函数来初始化权重。默认使用python的hash函数。
epochs迭代次数,默认为5。
trim_rule用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RULE_DISCARD,utils。RULE_KEEP或者utils。RULE_DEFAULT的函数。
sorted_vocab如果为1(default),则在分配word index 的时候会先对单词基于频率降序排序。
batch_words每一批的传递给线程的单词的数量,默认为10000
min_alpha随着训练的进行,学习率线性下降到min_alpha

一般情况下只关注加粗参数即可。

常用方法:

  • model.wv[word]:返回某个特定单词的向量。

  • model.wv.most_similar(word):获取与某个单词最相似的词。

  • model.wv.similarity(word1, word2):计算两个词之间的相似度。

  • model.save(“word2vec.model”)

    model = Word2Vec.load(“word2vec.model”)

    保存和加载模型

以上内容是博主学习NLP的一些总结笔记,若文章中出现错误请及时指正博主,感谢浏览☆噜~☆

http://www.xdnf.cn/news/1339615.html

相关文章:

  • KB5063878补丁故障解决方案:从蓝屏幕到系统修复的全面指南
  • 短波红外科研相机:开启科研新视野的利器​
  • 【矩池云】实现Pycharm远程连接,上传数据并解压缩
  • C++入门自学Day16-- STL容器类型总结
  • 全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions
  • 阿里云对象存储OSS之间进行数据转移教程
  • 打工人项目日报计划
  • 数据安全管理——解读银行保险机构数据安全管理办法【附全文阅读】
  • Elasticsearch Ruby 客户端elasticsearch / elasticsearch-api
  • DBLens 业界首创AI表结构变更审查,智能评估影响,助力开发效率跃升。
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据查询(2)分组查询
  • 第三方软件测试报告的行业价值
  • 两台电脑之间如何传输大文件?
  • C++设计模式--策略模式与观察者模式
  • 安卓app、微信小程序等访问多个api时等待提示调用与关闭问题
  • QT QProcess, WinExec, ShellExecute中文路径带空格程序或者脚本执行并带参数
  • 灵活使用UE5 Modeling中的UV编辑功能
  • QT-初识
  • 日志收集(ELK)
  • javaweb开发笔记——微头条项目开发
  • 【笔记】Facefusion3.3.2 之 NSFW 检测屏蔽测试
  • Windows 系统中,添加打印机主要有以下几种方式
  • macos使用FFmpeg与SDL解码并播放H.265视频
  • Git常用操作大全(附git操作命令)
  • 【LeetCode】18. 四数之和
  • 微服务的编程测评系统13-我的竞赛列表-elasticSearch
  • javaweb开发笔记—— 前端工程化
  • Spring Boot 集成 Redis 发布订阅实现消息通信
  • 计算机网络技术学习-day6《三层交换机配置》
  • 01 网络信息内容安全--绪论