免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」
文本张量表示是将文本数据转换为张量(通常是矩阵)形式的过程。通常,每个词汇被表示为一个向量(称为词向量),这些词向量按顺序排列形成一个矩阵,从而表示整个文本。例如:
["人生", "该", "如何", "起头"]
==>
# 每个词对应矩阵中的一个向量[[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]]
将文本表示为张量(矩阵)形式,使得计算机能够处理和理解自然语言文本,从而进行后续的分析和处理任务。
One-Hot 编码是一种简单的词向量表示方法。每个词被表示为一个长度为 n 的向量,其中只有一个元素为 1,其余为 0。n 的大小等于语料库中不同词汇的总数。例如:
["改变", "要", "如何", "起手"]`==>
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
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)
输出:
鹿晗 的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 编码逐渐被更高效的稠密向量表示方法(如 Word2Vec 和 Word Embedding)所取代。
Word2Vec 是一种无监督学习方法,能够将词汇表示为稠密向量。它通过训练神经网络模型,将网络参数作为词汇的向量表示。Word2Vec 有两种训练模式:
CBOW 通过上下文词汇预测目标词汇。例如,给定一个窗口大小为 9 的文本,使用前后 4 个词汇来预测目标词汇。
Skip-Gram 通过目标词汇预测上下文词汇。与 CBOW 相反,Skip-Gram 使用目标词汇来预测其周围的词汇。
词嵌入是通过某种方式将词汇映射到高维空间中的稠密向量表示。广义上,词嵌入包括所有稠密向量表示方法,如 Word2Vec;狭义上,词嵌入指的是神经网络中的嵌入层,通过训练得到的嵌入矩阵。
可以使用维基百科的部分网页信息作为训练数据。通过以下命令下载并解压数据:
wget -c http://mattmahoney.net/dc/enwik9.zip -P dataunzip data/enwik9.zip -d data
使用 FastText 训练词向量:
import fasttextmodel = fasttext.train_unsupervised('data/fil9')
可以调整模型的超参数,如训练模式、词向量维度、学习率等:
model = fasttext.train_unsupervised('data/fil9', "cbow", dim=300, epoch=1, lr=0.1, thread=8)
通过查找邻近词汇来检验模型效果:
model.get_nearest_neighbors('sports')model.get_nearest_neighbors('music')model.get_nearest_neighbors('dog')
保存和加载模型:
model.save_model("fil9.bin")model = fasttext.load_model("fil9.bin")
通过 TensorBoard 可以可视化词嵌入的效果:
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 服务:
tensorboard --logdir runs --host 0.0.0.0
通过浏览器访问可视化页面,查看词嵌入的效果。
文本张量表示是将文本数据转换为计算机可处理的张量形式的过程。通过 One-Hot 编码、Word2Vec 和词嵌入等方法,可以将词汇表示为稠密向量,从而捕捉词汇之间的语义关系。FastText 是一种常用的工具,能够高效地训练词向量,并通过调整超参数优化模型效果。
本文已收录在Github Java-Interview-Tutorial,关注我,紧跟本系列专栏文章,咱们下篇再续!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有