神经网络中的向量化:入门指南
Source: Dev.to
请提供您希望翻译的具体文本内容,我将按照要求保留源链接并进行简体中文翻译。
什么是向量化?
- Vector:数据的数学表示,作为有序的数字列表。
- Vectorization:将原始数据(单词、像素、声音等)转换为向量,以便神经网络能够执行快速算术并学习模式。
通过将数据表示为向量,计算机可以用高效的数组操作取代慢速循环,从而加快训练和推理速度。
实际应用
- 搜索引擎 – 查询和文档被向量化以比较相关性。
- 手机助手 – 语音被向量化,使 Siri/Google Assistant 能理解指令。
- 语言翻译 – 单词被映射到捕捉意义的向量。
- 交通路由 – 地图数据被向量化以计算最佳路线。
- 电子商务 – 产品和用户行为被向量化用于推荐系统。
- 医疗保健 – 医学扫描被向量化用于异常检测。
- 金融 – 交易被向量化以发现欺诈。
- 垃圾邮件过滤 – 电子邮件被向量化以分类为垃圾邮件或安全邮件。
- 自动驾驶 – 传感器数据被向量化用于车道保持和碰撞警报。
工作原理
文本数据
每个词都会映射到一个向量(例如,“king” → [0.25, 0.89, 0.12,…])。常见的技术包括词袋模型、TF‑IDF 和密集嵌入。
图像数据
像素(RGB 值)会转换为向量中的数字。一个 64×64、包含三个颜色通道的图像就是一个长度为 12 288 的向量。
运算
不是对单个元素进行循环,而是一次性对整个向量进行数学运算:
[1, 2, 3] + [4, 5, 6] = [5, 7, 9]
优势
- 速度 – 训练和推理更快。
- 简洁 – 代码更清晰,无需显式循环。
- 可扩展性 – 能高效处理大规模数据集。
- 准确性 – 捕捉文本的语义含义和图像的视觉模式。
Python 示例
import numpy as np
# 两个简单向量
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 向量化相加
c = a + b
print(c) # [5 7 9]
from sklearn.feature_extraction.text import CountVectorizer
texts = [
"AI is amazing",
"Vectorization makes AI fast",
"AI AI is powerful"
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
print(vectorizer.get_feature_names_out())
# ['ai' 'amazing' 'fast' 'is' 'makes' 'powerful' 'vectorization']
print(X.toarray())
# [[1 1 0 1 0 0 0]
# [1 0 1 0 1 0 1]
# [2 0 0 1 0 1 0]]
说明
- 词汇表由所有句子中出现的唯一单词组成。
- 每一列对应一个单词;每一行对应一个句子。
- 值表示单词出现的次数(例如
2表示该单词出现了两次)。
向量化类型
数值向量化
直接使用原始数字(例如像素强度、传感器读数)。
类别向量化
将类别值转换为数值形式。
One‑Hot 编码
创建一个二进制向量,唯一的 1 表示激活的类别。
import pandas as pd
animals = pd.DataFrame({'pet': ['cat', 'dog', 'fish', 'cat']})
encoded = pd.get_dummies(animals, columns=['pet'])
print(encoded)
# pet_cat pet_dog pet_fish
# 0 1 0 0
# 1 0 1 0
# 2 0 0 1
# 3 1 0 0
Label 编码
为每个类别分配唯一整数(例如 cat → 0,dog → 1,fish → 2)。简单但可能无意中暗示序数关系。
Binary 编码
将类别表示为二进制数,较 One‑Hot 可降低维度。
Frequency 编码
使用每个类别的出现次数作为其数值(例如 cat → 10,dog → 5,fish → 2)。
文本向量化
将单词或句子转换为向量。
- Bag‑of‑Words / TF‑IDF – 基于词频或加权频率的稀疏向量。
- Embedding – 从大语料库学习的密集、低维向量(例如 Word2Vec、GloVe、BERT)。
示例:king - man + woman ≈ queen.
操作向量化
对整个数组一次性应用数学运算(例如 NumPy、TensorFlow、PyTorch)。这是高效神经网络计算的核心。
编码方法——One‑Hot、Label、Binary、Frequency 与 Embedding——各有优势和权衡。选择合适的方法取决于数据集规模、模型结构以及具体问题。