前因:
阅读《KGDDevReport2018知识图谱》的时候,在知识表示学习部分有这样一句话“知识库的三元组表示实际就是基于独热表示的。”
什么是独热?独自发热?独热热不如众热热?
我按耐住疯狂的想法,询问某位高姓学姐得知:独热——one-hot
参考链接:
https://blog.csdn.net/lusic01/article/details/84345464
https://baike.baidu.com/item/%E7%8B%AC%E7%83%AD%E7%A0%81/1428731?fr=aladdin
独热码与独热编码
-
首先要区分码制和数制:
码制:表示方法、编码方法,任何人为赋予的含义,可逻辑可非逻辑,无大小,无位权。
数制:计数方法,有大小,有位权,常见的数制有:二进制、十进制、十六进制等。
独热码(One-Hot Code),是说有多少状态就有多少比特,而且只有一个比特为1,其它全为0的一种码制。
那么可以举例:
2位独热码有2个
- 01/10
3位独热码有3个
- 001/010/100
...
n位独热码有n个
- 00...01/00...10/.../10...00
独热编码(One-Hot Eoding)是比较常用的文本特征提取的方法。通常需要处理的数值是稀疏散乱分布在空间中的,我们并不需要存储这些大数值,可以使用独热编码。
独热编码就是用n位状态寄存器编码n个状态,每个状态都用独立的寄存器位,且这些寄存器中只用一位有效。
那么可以举例:
有4个样本,每个样本s有三个特征f,特征用十进制编码如下:
__ |f1 |f2 |f3
s1 |1 |1 |1
s2 |2 |2 |1
s3 |2 |3 |2
s4 |1 |4 |3
对每种特征每个样本进行遍历,可得每个特征有几种取值,有几种取值就对应有几种状态,进行独热编码得到下面的形式:
__ |f1 |f2 |f3
s1 |01 |0001 |001
s2 |10 |0010 |001
s3 |10 |0100 |010
s4 |01 |1000 |100
那么可以得到四个样本的特征向量表示:
s1->[0,1,0,0,0,1,0,0,1]
s2->[1,0,0,0,1,0,0,0,1]
s3->[1,0,0,1,0,0,0,1,0]
s4->[0,1,1,0,0,0,1,0,0]
独热编码应用与词袋模型
-
One-Hot在特征提取上属于词袋模型(Bag of Words)。
- 词袋模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。
One-Hot应用举例:
假设语料库有三句话:
- 我爱中国
- 妈妈爱我
- 妈妈爱中国
首先将语料库每句话分成单词,编号为:
1.我 2.爱 3.中国 4.妈妈
然后使用One-Hot对每句话提取特征向量,按照上面的顺序有:
- [1,1,1,0]
- [1,1,0,1]
- [0,1,1,1]
-
One-Hot优点是:
解决了分类器处理离散数据困难的问题
一定程度上起到了扩展特征的作用
-
One-Hot缺点是:
One-Hot是一个词袋模型,不考虑词与词之间的顺序问题,而在文本中,词的顺序是一个很重要的问题。
One-Hot是基于词与词之间相互独立的情况下的,然而在多数情况中,词与词之间应该是相互影响的。
One-hot得到的特征是离散的,稀疏的。
独热编码与知识库
回到文章前因“知识库的三元组表示实际就是基于独热表示的。”
知识库进行知识表示可以形式化为三元组,三元组可以理解为 (实体entity,实体关系relation,实体entity), 独热表示是一种传统的知识表示方案。
后果:
独热是一种n状态编码方式,在特征提取上属于词袋模型,在知识表示学习上,独热表示是一种传统的知识表示方案。