雙向長短期記憶網絡-BiLSTM

5月14日復盤

二、BiLSTM

1. 概述

雙向長短期記憶網絡(Bi-directional Long Short-Term Memory,BiLSTM)是一種擴展自長短期記憶網絡(LSTM)的結構,旨在解決傳統 LSTM 模型只能考慮到過去信息的問題。BiLSTM 在每個時間步同時考慮了過去和未來的信息,從而更好地捕捉了序列數據中的雙向上下文關系。

BiLSTM 的創新點在于引入了兩個獨立的 LSTM 層,一個按正向順序處理輸入序列,另一個按逆向順序處理輸入序列。這樣,每個時間步的輸出就包含了當前時間步之前和之后的信息,進而使得模型能夠更好地理解序列數據中的語義和上下文關系。

  • 正向傳遞: 輸入序列按照時間順序被輸入到第一個LSTM層。每個時間步的輸出都會被計算并保留下來。

  • 反向傳遞: 輸入序列按照時間的逆序(即先輸入最后一個元素)被輸入到第二個LSTM層。與正向傳遞類似,每個時間步的輸出都會被計算并保留下來。

  • 合并輸出: 在每個時間步,將兩個LSTM層的輸出通過某種方式合并(如拼接或加和)以得到最終的輸出。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. BILSTM模型應用背景

命名體識別

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

標注集

BMES標注集

分詞的標注集并非只有一種,舉例中文分詞的情況,漢子作為詞語開始Begin,結束End,中間Middle,單字Single,這四種情況就可以囊括所有的分詞情況。于是就有了BMES標注集,這樣的標注集在命名實體識別任務中也非常常見。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

詞性標注

在序列標注問題中單詞序列就是x,詞性序列就是y,當前詞詞性的判定需要綜合考慮前后單詞的詞性。而標注集最著名的就是863標注集和北大標注集。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

3. 代碼實現

原生代碼

import numpy as npdef sigmoid(x):return 1 / (1 + np.exp(-x))def tanh(x):return np.tanh(x)class GRU:def __init__(self, input_size, hidden_size, output_size):self.input_size = input_sizeself.hidden_size = hidden_sizeself.output_size = output_size#權重矩陣和偏置self.W_z = np.random.randn(hidden_size + input_size, hidden_size)self.b_z = np.zeros((hidden_size,))self.W_r = np.random.randn(hidden_size + input_size, hidden_size)self.b_r = np.zeros((hidden_size,))# ht候選self.W = np.random.randn(hidden_size + input_size, hidden_size)self.b = np.zeros((hidden_size,))def forward(self, x, h_last):""":param x: [s,dim]:param h_last::return:"""# 初始化狀態h_prev = np.zeros((self.hidden_size,))h_all = []for i in range(x.shape[0]):x_t = x[i]x_t_h_prev = np.concatenate((x_t, h_prev), axis=0)r_t = sigmoid(np.dot(x_t_h_prev, self.W_r) + self.b_r)z_t = sigmoid(np.dot(x_t_h_prev, self.W_z) + self.b_z)# h_prev = r_t * h_prevh_t_input = np.concatenate((x_t, h_prev * r_t), axis=0)h_t_candidate = tanh(np.dot(h_t_input, self.W) + self.b)h_t = (1 - z_t) * h_prev + z_t * h_t_candidateh_all.append(h_t)return h_allif __name__ == '__main__':gru = GRU(input_size=2, hidden_size=5, output_size=1)x = np.random.randn(3 , 2)h_last = np.zeros((3,))h_all = gru.forward(x, h_last)print(h_all)
# ---------------------------------------------------------------------------
import numpy as np# 創建一個包含兩個二維數組的列表
inputs = [np.array([[0.1], [0.2], [0.3]]), np.array([[0.4], [0.5], [0.6]])]# 使用 numpy 庫中的 np.stack 函數。這會將輸入的二維數組堆疊在一起,從而形成一個新的三維數組
inputs_3d = np.stack(inputs)# 將三維數組轉換為列表
list_from_3d_array = inputs_3d.tolist()print(list_from_3d_array)

Pytorch

