4-2 文本向量化

4-2 文本向量化

文本向量化是自然语言处理(NLP)中的一个关键步骤,通过将文本数据转化为数值向量,使计算机能够理解和处理自然语言。本文将深入探讨文本向量化的各种方法,包括词袋模型(Bag of Words)、TF-IDF、词嵌入(Word Embeddings)、以及近年来的前沿技术如BERT和GPT。每种方法都将附带详细的Python代码示例,帮助读者更好地理解和应用这些技术。

1. 词袋模型(Bag of Words)

词袋模型是一种最简单、最直观的文本向量化方法。它不考虑词的顺序,仅统计每个词在文档中出现的频次。

1.1 词袋模型的原理

词袋模型将文本转换为一个固定大小的词汇表,然后根据每个词在文档中出现的次数生成向量。假设有以下三个文档:

Doc1: "我喜欢自然语言处理"
Doc2: "自然语言处理很有趣"
Doc3: "我喜欢学习新知识"

我们首先构建一个词汇表:[“我”, “喜欢”, “自然”, “语言”, “处理”, “很”, “有趣”, “学习”, “新”, “知识”]。

然后,根据每个词在文档中出现的次数生成向量:

Doc1: [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
Doc2: [0, 0, 1, 1, 1, 1, 1, 0, 0, 0]
Doc3: [1, 1, 0, 0, 0, 0, 0, 1, 1, 1]

1.2 词袋模型的Python实现

from sklearn.feature_extraction.text import CountVectorizer

# 示例文档
documents = ["我", "喜欢", "自然", "语言", "处理", "很", "有趣", "学习", "新", "知识"]

# 创建词袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)

# 打印词汇表
print("词汇表:\n", vectorizer.get_feature_names_out())

# 打印词袋向量
print("词袋向量:\n", X.toarray())

在这里插入图片描述

1.3 词袋模型的优缺点

优点:

  • 简单易懂,计算效率高
  • 适用于小规模数据集

缺点:

  • 忽略了词的顺序和语义信息
  • 向量维度随词汇表大小增加,容易产生稀疏矩阵

2. TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency)是一种改进的词袋模型,通过考虑词在文档中的频率和在整个语料库中的反向文档频率,衡量词的重要性。

2.1 TF-IDF的原理

在这里插入图片描述

2.2 TF-IDF的Python实现

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer

# 示例文档
documents = [
    "我喜欢自然语言处理",
    "自然语言处理很有趣",
    "我喜欢学习新知识"
]

# 对文档进行分词
def jieba_tokenizer(text):
    return ' '.join(jieba.cut(text))

tokenized_documents = [jieba_tokenizer(doc) for doc in documents]

# 创建TF-IDF模型
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(tokenized_documents)

# 打印词汇表
print("词汇表:\n", vectorizer.get_feature_names_out())

# 打印TF-IDF向量
print("TF-IDF向量:\n", X.toarray())

在这里插入图片描述

2.3 TF-IDF的优缺点

优点:

  • 考虑了词的全局重要性
  • 能够在一定程度上降低常见词对模型的影响

缺点:

  • 依然忽略了词的顺序和语义信息
  • 计算复杂度较高,适用于中小规模数据集

3. 词嵌入(Word Embeddings)

词嵌入是一种更为高级的文本向量化方法,通过将词映射到一个低维向量空间,捕捉词之间的语义关系。常见的词嵌入方法包括Word2Vec、GloVe和FastText。

3.1 Word2Vec

Word2Vec是由Google提出的一种词嵌入方法,通过训练神经网络,将词映射到一个连续的向量空间,使相似的词在向量空间中距离较近。Word2Vec有两种模型:CBOW(Continuous Bag of Words)和Skip-gram。

3.1.1 Word2Vec的Python实现
from gensim.models import Word2Vec

# 示例句子
sentences = [
    ["我", "喜欢", "自然", "语言", "处理"],
    ["自然", "语言", "处理", "很", "有趣"],
    ["我", "喜欢", "学习", "新", "知识"]
]

# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

# 获取词向量
vector = model.wv['自然']
print("词向量:\n", vector)

# 查找相似词
similar_words = model.wv.most_similar('自然', topn=5)
print("相似词:\n", similar_words)

在这里插入图片描述
在这里插入图片描述

3.2 GloVe

GloVe(Global Vectors for Word Representation)是一种基于统计的词嵌入方法,通过矩阵分解,将词映射到一个低维向量空间。GloVe模型在处理大规模语料库时具有较高的效率。

3.2.1 GloVe的Python实现
import gensim.downloader as api
from gensim.models import KeyedVectors

# 下载预训练的GloVe模型(英语语料)
model = api.load("glove-wiki-gigaword-100")

