一 哈希的原理
字典: key 映射到 value
哈希: key 映射到 key的哈希值 映射到 value
例如查找《现代汉语字典》 拼音“an” 映射到页码55 映射到 安
二 自定义哈希函数
在NLP问题中,假设你想把一个字符串转换为一个数值型向量,可以使用one-hot-encoding也就是哈希函数的方法来产生词袋
input_string = "Python for data science" # 输入字符串
def hashing_trick(input_string):
result= [0] * len(input_string) #初始化结果序列,长度同输入序列
for word in input_string.split(" "):
index = abs(hash(word)) % len(input_string) # 自定义哈希函数
result[index] = 1
return result
print(hashing_trick(input_string))
# 输出结果 [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
可见输出的结果向量中的 1 ,代表了输入字符串的四个单词。
结果向量中的1的位置,与单词的哈希值有关。
三 对稀疏矩阵的处理
由第二步的输出结果可知 序列 [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ,绝大部分的值为零,
因此称该序列为 稀疏矩阵。
对稀疏矩阵的处理:
我们可以使用sklearn的csc_matrix方法,即一个基于行的压缩矩阵来进行处理。
a = [1,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
from scipy.sparse import csc_matrix
print(csc_matrix(a))
# 输出结果为
# (0, 0) 1 表示第零行,第零列 的元素为1。向量a可看作一个一行二十列的矩阵
# (0, 5) 1
# (0, 16) 1
# (0, 18) 1
# 可见处理后的结果与输入的稀疏矩阵一一对应
处理的结果是,将数据表示在坐标(以行和列索引的元素表示)的单元格值中。