作文自动评分-位置编码position-encoding(PE)解释

分享时@该用户已经被封, 我就能回答你的问题奥!

文章目录
  1. 1. position-encoding
    1. 1.1. 词袋模型
  2. 2. 参考文献


声明: 本文由DataScience原创发表, 转载请注明本文链接mlln.cn, 并在文后留言转载.

本文代码运行环境:

  • windows10
  • python3.6
  • jupyter notebook
  • tensorflow 1.x

position-encoding

这是用词向量计算句子向量的一种算法, 在End-to-end Memory Network这篇论文中被提出来。在这篇论文中比较了另一种计算句子向量的模型–词袋模型, 下面我们分别来说一下这两种方法。

词袋模型

假设我们用$x_{ij}$表示第i个句子的第j个词, 一个句子的所有词可以表示为$x_i = \{x_{i1},x_{i2},...,x_{ij} \}$,嵌入每个单词并对得到的向量求和:
$$ m_i = \sum x_{ij} $$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
def position_encoding(sentence_size, embedding_size):
"""
Position Encoding
"""
# sentence_size = J
# embedding_size = d
# i = k
# j = j
J = sentence_size
d = embedding_size
encoding = np.ones((embedding_size, sentence_size), dtype=np.float32)
ls = sentence_size+1
le = embedding_size+1
for k in range(1, le):
for j in range(1, ls):
encoding[k-1, j-1] = (2*k/d-1)*(2*j/J - 1)
encoding += 1
return np.transpose(encoding)/2

或者我在其他论文里见过别人这样做, 但是我还没搞清楚原因, 如果你知道, 请留言告诉我。

1
2
3
4
5
6
7
8
9
10
11
12
13

def position_encoding(sentence_size, embedding_size):
"""
Position Encoding described in section 4.1 [1]
"""
encoding = np.ones((embedding_size, sentence_size), dtype=np.float32)
ls = sentence_size+1
le = embedding_size+1
for i in range(1, le):
for j in range(1, ls):
encoding[i-1, j-1] = (i - (le-1)/2) * (j - (ls-1)/2)
encoding = 1 + 4 * encoding / embedding_size / sentence_size
return np.transpose(encoding)

参考文献

Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, and Rob Fergus. 2015. End-To-End Memory Networks. In Advances in Neural Information Processing Systems 28, C Cortes, N D Lawrence, D D Lee, M Sugiyama, and R Garnett (Eds.). Curran Associates, Inc., 2440–2448.

注意
本文由jupyter notebook转换而来, 您可以在这里下载notebook解释.ipynb)
有问题可以直接在下方留言
或者给我发邮件675495787[at]qq.com
请记住我的网址: mlln.cn 或者 jupyter.cn