基于github项目:https://github.com/shibing624/nlp-tutorial/tree/main

自然语言处理任务

1) 简单任务

  • 拼写检查 Spell Checking

  • 关键词检索 Keyword Search

  • 同义词查找 Finding Synonyms

2) 中级任务

  • 解析来自网站、文档等的信息

3) 复杂任务

  • 机器翻译 Machine Translation

  • 语义分析 Semantic Analysis

  • 指代消解 Coreference

  • 问答系统 Question Answering

文本表示

传统离散表示

在自然语言处理(Natural Language Processing,NLP)领域,文本表示是处理流程的第一步,主要是将文本转换为计算机可以运算的数字。

文本表示方法的技术演进:

符号表示法(Symbolic)

示例:词典编码「自然语言处理」→ {"自":1, "然":2, "语":3, "言":4, "处":5, "理":6}

from sklearn.feature_extraction.text import CountVectorizer
corpus = ["自然语言处理 是 人工智能 的 重要 分支"]
vectorizer = CountVectorizer(token_pattern=r'\b\w+\b')
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())  # ['人工智能', '分支', '处理', '自然语言处理', '重要']

词袋模型(Bag-of-Words, BoW)

原理:忽略词序,统计每个词在文档中的出现次数

from sklearn.feature_extraction.text import CountVectorizer
corpus = ["I love NLP.", "NLP is amazing!"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())  # 输出:[[1 1 1 0] [0 1 0 1]] 
print(vectorizer.vocabulary_)  # {'love': 2, 'nlp': 1, 'is': 3, 'amazing': 0}

例子1:

句1:Jane wants to go to Shenzhen 句2:Bob wants to go to Shanghai

使用两个例句来构造词袋: [Jane, wants, to, go, Shenzhen, Bob, Shanghai]

两个例句就可以用以下两个向量表示,对应的下标与映射数组的下标相匹配,其值为该词语出现的次数

句1:[1,1,2,1,1,0,0] 句2:[0,1,2,1,0,1,1]

TF-IDF(词频-逆文档频率)

原理:降低常见词权重,提升重要词权重

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["The cat sat on the mat.", "Dog on mat."]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())  # 非对称矩阵

优劣对比

方法优点缺点
BoW简单高效,易于实现忽略词序、语义信息,维度灾难
TF-IDF减少常见词干扰仍无法捕捉语义关系

 分布式表示(词嵌入)

核心思想:用稠密向量表示词语,捕获语义关联

Word2Vec

原理:通过上下文预测目标词(Skip-Gram)或反之(CBOW)