import torch
import torch.nn as nn# 模型參數設置
batch_size = 10
sen_len = 6
hidden_size = 8input_size = 3
output_size = hidden_size * 2  # 類別是隱藏層大小的兩倍# 初始化隱藏層狀態
h_prev = torch.zeros(1, batch_size, hidden_size)# RNN調用
model = nn.GRU(input_size, hidden_size, batch_first=True)
fc = nn.Linear(hidden_size, output_size)  # 全連接層用于分類# 初始化數據
x = torch.randn(10, 6, 3)out, h_next = model(x, h_prev)
# 對每個時間步的輸出進行分類
out = out.contiguous().view(-1, hidden_size)  # 調整形狀為 (batch_size * sen_len, hidden_size)
out = fc(out)
out = out.view(batch_size, sen_len, output_size)  # 調整回 (batch_size, sen_len, output_size)print("多對多輸出:")
print(out.shape)
print(out)
print(h_next.shape)
print(h_next)out, h_next = model(x, h_prev)
# 只對最后一個時間步的輸出進行分類
final_out = h_next.squeeze(0)  # 移除多余的維度,得到 (batch_size, hidden_size)
final_out = fc(final_out)print("\n多對一輸出:")
print(final_out.shape)
print(final_out)
print(h_next.shape)
print(h_next)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81167.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年Flutter項目管理技能要求

在2025年,隨著Flutter技術的廣泛應用和項目復雜度的提升,項目管理的重要性愈發凸顯。Flutter項目管理不僅需要技術能力,還需要良好的溝通、協調、規劃和執行能力。本文將詳細探討2025年Flutter項目管理應具備的技能要求,幫助項目管…

OpenCV CUDA模塊中逐元素操作------數學函數

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 在OpenCV的CUDA模塊中,確實存在一系列用于執行逐元素數學運算的函數,包括指數、對數、平方根等。這些函數對于高級圖像處…

PhpStudy | PhpStudy 工具安裝 —— Kali Linux 系統安裝 PhpStudy

