1. 背景知识
1.1 自然语言处理
1.1.1 文本向量化
文本向量化(又称“词向量模型”、“向量空间模型”)即将文本表示成计算机可识别的实数向量,根据粒度大小不同可将文本特征表示分为字、词、句子或篇章几个层次。文本向量化的方法主要分为离散表示和分布式表示。
1.1.1.1 离散表示
一种基于规则和统计的向量化方式,常用的方法包括词集模型和词袋模型,都是基于词之间保持独立性、没有关联为前提,将所有文本中单词形成一个字典,然后根据字典来统计单词出现频数,不同的是:
- 词集模型:例如One-Hot Representation,只要单个文本中单词出现在字典中,就将其置为1,不管出现多少次
- 词袋模型:只要单个文本中单词出现在字典中,就将其向量值加1,出现多少次就加多少次。
其基本的特点是忽略了文本信息中的语序信息和语境信息,仅将其反映为若干维度的独立概念,这种情况有着因为模型本身原因而无法解决的问题,比如主语和宾语的顺序问题,词袋模型天然无法理解诸如“我为你鼓掌”和“你为我鼓掌”两个语句之间的区别。
One-Hot Representation
将每个词都表示成一个长向量,向量的维度是词表的大小,词的当前位置用1表示,其他位置用0表示。
import numpy as np
import pandas as pd
import jieba
def doc2onthot_matrix(file_path):
# 读取待编码的文件
with open(file_path, encoding="utf-8") as f:
docs = f.readlines()
with open(file_path1, encoding="utf-8") as f:
docs1 = f.readlines()
# 将文件每行分词,分词后的词语放入words中
words=[]
for i in range(len(docs)):
docs[i] = jieba.cut(docs[i].strip("\n"))
words += docs[i]
# 找出分词后不重复的词语,作为词袋,是后续onehot编码的维度
vocab = sorted(set(words), key=words.index)
# 建立一个M行V列的全0矩阵,M是文档样本数,这里是行数,V为不重复词语数,即编码维度
V = len(vocab)
M = len(docs)
onehot = np.zeros((M,V))
for i,doc in enumerate(docs1):
words = ""
for word in doc:
if word != " ":
words = words + word
continue
if words in vocab:
pos = vocab.index(words)
onehot[i][pos] = 1
words = ""
else:
words = ""
continue
onehot=pd.DataFrame(onehot, columns=vocab)
return onehot
file_path = "./test.txt"
file_path1 = "./word.txt"
onehot = doc2onthot_matrix(file_path)
onehot
One-Hot编码的优点是简单快捷,缺点是数据稀疏、耗时耗空间、不能很好地展示词与词之间的相似关系,且还未考虑到词出现的频率,因而无法区别词的重要性。
1.2 特征提取
特征提取(英语:Feature extraction)在机器学习、模式识别和图像处理中有很多的应用。特征提取是从一个初始测量的资料集合中开始做,然后建构出富含资讯性而且不冗余的导出值,称为特征值(feature)。它可以帮助接续的学习过程和归纳的步骤,在某些情况下可以让人更容易对资料做出较好的诠释。特征提取是一个降低维度的步骤,初始的资料集合被降到更容易管理的族群(特征)以便于学习,同时保持描述原始资料集的精准性与完整性。
当一个算法的输入资料太过于庞大冗余以至于不便处理(如:一样的测量方法但是分别使用英尺和米表示,或是影像中像素的重复性),这些资料可以被转换成化简后的特征集合,也称作特征向量(feature vector),决定这些原始资料子集的步骤称为特征提取 。成功的情形下,被选择的特征包含跟输入资料相关的资讯,因此这些被化简后的特征能够被用来做理想的任务,而不使用原始完整的初始资料来做这个任务。
1.2.1 概论
相较于原始庞大的资料集合需要很大量的资源来描述,特征提取可以减少需要描述这些资料的资源。当我们分析复杂资料时,其中一个主要的问题是源自于变数的数量过多。分析很多个变数一般来说需要很大量的内存以及计算能力,同时太多变数也可能造成分类问题的算法有过度拟合于训练资料的现象,因此对新的采样无法有效地归纳。特征提取是处理变数组合并维持资料充足的准确性时,常通称的术语。很多机器学习的实作者认为适当的特征提取是有效模型构建的关键。[3]
可以利用已经建构好的应用相关的特征集合来改善结果,通常这样的特征集合是被专家所建构。其中一种此类处理被叫做特征工程师。除此之外,我们也可以使用一般的降维技术,如下:
- 独立成分分析
- 等距特征映射
- 核主成分分析
- 潜在语义学
- 偏最小二乘回归
- 主成分分析
- 多因子降维法
- 非线性降维
- 多线性主成分分析
- 半定式嵌入
- 自编码器
1.2.2 图像处理
特征提取其中一个非常重要的应用领域为图像处理,其中的算法可以被用来侦测跟分离数位影像跟影片串流中,想要提取的部分或形状(特征)。常见的影像处理相关的特征处理如下:
低阶的特征
- 边缘检测
- 角检测
- 斑点检测
- 脊检测
- 尺度不变特征转换
曲率 - 边缘方向
- 改变强度
- 自相关
影像动作 - 移动侦测
- 微分方法
- 光流法
形状相关 - 二值化
- 连通分量标记
- 模板匹配
- 霍夫变换
- 广义霍夫变换
1.2.3 深度学习的特征提取
以往主成分分析为特征提取极常使用的降维方法,近来利用深度学习神经网络的自编码器则相当常被使用。他可以跟深度学习中的各种技术(例如:深度神经网络,卷积神经网络)结合。其中,卷积神经网络能十分有效的撷取影像中的特征,因此对于影像的资料降维撷取特征的效果特别杰出。此外,卷积神经网络在大型数据库中影像辨识相关的议题上(例如:物件分类)取得相当杰出的成果。因此也有人使用在大型数据库上预先训练好的卷积神经网络来做特征提取。