from gensim.models import Word2Vec
sentences = [["nlp", "is", "cool"], ["deep", "learning", "too"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
print(model.wv["nlp"])  # 输出100维向量

向量示例"king" - "man" + "woman" ≈ "queen"

GloVe(Global Vectors)

原理:基于全局词共现矩阵的加权最小二乘训练

from gensim.scripts.glove2word2vec import glove2word2vec
from gensim.models import KeyedVectors
glove2word2vec("glove.txt", "word2vec_format.txt")
model = KeyedVectors.load_word2vec_format("word2vec_format.txt")

优劣对比

方法优点缺点
Word2Vec高效捕获局部语义未利用全局统计信息
GloVe结合全局共现统计训练速度较慢

 上下文感知表示

核心突破:根据上下文动态调整词向量

ELMo(Embeddings from Language Models)

原理:双向LSTM生成上下文相关向量

from allennlp.modules.elmo import Elmo, batch_to_ids
options_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json"
weight_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5"
elmo = Elmo(options_file, weight_file, 1)
character_ids = batch_to_ids(["hello world"])
embeddings = elmo(character_ids)['elmo_representations'][0]

BERT(Bidirectional Encoder Representations)

原理:Transformer编码器 + Masked LM训练

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello NLP!", return_tensors="pt")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state  # [1, seq_len, 768]

向量示例
同一词在不同上下文的BERT表示:

  • "bank" in "river bank" → [0.2, -0.7, ..., 0.4]

  • "bank" in "bank account" → [0.8, 0.1, ..., -0.3]

方法类型典型代表语义捕获上下文敏感训练成本应用场景
传统离散表示BoW, TF-IDF极低简单文本分类
静态词嵌入Word2Vec中等(静态)中等关键词扩展、推荐
上下文动态嵌入BERT✔️极高语义理解、问答系统

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ClickHouse系列--BalancedClickhouseDataSource实现

clickhouse-jdbc中负载均衡数据源的实现。 基本逻辑如下: 1.通过配置的url串,来切分构造url列表; 2.通过一个定时线程任务,来不断的去ping url列表,来更新可用的url列表; 3.在可用列表中随机返回一个可用ur…

Linux目录说明

Linux Filesystem Hierarchy Standard(FHS) 1. /bin 全称:Binary(二进制文件)功能:存放系统最基础的可执行命令,所有用户(包括普通用户)都能使用,用于系统启…

鸿蒙 Grid 与 GridItem 深度解析:二维网格布局解决方案

一、引言:网格布局 —— 多维度数据展示的黄金方案 在鸿蒙应用开发体系中,网格布局作为处理多元素有序排列的核心方案,广泛应用于电商商品陈列、图片画廊、功能矩阵等场景。鸿蒙提供的 Grid 与 GridItem 组件通过声明式语法构建灵活的二维布…

​​Vue 开发环境配置:使用 devServer.proxy 解决跨域问题​-vue中文件vue.config,js中配置devserver做反向代理到后端

​​Vue 开发环境配置:使用 devServer.proxy 解决跨域问题​​ ​​引言​​ 在现代 Web 开发中,前端和后端通常独立开发,前端运行在 http://localhost:8080,而后端可能运行在 http://localhost:8000 或其他端口。由于浏览器的 …

JVM 中的 GC 算法演进之路!(Serial、CMS、G1 到 ZGC)

引言 想象一下,Java 程序运行就像在一个巨大的图书馆里借书还书。这个图书馆(JVM 的内存堆区)为了高效运转,需要一个聪明的“图书管理员”来清理失效的书籍(垃圾对象)。这,就是垃圾回收器&#…

(9)python+playwright自动化测试-页面(page)

1.简介 通过前边的讲解和学习,细心认真地你可能发现在Playwright中,没有Element这个概念,只有Page的概念,Page不仅仅指的是某个页面,例如页面间的跳转等,还包含了所有元素、事件的概念,所以我们…

《自动控制原理 》- 第 1 章 自动控制的基本原理与方式

1-1 自动控制的基本原理与方式 自动控制是指在没有人直接参与的情况下,利用外加的设备或装置,使机器、设备或生产过程的某个工作状态或参数按照预定的规律运行。自动控制的核心原理是反馈控制,即通过将系统的输出量回送到输入端,与…

DL00715-基于YOLOv11的水面漂浮物目标检测含数据集

【论文必备】基于YOLOv11的水面漂浮物目标检测——让你的研究走在科技前沿! 在环境监测、海洋保护和水质管理领域,水面漂浮物的检测一直是一个亟待解决的难题。传统的人工巡检方式不仅耗时费力,还无法覆盖广泛的水域范围。如今,基…

权电阻网络DAC实现电压输出型数模转换Multisim电路仿真——硬件工程师笔记

目录 1 基础知识 1.1 运算放大器在DAC中的作用 1.2 常见的基于运算放大器的DAC电路 1.2.1 倒T形电阻网络DAC 1.2.2 权电阻网络DAC 1.2.3 开关电容DAC 1.3 运算放大器的选择 1.4 设计注意事项 2 仿真实验 2.1 权电阻网络DAC实现数字0对应电压输出 2.2 权电阻网络DAC实…

Redis主从集群

✅ 一、什么是 Redis 主从集群? Redis 主从(Master-Slave)集群是一种最基础的集群方式: 一台 Redis 作为主节点(Master),负责写操作; 一到多台 Redis 作为从节点(Slave&…

【水印论文阅读1】将水印规则的定义域从离散的符号空间转移到连续的语义空间

【水印论文阅读1】将水印规则的定义域从离散的符号空间转移到连续的语义空间 写在最前面**为什么“token序列空间”有根本缺陷?****为什么“语义向量空间”能破局?****1. 连续性(抗攻击的核心)****2. 高维复杂性(防破解…

Glide缓存机制

一、缓存层级与设计目标 双级缓存: 内存缓存:弱引用 LruCache 磁盘缓存:DiskLruCache 设计目标: 减少网络流量消耗 避免Bitmap频繁创建/销毁引发的GC 提升图片加载速度 二、内存缓存机制 1. 双缓存结构 缓存类型存储对象…

BaiduSitemap - Typecho站点地图生成与多搜索引擎推送插件

文章目录 🌐 BaiduSitemap - Typecho站点地图生成与多搜索引擎推送插件✨ 功能特点🧩 插件架构核心模块文件结构📦 安装方法方法一:手动安装方法二:Git克隆⚙️ 配置说明站点地图基本设置搜索引擎配置百度搜索引擎必应(Bing)搜索引擎谷歌(Google)搜索引擎🚀 使用…

androidx中<layout>根布局的意义及用法

在 Android 开发中,<layout> 根布局是 Android Jetpack Data Binding 库的核心组件,用于声明该 XML 布局文件将使用数据绑定功能。以下是详细说明: 📌 一、基本作用 1. 启用数据绑定 <layout> 标签标志着此布局文件支持数据绑定,编译器会为其生成对应的绑定类…

QTreeWidget 简单使用

效果图&#xff1a; 关键代码&#xff1a; void MainProj::_InitTree() { connect(m_pTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(TreeItemClicked(QTreeWidgetItem*, int))); m_pTreeWidget->header()->setHidden(1); /*QTreeWid…

手势-handpose的pipeline介绍

手势-handpose的pipeline包括&#xff1a; 1、手部检测算法&#xff1a;单帧检测出左右手的边界框。 2、手部跟踪算法&#xff1a;连续帧跟踪&#xff0c;锁定左右手跟踪目标&#xff0c;作为后续的手部ui操作。 3、手部关键点检测算法&#xff1a;基于单帧的检测框图像作为输…

计算机操作系统(十七)内存管理

计算机操作系统&#xff08;十七&#xff09;内存管理 前言一、内存的使用与程序重定位&#xff08;一&#xff09;内存是什么&#xff1f;&#xff08;二&#xff09;程序的重定位过程&#xff08;三&#xff09;总结&#xff1a;内存使用的核心问题 二、连续分区管理&#xf…

【编译原理】期末

单选题 (4分) 令文法G[E]为&#xff1a;E->ET | T T->T*F | F F-> (E) | i 句型 F*iT 的最左素短语是&#xff08; &#xff09; A.F B.i C.T D.F*i B 短语&#xff1a; F*iT、F*i、F、i 素短语&#xff1a; i 最左素短语&#xff1a; i 单选题 (4分) 若在…

一个简单测试Deepseek吞吐量的脚本,国内环境可跑

一个简单测试Deepseek吞吐量的脚本,这里用DeepSeek-R1-Distill-Qwen-32B ,支持单卡4090 24G可跑,具体看你的硬件情况做调整,理论支持所有的模型,看你需要,可以修改模型名称,重点是pip使用国内的源,模型下载用阿里的ModelScope,无障碍下载,使用. 最后可以生成一个txt与html报表.…

前端基础知识JavaScript系列 - 19(正则表达式)

一、是什么 正则表达式是一种用来匹配字符串的强有力的武器 它的设计思想是用一种描述性的语言定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;我们就认为它“匹配”了&#xff0c;否则&#xff0c;该字符串就是不合法的 在 JavaScript中&#xff0c;正则表达式也…