小白的進階之路系列之十八----人工智能從初步到精通pytorch綜合運用的講解第十一部分

從零開始的NLP:使用序列到序列網絡和注意力機制進行翻譯

我們將編寫自己的類和函數來預處理數據以完成我們的 NLP 建模任務。

在這個項目中,我們將訓練一個神經網絡將法語翻譯成英語。

[KEY: > input, = target, < output]> il est en train de peindre un tableau .
= he is painting a picture .
< he is painting a picture .> pourquoi ne pas essayer ce vin delicieux ?
= why not try that delicious wine ?
< why not try that delicious wine ?> elle n est pas poete mais romanciere .
= she is not a poet but a novelist .
< she not not a poet but a novelist .> vous etes trop maigre .
= you re too skinny .
< you re all alone .

… 取得不同程度的成功。

這得益于簡單而強大的序列到序列網絡思想,其中兩個循環神經網絡協同工作以將一個序列轉換為另一個序列。編碼器網絡將輸入序列壓縮成一個向量,解碼器網絡將該向量展開成一個新的序列。

在這里插入圖片描述

為了改進這個模型,我們將使用一個注意力機制,它允許解碼器學習集中關注輸入序列的特定范圍。

你還會發現之前的從零開始的 NLP:使用字符級 RNN 分類名稱 和 從零開始的 NLP:使用字符級 RNN 生成名稱 教程非常有用,因為這些概念分別與編碼器和解碼器模型非常相似。

要求

from __future__ import unicode_literals, print_function, division
from io import open
import unicodedata
import re
import randomimport torch
import torch.nn as nn
from torch import optim
import torch.nn.functional as Fimport numpy as np
from torch.utils.data import TensorDataset, DataLoader, RandomSamplerdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")

加載數據文件

本項目的數據集包含數千對英法翻譯對。

Open Data Stack Exchange 上的這個問題 指引我找到了開放翻譯網站 https://tatoeba.org/,該網站在 https://tatoeba.org/eng/downloads 提供下載——更妙的是,有人做了額外的工作,將語言對分成獨立的文本文件,在此處提供:https://www.manythings.org/anki/

英法翻譯對文件太大,無法包含在倉庫中,請在繼續之前下載到 data/eng-fra.txt。該文件是以制表符分隔的翻譯對列表

I am cold.    J'ai froid.

注意

從這里下載數據并將其解壓到當前目錄。

與字符級 RNN 教程中使用的字符編碼類似,我們將語言中的每個詞表示為一個獨熱向量,或者一個巨大的零向量,除了一個位置為一(該詞的索引)。與語言中可能存在的幾十個字符相比,詞的數量要多得多,因此編碼向量更大。然而,我們將稍微做一些妥協,僅使用每種語言的幾千個詞來修剪數據。

在這里插入圖片描述

我們稍后需要為每個詞設置一個唯一的索引,用作網絡的輸入和目標。為了跟蹤所有這些,我們將使用一個名為 Lang 的輔助類,它包含 word → index (word2index) 和 index → word (index2word) 字典,以及每個詞的計數 word2count,這將用于稍后替換罕見詞。

SOS_token = 0
EOS_token = 1class Lang:def __init__(self, name):self.name = nameself.word2index = {}self.word2count = {}self.index2word = {0: "SOS", 1: "EOS"}self.n_words = 2  # Count SOS and EOSdef addSentence(self, sentence):for word in sentence.split(' '):self.addWord(word)def addWord(self, word):if word not in self.word2index:self.word2index[word] = self.n_wordsself.word2count[word] = 1self.index2word[self.n_words] = wordself.n_words += 1else:self.word2count[word] += 1

所有文件都是 Unicode 格式,為了簡化,我們將 Unicode 字符轉換為 ASCII,全部轉換為小寫,并去除大部分標點符號。

# Turn a Unicode string to plain ASCII, thanks to
# https://stackoverflow.com/a/518232/2809427
def unicodeToAscii(s):return ''.join(c for c in unicodedata.normalize('NFD', s)if unicodedata.category(c) != 'Mn')# Lowercase, trim, and remove non-letter characters
def normalizeString(s):s = unicodeToAscii(s.lower().strip())s = re.sub(r"([.!?])", r" \1", s)s = re.sub(r"[^a-zA-Z!?]+", r" ", s)return s.strip()

