0

0

文本离散表示方法

P粉084495128

P粉084495128

发布时间:2025-07-28 09:41:03

|

289人浏览过

|

来源于php中文网

原创

本文介绍了文本的向量表示,包括词向量的概念、将单词转化为向量的方式及词向量具备语义信息的特点。还讲解了独热编码、词袋模型、TF-IDF、N-gram模型等离散表示方法,并指出离散表示存在无法衡量词间关系、数据稀疏、计算复杂等缺点。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

文本离散表示方法 - php中文网

1. 文本的向量表示

  • 文本的向量表示:核心的思想就是把文本中的单词(句子)表示成对应的数字
  • 文本的向量表示也叫Word Embeding & Word Representation。
  • 词向量:Word2vec:CBOW & Skip-Gram (单词的词向量)

1.1 问题引入

1.1.1 计算机中如何表示一个词语?

  • 请找出和青蛙(frog)最接近的前7个单词是哪些?

文本离散表示方法 - php中文网        

  • 计算机系统中学习到单词的向量表示时应满足向量空间分布的相似性。

文本离散表示方法 - php中文网        

  • 计算机系统中学习到单词的向量表示同时应满足向量空间子结构

文本离散表示方法 - php中文网        

最终目标:单词的向量表示作为机器学习,特别是深度学习的输入和表示空间

1.1.2 词向量的基本概念

  • 词向量是一种自然语言中表示单词的方法,即把每个单词表示为NN维空间内的一个点,也是高维空间的向量,通过这种方法,可以把自然语言的计算转换为空间向量的计算。

文本离散表示方法 - php中文网        

1.1.3 实现词向量的两大挑战

文本离散表示方法 - php中文网        

