词汇表征方式——从one-hot到词嵌入
one-hot表征
1个单词对应向量中的1个位置,比如一个有1w个单词的词典中每个词需要由10000x1的向量表示,该单词对应的位置的元素为1,其余位置为0。
例如单词a在词典中的位置为1,则其表征向量为\([1\;0\;0\;0… 0]^T\)
one-hot的缺点:
- 任意两个词之间的乘积都为0,无法表示词汇间的关系,对相关词的泛化能力不强
- 维度太高,计算压力大
- 向量过于稀疏
1个单词对应向量中的1个位置,比如一个有1w个单词的词典中每个词需要由10000x1的向量表示,该单词对应的位置的元素为1,其余位置为0。
例如单词a在词典中的位置为1,则其表征向量为\([1\;0\;0\;0… 0]^T\)
one-hot的缺点:
Bag-of-Words(BOW),又叫词袋模型,用于文档特征表示。
BOW 忽略文本的语法和语序,用一组无序的单词来表示这段文本。即 BOW 不会保留单词在句子里的顺序/位置信息。
以递归的形式生成一个树 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#输入训练集D和属性集A
def TreeGenerate(D, A):
node = generate_node() #生成节点
if D.all() in types[C]: #如果D中所有节点都属于类别C
node.type = ('leaf', C) #将node标记为C类叶节点
if A.empty() or D.all().A.same(): #如果A为空集或者D中样本在A上取值相同
C = D.type.most() #类别C为D中样本数最多的类别
node.type = ('leaf', C) #将node标记为C类叶节点
a = best_divide(A) #从A中选择出最优划分属性a
for a_val in a: #遍历最优划分a的所有值
d = D.find(a.val = a_val) #找到D中所有属性a的值等于a_val的样本
if d.empty():
child = generate_node(father = node) #生成node的分支节点
C = D.type.most() #类别C为D中样本数最多的类别
child.type = ('leaf', C) #将child标记为C类叶节点
else:
child = TreeGenerate(d, A\a) #递归获得child
child.father = node #将child作为node的分支节点
return node
arxiv
Salesforce
2016.03
DMN 的结果并不好的情况:
arxiv
MetaMind
2015.06
最近在论文里看到 hits@1 matric 作为评价标准(《Key-Value Memory Networks for Directly Reading Documents》),于是查了查这是什么。
hits@n 就等同于 Top-n,也就是模型预测出来的概率最高的 n 个答案里有真实答案就算是预测正确了。