為了讀取數據文件,我們將文件按行分割,然后將行分割成對。文件都是英語 → 其他語言,因此如果我們要從其他語言 → 英語翻譯,我添加了 reverse 標志來反轉翻譯對。

def readLangs(lang1, lang2, reverse=False):print("Reading lines...")# Read the file and split into lineslines = open('data/%s-%s.txt' % (lang1, lang2), encoding='utf-8').\read().strip().split('\n')# Split every line into pairs and normalizepairs = [[normalizeString(s) for s in l.split('\t')] for l in lines]# Reverse pairs, make Lang instancesif reverse:pairs = [list(reversed(p)) for p in pairs]input_lang = Lang(lang2)output_lang = Lang(lang1)else:input_lang = Lang(lang1)output_lang = Lang(lang2)re

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

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

相關文章

SSL安全證書:數字時代的網絡安全基石

SSL安全證書&#xff1a;數字時代的網絡安全基石 在當今數字化浪潮中&#xff0c;網絡通信安全已成為個人、企業和組織不可忽視的核心議題。SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接層&#xff09;安全證書作為保障數據傳輸安全的關鍵技術&#xff0c;通過加…

LLM-201: OpenHands與LLM交互鏈路分析

一、核心交互鏈路架構 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…

【項目】仿muduo庫one thread one loop式并發服務器SERVER模塊(下)

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 |&#x1f5c3;? mysql 項目文章&#xff1a; 仿muduo庫one thread one loop式并發服務器…

數據庫索引結構 B 樹、B + 樹與哈希索引在不同數據查詢場景下的適用性分析

一、數據庫索引結構B樹 樹概述 樹是一種多路平衡查找樹&#xff0c;廣泛應用于數據庫和文件系統中。B樹的節點可以存儲多個數據元素&#xff0c;并且保持樹的平衡&#xff0c;以提高查詢效率。 適用性分析 在數據量較大&#xff0c;范圍查找較多的場景下&#xff0c;B樹的查詢效…

Linux進程間通信——信號

1.信號的介紹 信號( Signal )是 Unix, 類Unix以及其他POSIX兼容的操作系統中進程間通信的一種有限制的手段。 1&#xff09;信號是在軟件層面上對中斷機制的一種模擬&#xff0c;是一種異步通信方式。2&#xff09;信號可以直接進行用戶空間進程和內核進程之間的交互&#xff…

Bytemd@Bytemd/react詳解(編輯器實現基礎AST、插件、跨框架)

ByteMD Markdown編輯器詳細解釋&修改編輯器默認樣式&#xff08;高度300px) AST樹詳解 [ByteMD 插件系統詳解(https://blog.csdn.net/m0_55049655/article/details/148811248?spm1001.2014.3001.5501) Sevelet編寫的Bytemd如何適配到React中 ??1?? 背景概述 Byte…

《Redis》事務

文章目錄 Redis中的原子性Redis的事物和MySQL事務的區別Redis實現事務什么場景下&#xff0c;會使用事務? Redis事務相關命令watch命令的實現原理 總結 Redis中的原子性 Redis的原子性不同于MySQL的原子性。 Redis的事物和MySQL事務的區別 但是注意體會Redis的事務和MySQL…

Elasticsearch Kibana (一)

一、官方文檔 elasticsearch官網&#xff1a;elasticsearch官網 elasticsearch源碼&#xff1a;elasticsearch源碼 ik分詞器&#xff1a; ik分詞器 ik分詞器下載&#xff1a;ik分詞器下載 elasticsearch 版本選擇&#xff1a;elasticsearch 版本選擇 官方推薦Elasticsearch和j…

[linux] Ubuntu 24軟件下載和安裝匯總(自用)

經常重裝系統&#xff0c;備份下&#xff0c;有用的也可以參考。 安裝圖形界面 apt install ubuntu-desktop systemctl set-default graphical.target reboot 安裝chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt insta…

分布變化的模仿學習算法

與傳統監督學習不同,直接模仿學習在不同時刻所面臨的數據分布可能不同.試設計一個考慮不同時刻數據分布變化的模仿學習算法 import numpy as np import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset from…