# 获取词向量
vector = model['apple']
print("词向量:\n", vector)

# 查找相似词
similar_words = model.most_similar('apple', topn=5)
print("相似词:\n", similar_words)

在这里插入图片描述
在这里插入图片描述

3.3 FastText

FastText是Facebook提出的一种改进的词嵌入方法,不仅考虑词本身,还考虑词的子词信息(如词根、词缀等),因此在处理罕见词和形态变化丰富的语言时表现更好。

3.3.1 FastText的Python实现
from gensim.models import FastText

# 示例句子
sentences = [
    ["我", "喜欢", "自然", "语言", "处理"],
    ["自然", "语言", "处理", "很", "有趣"],
    ["我", "喜欢", "学习", "新", "知识"]
]

# 训练FastText模型
model = FastText(sentences, vector_size=100, window=5, min_count=1, workers=4)

# 获取词向量
vector = model.wv['自然']
print("词向量:\n", vector)

# 查找相似词
similar_words = model.wv.most_similar('自然', topn=5)
print("相似词:\n", similar_words)

在这里插入图片描述
在这里插入图片描述

3.4 词嵌入方法的优缺点

优点:

  • 捕捉了词之间的语义关系
  • 向量维度低,计算效率高
  • 可用于各种下游任务,如分类、聚类、生成等

缺点:

  • 需要大量语料进行训练
  • 无法处理未登录词(Out-of-Vocabulary,OOV)

4. 预训练语言模型(Pre-trained Language Models)

近年来,预训练语言模型如BERT、GPT等在NLP领域取得了显著的进展。这些模型通过在大规模语料库上进行预训练,能够捕捉丰富的语言特征,并在各种下游任务中表现出色。

4.1 BERT

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的双向语言模型,通过掩码语言模型(Masked Language Model)和下一句预测(Next Sentence Prediction

)任务进行预训练。

4.1.1 BERT的Python实现
from transformers import BertTokenizer, BertModel
import torch

# 加载预训练的BERT模型和词汇表
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')

# 编码输入文本
input_text = "自然语言处理很有趣"
inputs = tokenizer(input_text, return_tensors='pt')

# 获取BERT的输出
with torch.no_grad():
    outputs = model(**inputs)

# 获取文本的嵌入向量
embeddings = outputs.last_hidden_state
print("文本嵌入向量:\n", embeddings)

在这里插入图片描述

4.2 GPT

GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的单向语言模型,通过自回归语言模型任务进行预训练,擅长生成类任务。

4.2.1 GPT的Python实现
from transformers import GPT2Tokenizer, GPT2Model
import torch
# 加载预训练的GPT模型和词汇表
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')

# 编码输入文本
input_text = "自然语言处理很有趣"
inputs = tokenizer(input_text, return_tensors='pt')

# 获取GPT的输出
with torch.no_grad():
    outputs = model(**inputs)

# 获取文本的嵌入向量
embeddings = outputs.last_hidden_state
print("文本嵌入向量:\n", embeddings)

在这里插入图片描述

4.3 预训练语言模型的优缺点

优点:

  • 捕捉了丰富的语义和上下文信息
  • 在各种NLP任务中表现出色
  • 适应性强,可通过微调应用于不同任务

缺点:

  • 训练成本高,计算资源需求大
  • 模型复杂,推理速度较慢

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生物素-十一聚乙二醇-沙利度胺;Biotin-PEG11-Thalidomide

