AI之向量化
2025-04-22
(一)向量化基础
向量与矩阵
向量是一维数组,分为行向量(单行)和列向量(单列)。
矩阵是二维数组,由多行多列构成,可通过
reshape
方法改变形状,通过.T
属性转置(行变列 / 列变行)。
向量化定义:将词、文本等非结构化数据转换为多维空间中的向量(点),通过向量距离计算语义相似度(如欧氏距离)。
向量化作用
计算机仅识别数字,向量化是数据输入模型的必要预处理步骤。
向量可高效描述多维特征(如文本的语义、图像的像素),便于矩阵运算提升计算速度。
(二)文本向量化方法
独热编码(One-Hot Encoding)
原理:每个词映射为一个长向量,仅对应索引位置为 1,其余为 0。
优缺点
优点:唯一性强,无冲突。
缺点:维度爆炸(词汇量越大,向量越长),无法体现语义关系。
词袋模型(Bag of Words, BOW)
原理:忽略词序和语法,统计词在文本中的出现频率,构建词汇表,每个文本表示为词汇表的频率向量。
优缺点
优点:维度可控,优于独热编码。
缺点:不考虑词序和语义,仅统计频率。
(三)代码实操
1. 环境准备
# 安装依赖库
pip install numpy jieba scikit-learn
2. 向量与矩阵操作(numpy)
import numpy as np
# 生成2行3列的随机整数数组(0-10)
random_matrix = np.random.randint(0, 11, size=(2, 3))
print("随机矩阵(2x3):")
print(random_matrix)
# 一维数组转二维(示例:1-7转2行3列,最后一个元素7被忽略,确保总元素数匹配)
one_dim = np.arange(1, 7) # 生成[1,2,3,4,5,6]
two_dim = one_dim.reshape(2, 3)
print("\n一维转二维(2x3):")
print(two_dim)
# 矩阵转置(行变列)
transposed_matrix = two_dim.T
print("\n转置矩阵(3x2):")
print(transposed_matrix)
3. 文本向量化(BOW,使用 scikit-learn)
from sklearn.feature_extraction.text import CountVectorizer
import jieba
# 自定义分词函数(处理中文)
def chinese_tokenizer(text):
return list(jieba.cut(text)) # 使用jieba分词,返回词语列表
# 示例文本(包含2个句子)
texts = [
"苹果和梨子都是很常见的水果,我喜欢吃芒果和百香果。",
"苹果今年推出新的手机,华为新手机拍照功能很强。"
]
# 初始化CountVectorizer,指定分词器
vectorizer = CountVectorizer(tokenizer=chinese_tokenizer)
# 拟合数据并生成特征矩阵
feature_matrix = vectorizer.fit_transform(texts)
# 获取词汇表(词到索引的映射)
vocabulary = vectorizer.vocabulary_
print("\n词汇表(词:索引):")
for word, idx in vocabulary.items():
print(f"{word}: {idx}")
print("\n特征矩阵(BOW向量):")
print(feature_matrix.toarray()) # 转换为数组,每行对应一个文本的向量
(四)注意事项
分词工具
中文分词推荐
jieba
,需自定义分词函数;英文可直接使用空格分词。新词需手动添加到分词器词典(如
jieba.add_word("大模型")
),避免分词错误。
模型选择
CountVectorizer
是基础 BOW 工具,适合入门;实际项目中可使用预训练词向量(如 Word2Vec、BERT)提升语义表示能力。