NLP基础知识 - 向量化

ops/2024/12/27 19:16:28/

NLP基础知识 - 向量化

目录

NLP基础知识 - 向量化

  • NLP基础知识 - 向量化
    • 目录
    • 什么是向量化?
    • 为什么需要向量化?
    • 常见的向量化方法
      • 1. 词袋模型(Bag of Words, BoW)
      • 2. TF-IDF(词频-逆文档频率)
      • 3. 词嵌入(Word Embedding)
      • 4. 句子嵌入(Sentence Embedding)


什么是向量化?

向量化是自然语言处理(NLP)领域的核心步骤之一。它的目标是将文本数据转换为数学形式(向量),使其能够被机器学习模型处理。

在实际操作中,文本中的单词或句子被表示为一个高维空间中的点,这些点可以捕捉文本之间的语义关系。向量化是 NLP 中将非结构化数据结构化的关键环节。


为什么需要向量化?

  • 机器学习模型输入要求:机器学习模型只能处理数值数据,因此需要将文本数据转换为数字形式。
  • 捕捉语义关系:向量化允许模型捕捉单词、短语和句子之间的语义关系,例如同义词或相似词。
  • 简化文本计算:数学向量便于执行计算,例如相似度度量(余弦相似度、欧氏距离等)。

常见的向量化方法

1. 词袋模型(Bag of Words, BoW)

词袋模型是最简单的向量化方法之一。它将文本中的单词表示为特征,并统计每个单词的出现次数。

from sklearn.feature_extraction.text import CountVectorizercorpus = ["我喜欢自然语言处理","自然语言处理很有趣","机器学习和深度学习都是AI的组成部分"
]# 创建词袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)# 显示结果
print("词袋模型特征:", vectorizer.get_feature_names_out())
print("词袋模型矩阵:\n", X.toarray())

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

TF-IDF是一种改进的词袋模型,它不仅考虑单词出现的次数,还考虑单词在整个语料库中的重要性。

from sklearn.feature_extraction.text import TfidfVectorizer# 创建TF-IDF模型
tfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(corpus)# 显示结果
print("TF-IDF特征:", tfidf_vectorizer.get_feature_names_out())
print("TF-IDF矩阵:\n", X_tfidf.toarray())

3. 词嵌入(Word Embedding)

(1) Word2Vec
Word2Vec是通过神经网络学习单词的稠密向量表示,能够捕捉到单词之间的语义关系。

from gensim.models import Word2Vecsentences = [["自然语言处理", "是", "人工智能", "的一部分"],["机器学习", "是", "NLP", "的重要组成"],["深度学习", "提升", "了", "AI", "的性能"]
]# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)# 显示单词向量
print("单词 '自然语言处理' 的向量表示:", model.wv['自然语言处理'])

(2) GloVe
GloVe(Global Vectors for Word Representation)是一种基于统计的词嵌入方法,利用词共现矩阵进行建模。

4. 句子嵌入(Sentence Embedding)

句子嵌入是基于句子而非单词的向量化方法,能够捕捉句子级别的语义。

(1) 使用预训练模型(如BERT)
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer的预训练模型,能够生成上下文相关的向量。

from transformers import BertTokenizer, BertModel
import torch# 加载BERT模型
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')# 输入句子
sentence = "Natural language processing is fun!"
inputs = tokenizer(sentence, return_tensors='pt')# 生成句子嵌入
outputs = model(**inputs)
sentence_embedding = outputs.last_hidden_state.mean(dim=1)print("句子嵌入向量:", sentence_embedding)

http://www.ppmy.cn/ops/145459.html

相关文章

python EEGPT报错:Cannot cast ufunc ‘clip‘ output from dtype(‘float64‘)

今天在运行EEGPT的时候遇见了下面的问题,首先是nme报错,然后引起了numpy的报错: numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc clip output from dtype(float64)在网上找了好久的教程,但是没有找到。猜测…

Python爬虫实战:按关键字搜索VIP商品详情

在电子商务的浪潮中,快速准确地获取商品信息成为了一项至关重要的技能。对于电商平台而言,能够根据用户输入的关键字搜索VIP商品并获取其详细信息,不仅能够提升用户体验,还能够增强客户忠诚度。本文将带你深入了解如何利用Python爬…

VUE前端实现防抖节流 Lodash

方法一:采用Lodash工具库 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 (1)采用终端导入Lodash库 $ npm i -g npm $ npm i --save lodash (2)应用 示例:搜索框输入防抖 在这个示例…

上海AI中心记录

先谈谈做了什么项目,用了什么技术,有什么亮点和困难,采用什么方案解决的。 1、js事件循环 调用栈(Call Stack): JavaScript 是单线程的,所有的代码执行都是在调用栈中进行的。当函数被调用时&a…

postman去除更新

一、关闭自动更新目前有两种方案: 1.Hosts文件配置以下地址屏蔽连接: 以下配置粘贴到文件中,文件位置:C:\Windows\System32\drivers\etc 0.0.0.0 dl.pstmn.io 0.0.0.0 sync-v3.getpostman.com 0.0.0.0 ge…

代码随想录day28 贪心2

题目:122.股票买卖最佳时机II 55.跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和 需要重做:全部 122.买卖股票的最佳时机II 思路:只获取正利润,即prices[i]-prices[i-1]。只有大于0的时候加到res 注意:还…

Monorepo pnpm 模式管理多个 web 项目

Monorepo pnpm 模式管理多个 web 项目 Monorepo pnpm 模式管理多个 web 项目 项目地址git flow 工作流程pnpm workspace.npmrc初始化项目架构引入Husky规范git提交配置eslint和prettier eslint 配置prettier 配置 配置lint-staged创建项目 创建shared项目全局安装 vue在 packag…

PDF书籍《手写调用链监控APM系统-Java版》第12章 结束

本人阅读了 Skywalking 的大部分核心代码,也了解了相关的文献,对此深有感悟,特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式,看本书时一定要跟着敲代码。 作者…