自然語言處理NLP:嵌入層Embedding中input_dim的計算——Tokenizer文本分詞和編碼

1. 詞匯表大小(input_dim)計算方法

嵌入層Embedding中的input_dim是根據數據中所有唯一詞(或字)的總數來決定的。可以通過Tokenizer文本分詞和編碼得到。

簡單說,Tokenizer 是一個文本分詞和編碼器,它主要做兩件事:

  • 分詞:將句子拆分成詞或字
  • 編碼:為每個詞/字分配唯一的數字編號

例如:

from keras.preprocessing.text import Tokenizer# 假設這是你的訓練文本數據
texts = ["我愛吃蘋果","蘋果很好吃","我不喜歡香蕉","香蕉和蘋果都是水果"
]# 創建分詞器并構建詞匯表,設置 char_level=True 按字分詞
# 如果想要更加合理的中文分詞,比如“蘋果”合并為一個詞,可以使用中文分詞工具(如 jieba)
# import jieba  # 需要安裝: pip install jieba后  tokenized_texts = [' '.join(jieba.cut(text)) for text in texts]
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(texts)  # 學習所有文本,構建詞匯表# 查看詞匯表,可以看到詞或字對應的索引數字
word_index = tokenizer.word_index
print("詞匯表:", word_index)
# 輸出可能是: {'果': 1, '蘋': 2, '我': 3, '吃': 4, '香': 5, '蕉': 6, '愛': 7, '很': 8, '好': 9, '不': 10, '喜': 11, '歡': 12, '和': 13, '都': 14, '是': 15, '水': 16}# 詞匯表大小 = 唯一詞的數量 + 1(+1是為了預留索引0給填充值),這邊的值就是嵌入層Embedding中input_dim的數值
vocab_size = len(word_index) + 1
print("詞匯表大小:", vocab_size)  # 輸出: 17# 將文本轉換為數字序列
sequences = tokenizer.texts_to_sequences(texts)
print("數字序列:", sequences)
# 輸出:[[3, 7, 4, 2, 1], [2, 1, 8, 9, 4], [3, 10, 11, 12, 5, 6], [5, 6, 13, 2, 1, 14, 15, 16, 1]]

所以 input_dim=18,因為我們的詞匯表有17個唯一詞 + 1個填充索引

2.Tokenizer作用和簡單用法

Tokenizer會自動:

  • 統計所有文本中出現的詞/字
  • 按出現頻率從高到低排序
  • 分配編號(頻率最高的詞編號為1,次高的為2,以此類推)
import numpy as np
from keras.models import Sequential
from keras.layers import Embedding
from keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences# 1. 準備數據
texts = ["我愛吃蘋果","蘋果很好吃", "我不喜歡香蕉","香蕉和蘋果都是水果"
]# 2. 創建詞匯表
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(texts)
word_index = tokenizer.word_index
vocab_size = len(word_index) + 1  # +1 為填充符0print("詞匯表:", word_index)
print("詞匯表大小:", vocab_size)# 3. 文本轉數字序列
sequences = tokenizer.texts_to_sequences(texts)
print("原始序列:", sequences)# 4. 填充序列到相同長度(input_length=5)
padded_sequences = pad_sequences(sequences, maxlen=5, padding='post')
print("填充后序列:")
print(padded_sequences)# 5. 創建Embedding層(input_dim根據vocab_size決定)
model = Sequential()
model.add(Embedding(input_dim=vocab_size,  # 這里是18output_dim=8,          # 每個詞用8維向量表示,是一個超參數,需要根據經驗和實驗來確定,小詞匯表(<1000):4-16維,一般8input_length=5         # 每個序列5個詞,由最大長度maxlen決定,這邊是9。統計所有序列長度:取一個合適的百分位數(如95%)
))# 查看模型摘要
model.summary()# 測試預測
sample_input = padded_sequences[:2]  # 取前兩個樣本
print("\n輸入數據:", sample_input)
print("輸入形狀:", sample_input.shape)  # (2, 5)output = model.predict(sample_input)
print("輸出形狀:", output.shape)        # (2, 5, 8)

