1 One Hot 编码
1.1 定义
One-Hot
编码,又称独热编码。从方法性质上讲,它是一种向量表示方法,属于自然语言处理领域中的词袋模型。
独热编码方法使用
N
位状态寄存器对N个状态进行编码,每个状态都有独立的寄存位;并且在任意时候,N为状态寄存器中都仅有一位有效状态,该位的状态值则表征了一枚特征数据。
- 由于一条1xN维的特征向量中的仅一位是有效位1,其它为无效位0的这种特质,决定了通过
One-Hot
编码得到的特征向量一定是离散、稀疏的一维向量。
1.2 案例
举例阐述
- 以2019年5月31日的一则报道的新闻内容中的两条句子 “方大特钢公司二号高炉煤气管道发生燃爆事故”,“事故中,一名员工死亡,九名员工受伤”作为一份语料库,经过分词后,得到词汇表
vocabulary
:
vocabulary
=[ “方大特钢”,”公司”,”二号”,”高炉”,”煤气”,”管道”,”发生”,”燃爆”,”事故”, ”中”,”一”,”名”,”员工”,”死亡”,”九”,”受伤” ]
可见词汇表表长为16。
- 在词汇表基础上进行
one-hot
编码,得到如下结果:
词汇及对应的One-Hot编码 | 词汇及对应的One-Hot编码 |
---|---|
“方大特钢” = [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] | “公司”=[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0] |
“二号”= [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0] | “高炉”= [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0] |
“煤气”= [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0] | “管道”=[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0] |
“发生”= [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0] | “燃爆”= [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0] |
“事故”= [0,0,0,0,0,0,0,0,1,0,0,0,0,0] | “中”= [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0] |
“一”=[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0] | “名”=[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] |
“员工”=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0] | “死亡”=[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0] |
“九”=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1] | “受伤”=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1] |
那么,原新闻的两段文本可以分别向量表示为:
- [1,1,1,1,1,1,1,1,1,0,0,0,0,0,0]
- [0,0,0,0,0,0,0,0,1,1,1,1,1]
- 若词汇表足够大,则: 每句话、每段文本内容都可以用one-hot的词汇编码进行句子向量表示。
1.2 优缺点
优点
- 其一,解决了文本分类等领域中不好直接处理文本数据、离散数据的问题;
- 其二,在一定程度上,起到了扩充特征的作用。
缺点
然而,独热编码方法可不忽视的缺点也赫然存在:
- 其一,“词汇鸿沟”现象。
独热编码假设了词汇与词汇之间相互独立,却忽略了大多数情况下,词汇与词汇之间是相互联系、相互影响的,这种脱离了上下文语义的数学表示必然存在着“词汇鸿沟”这一问题,必然为后续的数据挖掘应用埋下隐患。
- 其二,维数灾难。
标签:NLP,词汇,独热,编码,词汇表,燃爆,Hot From: https://www.cnblogs.com/johnnyzen/p/18405391随着语料集的扩张,词汇表必然跟着扩张,而跟着随词汇表扩张同样的独热编码的维数大小过长,一定会在进行后续的运算上带来巨大的计算压力,尤其是在基于神经网络的需要海量训练与运算的深度学习领域。