arm-none-eabi-ld: cannot find -lm

arm-none-eabi-ld -Tuser/hc32l13x.lds -o grbl_hc32l13x.elf user/interrupts_hc32l13x.o user/system_hc32l13x.o user/main.o user/startup_hc32l13x.o -lm -Mapgrbl_hc32l13x.map arm-none-eabi-ld: cannot find -lm makefile:33: recipe for target link failed 改為在gcc…

【Python辦公】Excel文件批量樣式修改器

目錄 專欄導讀1. 背景介紹2. 項目概述3. 庫的安裝4. 核心架構設計① 類結構設計② 數據模型1) 文件管理2) 樣式配置5. 界面設計與實現① 布局結構② 動態組件生成6. 核心功能實現① 文件選擇與管理② 顏色選擇功能③ Excel文件處理核心邏輯完整代碼結尾專欄導讀 ?? 歡迎來到P…

QT的一些介紹

//雖然下面一行代碼進行widget和ui的窗口關聯&#xff0c;但是如果發生窗口大小變化的時候&#xff0c;里面的布局不會隨之變化ui->setupUi(this);//通過下面這行代碼進行顯示說明&#xff0c;讓窗口變化時&#xff0c;布局及其子控件隨之變化this->setLayout(ui->ver…

RISC-V向量擴展與GPU協處理:開源加速器設計新范式——對比NVDLA與香山架構的指令集融合方案

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠 當開源指令集遇上異構計算&#xff0c;RISC-V向量擴展&#xff08;RVV&#xff09;正重塑加速…

自動恢復網絡路由配置的安全腳本說明

背景 兩個文章 看了就明白 Ubuntu 多網卡路由配置筆記&#xff08;內網 外網同時通 可能有問題&#xff0c;以防萬一可以按照個來恢復 sudo ip route replace 192.168.1.0/24 dev eno8403 proto kernel scope link src <你的IP>或者恢復腳本! 如下 誤操作路由時&…

創建 Vue 3.0 項目的兩種方法對比:npm init vue@latest vs npm init vite@latest

創建 Vue 3.0 項目的兩種方法對比&#xff1a;npm init vuelatest vs npm init vitelatest Vue 3.0 作為當前主流的前端框架&#xff0c;官方提供了多種項目創建方式。本文將詳細介紹兩種最常用的創建方法&#xff1a;Vue CLI 方式 (npm init vuelatest) 和 Vite 方式 (npm in…

Java求職者面試指南:Spring, Spring Boot, Spring MVC, MyBatis技術點深度解析

Java求職者面試指南&#xff1a;Spring, Spring Boot, Spring MVC, MyBatis技術點深度解析 面試官與程序員JY的三輪提問 第一輪&#xff1a;基礎概念問題 1. 請解釋一下Spring框架的核心容器是什么&#xff1f;它有哪些主要功能&#xff1f; JY回答&#xff1a;Spring框架的…

【修復MySQL 主從Last_Errno:1051報錯的幾種解決方案】

當MySQL主從集群遇到Last_Errno:1051報錯后不要著急&#xff0c;主要有三種解決方案&#xff1a; 方案1: 使用GTID場景&#xff1a; mysql> STOP SLAVE;(2)設置事務號&#xff0c;事務號從Retrieved_Gtid_Set獲取 在session里設置gtid_next&#xff0c;即跳過這個GTID …

定位接口偶發超時的實戰分析:iOS抓包流程的完整復現

我們通常把“請求超時”歸結為網絡不穩定、服務器慢響應&#xff0c;但在一次產品灰度發布中&#xff0c;我們遇到的一個“偶發接口超時”問題完全打破了這些常規判斷。 這類Bug最大的問題不在于表現&#xff0c;而在于極難重現、不可預測、無法復盤。它不像邏輯Bug那樣能從代…

【網工】華為配置專題進階篇②

目錄 ■DHCP NAT BFD 策略路由 ▲掩碼與反掩碼總結 ▲綜合實驗 ■DHCP NAT BFD 策略路由 ▲掩碼與反掩碼總結 使用掩碼的場景&#xff1a;IP地址強相關 場景一&#xff1a;IP地址配置 ip address 192.168.1.1 255.255.255.0 或ip address 192.168.1.1 24 場景二&#x…