NLP自然语言处理

计算机视觉和图像处理

  1. Tensorflow入门
  2. 深度神经网络
  3. 图像分类
  4. 目标检测
  5. 图像分割
  6. OpenCV
  7. Pytorch
  8. NLP自然语言处理

一、NLP简介

自然语言处理(Natural Language Processing,简称 NLP)是计算机科学、人工智能和语言学的一个分支,旨在使计算机能够理解、解释和生成人类的自然语言。NLP 的目标是弥合人类通信和计算机理解之间的差距,使得计算机能够以更智能、更有效的方式处理文本和语音数据。

NLP 的主要任务

  1. 文本分类:
  • 情感分析:判断文本的情感倾向,如正面、负面或中性。
  • 主题分类:将文档归类到预定义的主题类别中。
  • 垃圾邮件检测:识别电子邮件或消息是否为垃圾信息。
  1. 命名实体识别(NER):
  • 识别文本中的特定实体,如人名、地名、组织名、日期等。
  1. 关系抽取:
  • 从文本中提取实体之间的关系,如“奥巴马是美国的总统”。
  1. 句法分析:
  • 词性标注:为每个词标注其词性(名词、动词、形容词等)。
  • 依存关系分析:分析句子中词与词之间的依存关系。
  1. 语义分析:
  • 语义角色标注:识别句子中的谓词及其论元。
  • 共指消解:确定文本中哪些词语指的是同一个实体。
  1. 机器翻译:
  • 将一种自然语言翻译成另一种自然语言,如将英文翻译成中文。
  1. 对话系统:
  • 聊天机器人:构建能够与用户进行自然对话的系统。
  • 语音识别:将语音信号转换为文本。
  • 语音合成:将文本转换为语音信号。
  1. 文本生成:
  • 自动摘要:生成文本的简洁摘要。
  • 创意写作:生成诗歌、故事等创意文本。

NLP 的技术方法

  1. 统计方法:
  • 使用统计模型(如朴素贝叶斯、支持向量机、隐马尔可夫模型等)来处理文本数据。
  1. 深度学习方法:
  • 循环神经网络(RNN):处理序列数据,适用于文本生成和序列标注任务。
  • 长短期记忆网络(LSTM):改进的 RNN,能够更好地处理长依赖问题。
  • Transformer 模型:基于自注意力机制的模型,广泛应用于各种 NLP 任务,如 BERT、GPT 等。
  • 卷积神经网络(CNN):用于提取局部特征,适用于文本分类任务。

二、文本预处理

2.1 文本预处理简介

文本语料在输送给模型前一般需要一系列的预处理工作, 才能符合模型输入的要求, 如: 将文本转化成模型需要的张量, 规范张量的尺寸等, 而且科学的文本预处理环节还将有效指导模型超参数的选择, 提升模型的评估指标.

2.2 文本处理的基本方法

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
分词的作用:
词作为语⾔语义理解的最小单元, 是⼈类理解文本语言的基础. 因此也是AI解决NLP领域高阶任务, 如自动问答, 机器翻译, 文本生成的重要基础环节.
jieba分词器
使用jieba前需要先导包,在命令行输入:pip install jieba
在这里插入图片描述

  1. 精确模式分词,试图将句子最精确地切开,适合文本分析.
import jieba

# 精确模式分词,cut_all=False
content = "它的主要功能是作为Jupyter的内核,允许 Jupyter Notebook与不同的Python环境进行交互。"
jieba.cut(content,cut_all=False)

返回一个生成器对象
在这里插入图片描述

# lcut直接显示分词内容
words = jieba.lcut(content)
result = ' '.join(words)
result

在这里插入图片描述

  1. 全模式分词,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能消除歧义
# 全模式分词,cut_all=True
content = "它的主要功能是作为Jupyter的内核,允许 Jupyter Notebook与不同的Python环境进行交互"
jieba.cut(content,cut_all=True)

在这里插入图片描述

words = jieba.lcut(content)
result = ' '.join(words)
result

在这里插入图片描述

  1. 搜索引擎模式分词,在精确模式的基础上,对长词再次切分,提高召回率。
# 搜索引擎模式分词
content = "它的主要功能是作为Jupyter的内核,允许 Jupyter Notebook与不同的Python环境进行交互"
jieba.cut_for_search(content)

words = jieba.lcut_for_search(content)
result = ' '.join(words)
result

在这里插入图片描述

  1. 中文繁体分词
content = "煩惱即是菩提,我暫且不提"
jieba.cut(content,cut_all=False)
jieba.lcut(content)

在这里插入图片描述

  1. 自定义词典分词
# 使用不了自定义词典,加载不到userdict.txt! 但方法就是这方法
jieba.load_userdict("./userdict.txt")
jieba.lcut("⼋⼀双⿅更名为⼋⼀南昌篮球队!")
  1. 使用jieba进行中文词性标注
# 使用jieba进行中文词性标注
import jieba.posseg as pseg
pseg.lcut("我爱北京天安门")

在这里插入图片描述

2.3 文本张量表示方法

2.3.1 onehot编码

# 用于对象的保存和加载
import joblib
from tensorflow.keras.preprocessing.text import Tokenizer
# onehot编码
words = {
   "周杰伦", "陈奕迅", "王力宏", "李宗盛", "吴亦凡", "鹿晗"}

# 实例化词汇映射器对象
# char_level词汇单位是单词而不是字符
t = Tokenizer(num_words=None,char_level=False)
# 拟合现有的文本数据
t.fit_on_texts(words)
print(f"词汇表及索引:{
     t.word_index}")

for word in words:
    one_hot = [0]*len(words)
    # texts_to_sequences将当前词汇转换为其在词汇表中的索引位置
    # 返回样式[[1]]、[[2]]等
    word_index = t.texts_to_sequences([word])[0][0] - 1
    one_hot[word_index] = 1
    print(f"{
     word} 的one-hot编码为:{
     one_hot}")

#保存映射
tokenizer_path = "./Tokenizer"
joblib.dump(t,tokenizer_path)

在这里插入图片描述

# onehot编码器的使用

# 加载之间保存的Tokenizer
t = joblib.load(tokenizer_path)
# 编码王力宏
word = "王力宏"
word_index = t.texts_to_sequences([word])[0][0] - 1
one_hot[word_index] = 1
print(f"{
     word}的one-hot编码为:{
     one_hot}")

在这里插入图片描述

2.3.2 word2vec编码

fasttext包我导不进来,调了两三个小时!

import fasttext

# 第一步:获取训练数据
data = [
    "周杰伦是一位著名的歌手",
    "陈奕迅的歌曲非常受欢迎"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的小崔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值