輸出結果:
在這里插入圖片描述

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

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

相關文章

python中的分代垃圾回收機制的原理【python進階二、2】

1. 分代設計思想Python 將對象按存活時間分為三代&#xff08;Generation 0, 1, 2&#xff09;&#xff1a;0代&#xff08;年輕代&#xff09;&#xff1a;新創建的對象。1代&#xff08;中年代&#xff09;&#xff1a;經歷一次GC掃描后存活的對象。2代&#xff08;老年代&am…

【后端】云服務器用nginx配置域名訪問前后端分離項目

云服務器有多個服務&#xff08;前端 3000 端口、后端 8288 端口&#xff0c;甚至還有別的服務&#xff09;。希望用戶只輸入 域名&#xff08;比如 https://example.com&#xff09;&#xff0c;而不是 example.com:3000、example.com:8288。本質上是要做 端口隱藏 域名統一入…

軟考中級數據庫系統工程師學習專篇(67、數據庫恢復)

67、數據庫恢復數據庫故障恢復中基于檢查點的事務分類與處理策略在數據庫系統發生故障后的恢復過程中&#xff0c;?檢查點&#xff08;Checkpoint&#xff09;?? 技術是關鍵機制&#xff0c;它能有效縮小恢復范圍&#xff0c;減少需要掃描的日志量&#xff0c;從而加速恢復進…

SpringBoot 分庫分表 - 實現、配置與優化

分庫分表&#xff08;Database Sharding&#xff09;是一種數據庫架構優化技術&#xff0c;通過將數據分散到多個數據庫或表中&#xff0c;以應對高并發、大數據量場景&#xff0c;提升系統性能和擴展性。 在 Spring Boot 中&#xff0c;分庫分表可以通過框架支持&#xff08;如…

爬蟲代理實操:選擇可靠的HTTP(S)代理的方法

在爬蟲工作里&#xff0c;選對代理協議&#xff08;HTTP/HTTPS&#xff09;只是第一步&#xff0c;更關鍵的是找到 “可靠” 的代理 —— 哪怕是 HTTPS 代理&#xff0c;若節點不穩定、IP 純凈度低&#xff0c;照樣會頻繁被封&#xff0c;反而耽誤采集進度。這幾年踩過不少坑&a…

數據庫常見故障類型

數據庫常見故障類型數據庫系統運行過程中可能發生的故障主要分為以下三類&#xff0c;其破壞性由小到大&#xff1a;故障類型別名根本原因影響范圍典型例子?1. 事務故障?邏輯故障事務內部的程序邏輯錯誤或輸入異常。?單個或少量事務。- 輸入數據不合法&#xff08;如除零錯誤…

【Android】Span富文本簡介

一&#xff0c;概述android.text包下span體系類&#xff0c;主要指Spanned、Spannable、ParagraphStyle、CharacterStyle實現類。Android通過Span體系&#xff0c;搭建了富文本API&#xff0c;其中Spanned、Spannable實現了CharSequence接口&#xff0c;旨在映射段落start~end之…

【HTML】draggable 屬性:解鎖網頁交互新維度

一、簡介 在Web開發中&#xff0c;用戶與內容的交互方式直接影響用戶體驗的深度。在 HTML 中&#xff0c;draggable 是一個全局屬性&#xff0c;通過簡單配置即可讓任意元素實現拖拽功能。也可通過結合 draggable 屬性和 JavaScript 事件&#xff0c;可以實現豐富的拖放交互功能…

如何在Github中創建倉庫?如何將本地項目上傳到GitHub中?

1.1 點擊New repository&#xff08;這個是創建代碼倉庫的意思&#xff09;初次完成后只有一個文件最后&#xff1a;在本地git clone 項目地址然后把項目文件復制到git的文件夾內再提交到遠程倉庫git add . git commit -m "修改https"git push origin mainmain為分支…

【前端教程】HTML 基礎界面開發

一、網站導航欄設計與實現 導航欄是網站的重要組成部分&#xff0c;負責引導用戶瀏覽網站的各個板塊。以下是一個實用的導航欄實現方案&#xff1a; 實現代碼 HTML 結構&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /&…