🌟想了解這個工具的其它相關筆記?看看這個:[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 筆者備注:演示雖然是 Kali Linux,但其實 Linux 系列都可以參考此流程完成安裝。 在前面的章節中,筆者簡…

第6講、全面拆解Encoder、Decoder內部模塊

全面拆解 Transformer 架構:Encoder、Decoder 內部模塊解析(附流程圖小測驗) 關鍵詞:Transformer、Encoder、Decoder、Self-Attention、Masked Attention、位置編碼、殘差連接、多頭注意力機制 Transformer 自 2017 年誕生以來&am…

游戲引擎學習第283天:“讓‘Standing-on’成為一個更嚴謹的概念

如果同時使用多個OpenGL上下文,并且它們都有工作負載,GPU或GPU驅動程序如何決定調度這些工作?我注意到Windows似乎優先處理活動窗口的OpenGL上下文(即活動窗口表現更好),挺有意思的…… 當多個OpenGL上下文…

深度學習讓魚與熊掌兼得

通常,一個大的復雜的模型的loss會低,但是擬合方面不夠,小的模型在擬合方面更好,但是loss高,我們可以通過深度學習來得到一個有著低loss的小模型 我們之前學過,peacewise linear可以用常數加上一堆這個階梯型函數得到,然后因為peacewise linear可以逼近任何function,所以理論上…

如何在 AWS 上構建支持 AVIF 的前端圖片優化方案

一、為什么使用 AVIF 圖片格式? 優勢點 說明 高壓縮率 在相似質量下,AVIF 文件比 JPEG/PNG/WebP 更小,能有效節省帶寬和存儲空間。 更高畫質 即使在低碼率下也能保持清晰細節,減少壓縮帶來的馬賽克或模糊問題。 支持透明度 …

C++中的std::allocator

C中的std::allocator 文章目錄 C中的std::allocator1.std::allocator1.1C中的placement new 和operator new1.2一個custom allocator的實現1.3使用std::allocator_traits實現allocator 1.std::allocator C中的std::allocator默默工作在CSTL中的所有容器的內存分配上&#xff0…

CodeBuddy編程新范式

不會寫?不想寫? 騰訊推出的CodeBuddy徹底解放雙手。 示例 以下是我對CodeBuddy的一個小體驗。 我只用一行文字對CodeBuddy說明了一下我的需求,剩下的全部就交給了CodeBuddy,我需要做的就是驗收結果即可。 1.首先CodeBuddy會對任…

QML學習01(設置寬度、高度、坐標點、標題,信號與槽,鍵盤事件)

QML學習 1、前言2、QML3、QML和QWidget的區別3、QtQuick下的Windows應用4、總結 1、前言 記錄一下QML學習的過程,方便自己日后回顧,也可以給有需要的人提供幫助。 2、QML QML是 Qt 框架中的一種聲明式編程語言,專門用于快速設計和開發用戶…

在VSCode中接入DeepSeek的指南

本文將介紹三種主流接入方式,涵蓋本地模型調用和云端API接入方案。 一、環境準備 1.1 基礎要求 VSCode 1.80+Node.js 16.x+Python 3.8+(本地部署場景)已部署的DeepSeek服務(本地或云端)1.2 安裝必備插件 # 打開VSCode插件面板(Ctrl+Shift+X) 搜索并安裝: - DeepSeek Of…

機器學習-計量經濟學

機器學習 不要事前決定變量關系,關鍵是誰也不知道啊,機器學習學習的模型(那也不是真實的關系啊) 這就是自然學科的好處:只要不斷的優化這個未知的東西(函數),然后在數據上&#xff…

五、Linux賬號與權限管理

1、管理用戶和組賬號 1.1、用戶 1.1.1、用戶的概念及作用 在Linux系統中,用戶(User)指的是可以訪問系統資源的個體實體。每個用戶都有一個唯一的用戶賬號,用于標識和管理其在系統中的活動和訪問權限。 用戶的重要性和功能: 身份認證和訪問控制: 用戶賬號用于身份認證,確…

精益數據分析(61/126):移情階段評分體系構建與實戰案例解析

精益數據分析(61/126):移情階段評分體系構建與實戰案例解析 在創業的移情階段,如何科學評估用戶需求的真實性與緊迫性,是決定后續產品方向的關鍵。今天,我們結合《精益數據分析》中的評分框架,…

完成反射宇宙的最后一塊拼圖:泛型集合

反射,c#的黑科技,一手打造漂亮的,專屬于自己的屬性框 之前分享的: 如何寫一個自定義屬性控件的功能,但是只是對基礎的類型,比如String,bool,int等,但是對list<T>,Vector<T>這種泛型集合類型支持的不是很好,剛好最近重新研究了一下,將這個非常重要的功能完成了. 效…

Redis--基礎知識點--26--過期刪除策略 與 淘汰策略

Redis 的過期策略和淘汰策略是內存管理的核心機制&#xff0c;分別用于處理鍵的自動失效和內存不足時的數據清理。以下是詳細說明&#xff1a; 1 、過期刪除策略&#xff08;Expiration Policy&#xff09; 處理已設置過期時間&#xff08;EXPIRE&#xff09;的鍵&#xff0c;…

第六天——貪心算法——字符串分隔

1. 題目 給定一個字符串 s&#xff0c;我們需要將其劃分為盡可能多的部分&#xff0c;使得同一字母最多出現在一個部分中。 例如&#xff1a;字符串 "ababcc" 可以劃分為 ["abab", "cc"]&#xff0c;但要避免 ["aba", "bcc&quo…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 注意“回車換行“的跨平臺使用.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

Maven 插件參數注入與Mojo開發詳解

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

擴增子分析|R分析之微生物生態網絡穩定性評估之節點和連接的恒常性、節點持久性以及組成穩定性指數計算

一、引言 周集中老師團隊于2021年在Nature climate change發表的文章&#xff0c;闡述了網絡穩定性評估的原理算法&#xff0c;并提供了完整的代碼。自此對微生物生態網絡的評估具有更全面的指標&#xff0c;自此網絡穩定性的評估廣受大家歡迎。本文將介紹網絡穩定性之節點和連…