1.1.4 单词转化为向量

  • 通过词向量表(Excel,数据库表,text文本文件,numpy文件(npz)进行查询,词向量表中每行存储了单词和对应的向量表示
  • 第一列单词的本身

文本离散表示方法 - php中文网        

1.1.5 词向量具备语义信息

  • 科研人员都有一个共识,可以使用一个单词附近的词语来表示这个单词的含义

文本离散表示方法 - php中文网        

使用上下文可以推断出第一个“苹果”指的是iphone手机;

Cliclic AI
Cliclic AI

Cliclic商品背景图编辑器是一款功能强大的AI工具,帮助用户快速生成具有吸引力的商品图背景。

下载
  1. 第二个“苹果”指的是水果苹果
  2. 第三个根据语境得到“菠萝”指的是一个手机。
  3. 我们可以使用同样的想法来训练词向量,让这些词向量能够表示语义信息的能力。

1.2 文本的离散表示方法

1.2.1 独热编码(One-Hot Encoder)

  • 独热码:只管来说就是有多少个状态就用多少个比特位来表示。而且只有一个比特位为1,其他全为0的一种表示方法。
  • 红、黄、蓝。 {红:1,蓝:2,黄:3}
  • 红:1 0 0;黄色:0 1 0;蓝色:0 0 1
  • 对于文本的向量表示该如何使用独热编码表示:深度学习
深 1 0 0 0  
度 0 1 0 0  
学 0 0 1 0  
习 0 0 0 1
       

文本离散表示方法 - php中文网        

In [2]
# 实现one-hot encoder编码表示"""
    性别 区域 成绩
    0  0  3
    1  1  0
    0  2  1
    1  0  2
    需求:请输出[0, 1, 3]每个数字的one-hot编码表示
"""# 导入工具包sklearnfrom sklearn import preprocessing # 数据预处理,实现了one-hot的方法one_hot = preprocessing.OneHotEncoder()
one_hot.fit([
    [0, 0, 3],
    [1, 1, 0],
    [0, 2, 1],
    [1, 0, 2]
    ]
)
result = one_hot.transform([[0,2,2]]).toarray()print(result)
       
[[1. 0. 0. 0. 1. 0. 0. 1. 0.]]
       

1.2.2 词袋模型(Bag of words)

  • 词袋模型:将所有的词语装进一个袋子中,不考虑词法和语序的问题,每个单词都是独立的,同时对每个单词统计其在语料库中出现的次数。
  • 实现词袋模型的步骤
    1. 构建词汇表:语料库中所有不重复的单词组成的字典
    2. 构建字典时按照单词的字典(a\b.)顺序组成,{orange:3,banana:1,apple:0,grape:2}
orange banana apple grape   
banana apple apple
grapeorange apple
       
  • 把每个句子转化成对应的向量表示 文本离散表示方法 - php中文网            
In [11]
# 1. 导入工具库from sklearn.feature_extraction.text import CountVectorizer # 计数texts = [    "orange banana apple grape",    "banana apple apple apple",    "grape",    "orange apple",
]

count_vec = CountVectorizer() # 创建词袋模型的对象count_vec_fit = count_vec.fit_transform(texts) # 训练语料库print(count_vec.vocabulary_) # 输出根据语料库构建的词汇表print(count_vec_fit.toarray()) #  把文本转换成对应的向量表示
       
{'orange': 3, 'banana': 1, 'apple': 0, 'grape': 2}
[[1 1 1 1]
 [3 1 0 0]
 [0 0 1 0]
 [1 0 0 1]]
       

1.2.3 词频-逆文本频率

  • TF-IDF是一种用于咨询检索与文本挖掘的常用加权技术,词袋模型使用的是词频,TF-IDF用的是词的权重。
  • 词频:指的是一个给定的词语在文本中出现的频率。
  • 逆向文本频率:是一个词语普遍重要性的度量。

注意事项:如果一个单词在句子中出现的频率非常的高,说明该单词具有一定的重要性,但如果一个词语在整篇语料库中出现的频率都很高,就说明这个单词很普遍(常见)。文本离散表示方法 - php中文网            

In [12]
# 1.  导入工具库from sklearn.feature_extraction.text import TfidfVectorizer

texts = [    "orange banana apple grape",    "banana apple apple apple",    "grape",    "orange apple",
]

tdf_vec = TfidfVectorizer() # 创建词袋模型的对象tdf_vec_fit = tdf_vec.fit_transform(texts) # 训练语料库print(tdf_vec.vocabulary_) # 输出根据语料库构建的词汇表print(tdf_vec_fit.toarray()) #  把文本转换成对应的向量表示
       
{'orange': 3, 'banana': 1, 'apple': 0, 'grape': 2}
[[0.42344193 0.52303503 0.52303503 0.52303503]
 [0.92468843 0.38072472 0.         0.        ]
 [0.         0.         1.         0.        ]
 [0.62922751 0.         0.         0.77722116]]
       

1.2.4 N-gram模型(语言模型)

  • 考虑了词语之间的顺序
  • 缺点:词表的维度会随之单词的增加而急剧增加,在实际的工作中,n=4以上的情形是没有用过的,因为算法的复杂度太高。

1.2.4 bi-gram的表示方法

文本离散表示方法 - php中文网        

1.2.6 tri-gram的表示方法

文本离散表示方法 - php中文网        

In [13]
from sklearn.feature_extraction.text import CountVectorizer # 词频的统计可以实现n-gram# 1. 构建语料库texts = [    "orange banana apple grape",    "banana apple apple",    "grape",    "orange apple",
]# 2. 创建构建n-gram的对象count_ngram_vec = CountVectorizer(ngram_range=(2,3))
count_ngram_vec_fit = count_ngram_vec.fit_transform(texts)print(count_ngram_vec.vocabulary_) # 打印bi-gram的词汇表print(count_ngram_vec_fit.toarray())  # 文本转换成对应的向量表示
       
{'orange banana': 6, 'banana apple': 2, 'apple grape': 1, 'orange banana apple': 7, 'banana apple grape': 4, 'apple apple': 0, 'banana apple apple': 3, 'orange apple': 5}
[[0 1 1 0 1 0 1 1]
 [1 0 1 1 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 1 0 0]]
       

1.3 总结

1.3.1 离散的文本向量表示方法的缺点

  • 无法衡量词向量词向量之间的关系
酒店 1 0 0
宾馆 0 1 0
旅社 0 0 1
       
  • 无论使用那种度量方式都不能表示这三个单词之间的关系
  • 数据非常稀疏
  • N-gram模型的计算复杂度太高

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

504

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

292

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

759

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

534

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

82

2025.09.08

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

60

2025.10.14

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

136

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

47

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Highcharts中文参考手册
Highcharts中文参考手册

共16课时 | 8.5万人学习

ios开发手册中文版
ios开发手册中文版

共25课时 | 20.8万人学习

Docker 教程
Docker 教程

共19课时 | 20.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号