前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >90%的开发者都忽略的文本向量化技巧!

90%的开发者都忽略的文本向量化技巧!

作者头像
JavaEdge
发布于 2025-06-01 04:12:27
发布于 2025-06-01 04:12:27
10900
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

1. 什么是文本张量表示?

文本张量表示是将文本数据转换为张量(通常是矩阵)形式的过程。通常,每个词汇被表示为一个向量(称为词向量),这些词向量按顺序排列形成一个矩阵,从而表示整个文本。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["人生", "该", "如何", "起头"]
==>
# 每个词对应矩阵中的一个向量[[1.32, 4.32, 0.32, 5.2], [3.1, 5.43, 0.34, 3.2], [3.21, 5.32, 2, 4.32], [2.54, 7.32, 5.12, 9.54]]
2. 文本张量表示的作用

将文本表示为张量(矩阵)形式,使得计算机能够处理和理解自然语言文本,从而进行后续的分析和处理任务。

3. 文本张量表示的方法
3.1 One-Hot 词向量表示

One-Hot 编码是一种简单的词向量表示方法。每个词被表示为一个长度为 n 的向量,其中只有一个元素为 1,其余为 0。n 的大小等于语料库中不同词汇的总数。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["改变", "要", "如何", "起手"]`==>
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
One-Hot 编码的实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.externals import joblibfrom keras.preprocessing.text import Tokenizer
vocab = {"周杰伦", "陈奕迅", "王力宏", "李宗盛", "吴亦凡", "鹿晗"}t = Tokenizer(num_words=None, char_level=False)t.fit_on_texts(vocab)
for token in vocab:    zero_list = [0]*len(vocab)    token_index = t.texts_to_sequences([token])[0][0] - 1    zero_list[token_index] = 1    print(token, "的one-hot编码为:", zero_list)
tokenizer_path = "./Tokenizer"joblib.dump(t, tokenizer_path)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
鹿晗 的one-hot编码为: [1, 0, 0, 0, 0, 0]王力宏 的one-hot编码为: [0, 1, 0, 0, 0, 0]李宗盛 的one-hot编码为: [0, 0, 1, 0, 0, 0]陈奕迅 的one-hot编码为: [0, 0, 0, 1, 0, 0]周杰伦 的one-hot编码为: [0, 0, 0, 0, 1, 0]吴亦凡 的one-hot编码为: [0, 0, 0, 0, 0, 1]
One-Hot 编码的优缺点
  • 优点:简单易懂,易于实现。
  • 缺点:无法捕捉词与词之间的关系,且在大语料库中,向量维度会变得非常大,占用大量内存。

由于这些缺点,One-Hot 编码逐渐被更高效的稠密向量表示方法(如 Word2Vec 和 Word Embedding)所取代。

3.2 Word2Vec

Word2Vec 是一种无监督学习方法,能够将词汇表示为稠密向量。它通过训练神经网络模型,将网络参数作为词汇的向量表示。Word2Vec 有两种训练模式:

3.2.1 CBOW(Continuous Bag of Words)

CBOW 通过上下文词汇预测目标词汇。例如,给定一个窗口大小为 9 的文本,使用前后 4 个词汇来预测目标词汇。

3.2.2 Skip-Gram

Skip-Gram 通过目标词汇预测上下文词汇。与 CBOW 相反,Skip-Gram 使用目标词汇来预测其周围的词汇。

3.3 Word Embedding(词嵌入)

词嵌入是通过某种方式将词汇映射到高维空间中的稠密向量表示。广义上,词嵌入包括所有稠密向量表示方法,如 Word2Vec;狭义上,词嵌入指的是神经网络中的嵌入层,通过训练得到的嵌入矩阵。

4. 使用 FastText 训练和使用 Word2Vec
4.1 获取训练数据

可以使用维基百科的部分网页信息作为训练数据。通过以下命令下载并解压数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget -c http://mattmahoney.net/dc/enwik9.zip -P dataunzip data/enwik9.zip -d data
4.2 训练词向量

使用 FastText 训练词向量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import fasttextmodel = fasttext.train_unsupervised('data/fil9')
4.3 模型超参数设定

可以调整模型的超参数,如训练模式、词向量维度、学习率等:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = fasttext.train_unsupervised('data/fil9', "cbow", dim=300, epoch=1, lr=0.1, thread=8)
4.4 模型效果检验

通过查找邻近词汇来检验模型效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.get_nearest_neighbors('sports')model.get_nearest_neighbors('music')model.get_nearest_neighbors('dog')
4.5 模型的保存与重加载

保存和加载模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.save_model("fil9.bin")model = fasttext.load_model("fil9.bin")
5. 词嵌入的可视化分析

通过 TensorBoard 可以可视化词嵌入的效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torchfrom torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()embedded = torch.randn(100, 50)meta = list(map(lambda x: x.strip(), fileinput.FileInput("./vocab100.csv")))writer.add_embedding(embedded, metadata=meta)writer.close()

启动 TensorBoard 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tensorboard --logdir runs --host 0.0.0.0

通过浏览器访问可视化页面,查看词嵌入的效果。

总结

文本张量表示是将文本数据转换为计算机可处理的张量形式的过程。通过 One-Hot 编码、Word2Vec 和词嵌入等方法,可以将词汇表示为稠密向量,从而捕捉词汇之间的语义关系。FastText 是一种常用的工具,能够高效地训练词向量,并通过调整超参数优化模型效果。

本文已收录在Github Java-Interview-Tutorial,关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W+技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统亿级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是文本张量表示?
  • 2. 文本张量表示的作用
  • 3. 文本张量表示的方法
    • 3.1 One-Hot 词向量表示
      • One-Hot 编码的实现
      • One-Hot 编码的优缺点
    • 3.2 Word2Vec
      • 3.2.1 CBOW(Continuous Bag of Words)
      • 3.2.2 Skip-Gram
    • 3.3 Word Embedding(词嵌入)
  • 4. 使用 FastText 训练和使用 Word2Vec
    • 4.1 获取训练数据
    • 4.2 训练词向量
    • 4.3 模型超参数设定
    • 4.4 模型效果检验
    • 4.5 模型的保存与重加载
  • 5. 词嵌入的可视化分析
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档