Biotin-PEG11-Thalidomide,即生物素-十一聚乙二醇-沙利度胺,是一种结合了生物素、十一聚乙二醇(PEG11)和沙利度胺的复杂化合物。以下是对该化合物的详细分析: 一、组成成分及特性 生物素(Biotin&#xff09…

备份及恢复Sonarqube服务数据

基础数据: 源数据机ip:192.*.53 测试机ip:192.*.65 Sonarqube访问地址:http://192.*.65:9000/ 账户名:admin 密码:123456 数据库postgres: 版本:PostgreSQL 15.3 一、数据备份…

厨电,被AI重构的下一个十年|产业特稿

智能化赋能下,厨房从闲人免进的油污重地,到会朋交友的社交空间。随着老板、方太等头部厨电厂商纷纷布局AI,厨电行业的数字化、智能化正逐渐改变了人们和烹饪之间的交互,重塑着厨房固有的属性、定位和职能。 作者|斗斗 编辑|皮爷…

RSA算法java实现

基于RSA算法的Java示例代码,展示了如何进行公钥加密、私钥解密、私钥签名和公钥验签。 非堆成加密公私钥使用学习请查看:非堆成加密公私钥使用-CSDN博客 代码实现 package com.chengxuyuan.demo;import javax.crypto.Cipher; import java.security.*;…

3D互动+AR试戴,赋能珠宝品牌线上营销!

随着电商浪潮的汹涌而至,珠宝这一传统上依赖实体店铺销售的行业,正积极拥抱线上转型的浪潮。然而,面对珠宝商品高客单价及消费者对于亲身体验的强烈需求,线上销售面临诸多挑战,尤其是图片展示难以全面展现珠宝魅力&…

cache 设计

1. cache 概念扫描 简介: cache 是一种小容量的缓存空间,类似于较小的sram 。 它的存在着重解决逻辑访问外部存储(ddr )的时延。 通过一种预测算法(cache 的换入和换出),将逻辑大概率访问的热点…

Milvus核心设计(2)-----TSO机制详解

目录 背景 动机 Timestamp种类及使用场景 Guarantee timestamp Service timestamp Graceful time Timestamp同步机制 主流程 时间戳同步流程 背景 Milvus 在设计上突出了分布式的设计,虽然Chroma 也支持分布式的store 与 query。但是相对Milvus来说,不算非常突出。…

【LangChain系列】【基于Langchain的Pandascsv Agent】

目录 前言一、LangChain1-1、介绍1-2、特点 二、Pandas&csv Agent2-1、安装2-2、Pandas&csv Agent介绍2-3、Pandas&csv Agent使用2-3-1、相关库的导入:2-3-2、设置要调用的模型(我这里使用阿里的模型)2-3-3、数据读取&展示2-…

华为USG6000V防火墙v1

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…

记一次酣畅淋漓的UDF提权(Linux)

外网打点就不放了,翻了一下具备suid权限的命令,没啥结果。 可疑的命令是/usr/lib/dbus-1.0/dbus-daemon-launch-helper但是没有找到用这个命令提权的资料。 弹shell后翻找一下源码,/app/api.py文件中链接了mysql,事出反常必有妖&…

Qt:18.状态栏(状态栏介绍、代码方式创建状态栏、在状态栏显示临时信息、在状态栏创建控件)

目录 1.状态栏介绍: 2.代码方式创建状态栏: 3. 在状态栏显示临时信息: 4.在状态栏创建控件: 1.状态栏介绍: Qt 状态栏是 QMainWindow 窗口的一部分,通常用于显示临时信息,如应用程序的状态、…

hbase学习

hbase学习 hbase概述: HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化或者半结构化,非结构化的数据(底层是字节数组做存储的) HBase是Hadoop的生态系统之一,是建立在…

系统化学习 H264视频编码(03)数据压缩流程及相关概念

说明:我们参考黄金圈学习法(什么是黄金圈法则?->模型 黄金圈法则,本文使用:why-what)来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法,理论方面会更多地讲清楚 音视频中概念的…

国产化趋势下源代码数据防泄密的信创沙盒的方案分享

随着国产化的大力推进,越来越多的企事业单位在逐步替换Windows、Linux等操作系统的使用。那么什是国产化了?国产化是指在产品或服务中采用国内自主研发的技术和标注,替代过去依赖的他国的产品和服务,国产化又被称之为“信创”&…

pytorch实现水果2分类(蓝莓,苹果)

1.数据集的路径,结构 dataset.py 目的: 输入:没有输入,路径是写死了的。 输出:返回的是一个对象,里面有self.data。self.data是一个列表,里面是(图片路径.jpg,标签&…

错误处理在网络爬虫开发中的重要性:Perl示例_引言

错误处理的必要性 在网络爬虫的开发过程中,可能会遇到多种错误,包括但不限于: 网络连接问题服务器错误(如404或500错误)目标网站结构变化超时问题权限问题 错误处理机制可以确保在遇到这些问题时,爬虫能…

防火墙之安全策略

目录 前言: 一、实验需求 二、需求分析 三、具体操作 1,在安全区域中新建拓扑图中所显示的区域 2,在对象模块中的时间段中添加一个9:00-18:00 3,写两条安全策略,一个是生产区&#xff0c…

记录文字视差背景学习

效果图 文字背景会随鼠标上下移动变成红色或透明 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

前端使用pinia中存入的值

导入pinia,创建pinia实例 使用pinia中的值

【Spring Boot】关系映射开发(二):一对多映射

《JPA 从入门到精通》系列包含以下文章&#xff1a; Java 持久层 API&#xff1a;JPA认识 JPA 的接口JPA 的查询方式基于 JPA 开发的文章管理系统&#xff08;CRUD&#xff09;关系映射开发&#xff08;一&#xff09;&#xff1a;一对一映射关系映射开发&#xff08;二&#…