深度学习算法原理——Attention-Based BiLSTM

深度学习算法原理——Attention-Based BiLSTM

1. 概述

随着神经网络,尤其是深度学习算法的发展,神经网络在文本分类任务中取得了很大的发展,提出了各种解决方案,如CNN在文本分类中的应用,RNN,LSTM等等,相比较于CNN以及RNN方法,LSTM可以学习长距离的语义信息。Attention-Based BiLSTM结合双向的LSTM(Bidirectional LSTM)以及Attention机制处理文本分类的相关问题,通过attention机制,该方法可以聚焦到最重要的词,从而捕获到句子中最重要的语义信息。

2. 算法思想

2.1 算法的组成部分

Attention-Based BiLSTM算法的网络结构如下所示:

www.zeeklog.com  - 深度学习算法原理——Attention-Based BiLSTM


在Attention-Based BiLSTM网络中,主要由5个部分组成:

  • 输入层(Input layer):指的是输入的句子,对于中文,指的是对句子分好的词;
  • Embedding层:将句子中的每一个词映射成固定长度的向量;
  • LSTM层:利用双向的LSTM对embedding向量计算,实际上是双向LSTM通过对词向量的计算,从而得到更高级别的句子的向量;
  • Attention层:对双向LSTM的结果使用Attention加权;
  • 输出层(Output layer):输出层,输出具体的结果。

注意点

  • Embedding通常有两种处理方法,一个是静态embedding,即通过事先训练好的词向量,另一种是动态embedding,即伴随着网络一起训练;
  • 双向LSTM的网络结构会在其他的文章中做进一步的介绍,这里就不详细展开。

2.2. BiLSTM层的输出

假设句子通过分词算法后,得到的 T T T个词为: { x 1 , x 2 , ⋯ , x T } \left \{ x_1,x_2,\cdots ,x_T \right \} {x1​,x2​,⋯,xT​},每一个词 x i x_i xi​经过词向量的映射得到对应的词向量 e i e_i ei​,假设经过LSTM后正向的输出为 → h i \underset{h_i}{\rightarrow} hi​→​,逆向的输出为 ← h i \underset{h_i}{\leftarrow} hi​←​,则第 i i i个词经过BiLSTM后得到的向量为:

h i = [ → h i ⨁ ← h i ] h_i=\left [ \underset{h_i}{\rightarrow}\bigoplus \underset{h_i}{\leftarrow} \right ] hi​=[hi​→​⨁hi​←​]

其中, ⨁ \bigoplus ⨁表示的是对应元素相加。

2.3. Attention机制

假设 H H H是所有 T T T个词经过BiLSTM后得到的向量的集合: [ h 1 , h 2 , ⋯ h T ] \left [ h_1,h_2,\cdots h_T \right ] [h1​,h2​,⋯hT​],那么Attention的计算方法如下:
 M = t a n h ( H ) M=tanh\left ( H \right ) M=tanh(H)
其中, H ∈ R d w × T H\in \mathbb{R}^{d^w\times T} H∈Rdw×T, d w d^w dw表示的是向量的维度,对应的, M M M的维度为: d w × T d^w\times T dw×T。
 α = s o f t m a x ( w T M ) \alpha =softmax\left ( w^TM \right ) α=softmax(wTM)
其中, w T w^T wT表示的是需要学习的参数, w w w的维度为 d w × 1 d^w\times 1 dw×1, α \alpha α的维度为 1 × T 1\times T 1×T。
 r = H α T r=H\alpha ^T r=HαT
其中, r r r的维度为 d w × 1 d^w\times 1 dw×1。
最终用于分类的向量表示为: h ∗ = t a n h ( r ) h^{\ast }=tanh\left ( r \right ) h∗=tanh(r)。

2.4. 分类

针对句子 S S S,通过上述的BiLSTM以及Attention机制,得到了对应的表示矩阵: h ∗ h^{\ast } h∗,其维度为 d w × 1 d^w\times 1 dw×1。分类器以 h ∗ h^{\ast } h∗为输入:

p ^ ( y ∣ S ) = s o f t m a x ( W ( S ) h ∗ + b ( S ) ) \hat{p}\left ( y\mid S \right )=softmax\left ( W^{\left ( S \right )}h^{\ast }+b^{\left ( S \right )} \right ) p^​(y∣S)=softmax(W(S)h∗+b(S))

参考文献

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk