[NLP] One-Hot编码

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 优缺点

优点

  • 其一,解决了文本分类等领域中不好直接处理文本数据、离散数据的问题;
  • 其二,在一定程度上,起到了扩充特征的作用。

缺点

然而,独热编码方法可不忽视的缺点也赫然存在:

  • 其一,“词汇鸿沟”现象。

独热编码假设了词汇词汇之间相互独立,却忽略了大多数情况下,词汇与词汇之间是相互联系、相互影响的,这种脱离了上下文语义的数学表示必然存在着“词汇鸿沟”这一问题,必然为后续的数据挖掘应用埋下隐患。

  • 其二,维数灾难

随着语料集的扩张,词汇表必然跟着扩张,而跟着随词汇表扩张同样的独热编码的维数大小过长,一定会在进行后续的运算上带来巨大的计算压力,尤其是在基于神经网络的需要海量训练与运算的深度学习领域。

posted @ 2024-09-09 22:15  千千寰宇  阅读(416)  评论(0)    收藏  举报