【學Python自動化】 6. Python 模塊系統學習筆記

一、模塊基礎 什么是模塊&#xff1f;包含 Python 定義和語句的 .py 文件解決代碼復用和組織問題每個模塊有自己的命名空間創建模塊示例# fibo.py - 斐波那契模塊 def fib(n):"""打印小于n的斐波那契數列"""a, b 0, 1while a < n:print(a, e…

機器學習-時序預測2

門控循環單元GRU 接著機器學習-時序預測1-CSDN博客這個說&#xff0c;GRU是LSTM的一個簡化而高效的變體&#xff0c;都使用“門控機制”來控制信息流&#xff0c;但它通過合并一些組件&#xff0c;使結構更簡單、參數更少、計算更快&#xff0c;同時在許多任務上性能與 LSTM 相…

數據湖與數據倉庫

大數據前沿技術詳解 目錄 數據湖技術湖倉一體架構數據網格實時流處理技術云原生數據技術數據治理與血緣AI原生數據平臺邊緣計算與大數據 核心內容包括&#xff1a; 數據湖技術 - 架構模式、技術棧、面臨的挑戰 湖倉一體架構 - Delta Lake、Iceberg、Hudi等主流實現 數據網格…

Python OpenCV圖像處理與深度學習:Python OpenCV入門-圖像處理基礎

Python OpenCV入門實踐&#xff1a;圖像處理基礎 學習目標 通過本課程&#xff0c;學員們將了解OpenCV的基本概念、安裝方法&#xff0c;掌握如何使用Python和OpenCV進行基本的圖像處理操作&#xff0c;包括圖像的讀取、顯示、保存以及簡單的圖像變換。 相關知識點 Python Open…

【lua】Lua 入門教程:從環境搭建到基礎編程

Lua 入門教程&#xff1a;從環境搭建到基礎編程 Lua 是一種輕量級、可擴展的腳本語言&#xff0c;廣泛應用于游戲開發&#xff08;如《魔獸世界》《Roblox》&#xff09;、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效&#xff0c;非常適合作為編程入門語言或輔助開發工…

MySQL索引事務(未完成)

索引的相關操作1.查看索引show index from 表名;2.創建索引create index 索引名字 on 表名(列名);創建索引&#xff0c;是一個危險操作創建索引的時候&#xff0c;需要針對現有的數據&#xff0c;進行大規模的重新整理如果當前表是一個空表&#xff0c;或者數據不多&#xff0c…

Docker一鍵快速部署壓測工具,高效測試 API 接口性能

以下是對該壓測工具的簡單介紹&#xff1a; 這是一個簡易的在線壓測工具&#xff0c;可以對 API 接口/頁面、websocket服務等進行壓力測試&#xff0c;檢驗服務的并發能力使用 thinkphp ant design pro 構建&#xff0c;壓測能力驅動基于 wrk 、 php 多進程協程實現支持在線授…

前端緩存問題詳解

前端緩存是提升網頁性能和用戶體驗的重要手段&#xff0c;但也常導致資源更新不及時等問題。以下是關于前端緩存的核心知識點和解決方案&#xff1a; 一、緩存類型及工作原理HTTP緩存&#xff08;最核心&#xff09; 強緩存&#xff1a;直接從本地讀取&#xff0c;不請求服務器…

webpack升級

一、調研對比維度Webpack 4 狀態Webpack 5 改進與優勢構建速度較慢&#xff0c;增量構建效率低? 引入 持久化緩存&#xff08;filesystem cache&#xff09;&#xff0c;二次構建速度提升高達 90%Tree Shaking支持基礎 Tree Shaking&#xff0c;需手動配置? 更強的 Tree Shak…

Logstash數據遷移之es-to-kafka.conf詳細配置

在 Logstash 中配置從 Elasticsearch (ES) 讀取數據并輸出到 Kafka 是一個相對高級但強大的用法&#xff0c;通常用于數據遷移、重新索引、或構建新的數據管道。 下面我將詳細解釋配置文件的各個部分和細節。 核心配置文件結構 (es-to-kafka.conf) 一個完整的配置文件主要包含三…