」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Python 進行詞嵌入:Wordc

使用 Python 進行詞嵌入:Wordc

發佈於2024-11-08
瀏覽:574

Word-embedding-with-Python: Wordc

使用 Python(和 Gensim)實現 word2vec

  • 注意:此程式碼是用Python 3.6.1(Gensim 2.3.0)編寫的

  • word2vec與Gensim的Python實現及應用

  • 原文:Mikolov, T.、Chen, K.、Corrado, G. 與 Dean, J. (2013)。向量空間中單字表示的有效估計。 arXiv 預印本 arXiv:1301.3781.

import re
import numpy as np

from gensim.models import Word2Vec
from nltk.corpus import gutenberg
from multiprocessing import Pool
from scipy import spatial
  • 導入訓練資料集
  • 從nltk庫導入莎士比亞的哈姆雷特語料庫
sentences = list(gutenberg.sents('shakespeare-hamlet.txt'))   # import the corpus and convert into a list

print('Type of corpus: ', type(sentences))
print('Length of corpus: ', len(sentences))

語料庫類型:class 'list'
語料長度:3106

print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['[', 'The', '悲劇', 'of', '哈姆雷特', 'by', '威廉', '莎士比亞', '1599', ']']
['Actus', 'Primus', '.']
['弗蘭', '.']

預處理資料

  • 使用re模組預處理資料
  • 將所有字母轉換為小寫
  • 刪除標點符號、數字等。
for i in range(len(sentences)):
    sentences[i] = [word.lower() for word in sentences[i] if re.match('^[a-zA-Z] ', word)]  
print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['the'、'悲劇'、'of'、'哈姆雷特'、'by'、'威廉'、'莎士比亞']
['actus', 'primus']
['弗蘭']

創建和訓練模型

  • 建立 word2vec 模型並使用 Hamlet 語料庫進行訓練
  • 關鍵參數說明(https://radimrehurek.com/gensim/models/word2vec.html)
    • 句子:訓練資料(必須是標記化句子的列表)
    • size:嵌入空間的尺寸
    • sg: CBOW 若為 0,skip-gram 若為 1
    • 視窗:每個上下文中的單字數(如果視窗
    • 大小為3,考慮左鄰域中的3個單字和右鄰域中的3個單字)
    • min_count:詞彙表中包含的最小單字數
    • iter:訓練迭代次數
    • workers:要訓練的工作執行緒數量
model = Word2Vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = Pool()._processes)

model.init_sims(replace = True)

儲存和載入模型

  • word2vec模型可以本地保存和載入
  • 這樣做可以減少再次訓練模型的時間
model.save('word2vec_model')
model = Word2Vec.load('word2vec_model')

相似度計算

  • 嵌入單字(即向量)之間的相似度可以使用餘弦相似度等指標來計算
model.most_similar('hamlet')

[('horatio', 0.9978846311569214),
('女王', 0.9971947073936462),
('萊爾特斯', 0.9971820116043091),
('國王', 0.9968599081039429),
('媽媽', 0.9966716170310974),
('哪裡', 0.9966292381286621),
('迪爾', 0.9965540170669556),
('奧菲莉亞', 0.9964221715927124),
('非常', 0.9963752627372742),
('哦', 0.9963476657867432)]

v1 = model['king']
v2 = model['queen']

# define a function that computes cosine similarity between two words
def cosine_similarity(v1, v2):
    return 1 - spatial.distance.cosine(v1, v2)

cosine_similarity(v1, v2)

0.99437165260314941

版本聲明 本文轉載於:https://dev.to/ragoli86/word-embedding-with-python-word2vec-540c?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 單一責任原則
    單一責任原則
    每個軟體元件應該只有一個且一個職責 軟體元件可以是類別、方法或模組 例如,瑞士軍刀是一種多用途工具,違反了軟體開發的單一責任原則,相反,刀是遵循單一責任的一個很好的例子(因為與瑞士軍刀不同,它只能用於切割可用於切割、打開罐頭、作為萬能鑰匙、剪刀等) 由於無論是現實世界或軟體開發,變化都是不變的,單...
    程式設計 發佈於2024-11-09
  • 如何在 Python 中列出定義的變數:「listout」的替代品?
    如何在 Python 中列出定義的變數:「listout」的替代品?
    在 Python 中存取定義的變數在 Python 中,追蹤所有定義的變數對於保持清晰度和調試至關重要。雖然 Python shell 缺乏用於顯示完整變數清單的內建功能(如 MATLAB 的「listout」命令),但有幾種替代方法可以實現此功能。 dir() dir() 函數提供目前作用域中定義...
    程式設計 發佈於2024-11-09
  • 如何在不中斷內容流的情況下將 Div 絕對放置在右側:解決 Float:right 與 Position:absolute 的困境
    如何在不中斷內容流的情況下將 Div 絕對放置在右側:解決 Float:right 與 Position:absolute 的困境
    右浮動和絕對定位困境已解決在您追求一個div 能夠無縫地將其自身與其父級右側對齊,同時避免干擾其他內容,您偶然發現了一個障礙:float:right 和position:absolute 的衝突行為。 Float 和 Absolute 的衝突本質Float :right 透過將其他元素推到左側來將元...
    程式設計 發佈於2024-11-09
  • Darshan Hiranandani 的解釋:如何使用 PHP 連接到 MySQL 資料庫?
    Darshan Hiranandani 的解釋:如何使用 PHP 連接到 MySQL 資料庫?
    大家好,我是 Darshan Hiranandani,我正在解釋如何使用 PHP 連接到 MySQL 資料庫? 要使用 PHP 連線到 MySQL 資料庫,您可以使用 mysqli 擴充或 PDO(PHP 資料物件)擴充。以下是這兩種方法的範例: 使用 mysqli 擴充
    程式設計 發佈於2024-11-09
  • 如何掌握 CSS 盒子模型以實現完美的網站佈局(+ Codepen 範例)
    如何掌握 CSS 盒子模型以實現完美的網站佈局(+ Codepen 範例)
    嘿,了不起的人!欢迎回到我的博客。 ?今天,我们将深入研究 CSS 盒子模型,揭秘如何确定每个元素的大小,以及如何使用这些知识来创建精确、现代和简洁的设计(本文末尾的实际示例)。 盒子模型简介 CSS 盒子模型是网页设计的基础,它规定了每个 HTML 元素如何在网页中占据空间。 盒子...
    程式設計 發佈於2024-11-09
  • 如何在空手道的讀取方法中參數化請求檔名?
    如何在空手道的讀取方法中參數化請求檔名?
    在Karate的讀取方法中參數化請求檔名嘗試使用Karate進行自動化API測試時,您可能會在嘗試透過時遇到問題將XML 檔案傳送到Read 方法,收到類似問題中提到的異常。當您在 Read 方法中使用變數表示檔案路徑(例如 read(varXmlFile))時,會發生這種情況。 要解決此問題,請確...
    程式設計 發佈於2024-11-09
  • 如何在 Pandas 中基於 If-Else-Else 條件建立列?
    如何在 Pandas 中基於 If-Else-Else 條件建立列?
    在 Pandas 中使用 If-Else-Else 條件建立列根據 if-elif-else條件建立新列,主要有兩種方法:非向量化方法此方法涉及定義一個對行進行操作的函數:def f(row): if row['A'] == row['B']: val = 0 eli...
    程式設計 發佈於2024-11-09
  • 建立更聰明的合約:Go 如何為 KALP Studio 的區塊鏈解決方案提供支援
    建立更聰明的合約:Go 如何為 KALP Studio 的區塊鏈解決方案提供支援
    随着区块链革命的蓬勃发展,开发智能合约对于利用区块链技术变得至关重要。智能合约本质上是去中心化应用程序 (dApp) 的支柱,有助于在没有中介的情况下促进、验证或执行协议。随着各种编程语言在智能合约开发中越来越受欢迎,Go(或 Golang) 越来越受欢迎。在这篇博客中,我们将深入探讨为什么 KAL...
    程式設計 發佈於2024-11-09
  • 在 Android 中實作 CheckBox Listener 時如何修復 Eclipse 錯誤?
    在 Android 中實作 CheckBox Listener 時如何修復 Eclipse 錯誤?
    Android CheckBox Listener:解決Eclipse 錯誤Android CheckBox Listener:解決Eclipse 錯誤嘗試在Android 中實作CheckBox 的偵聽器時,開發人員在使用時可能會遇到錯誤預設的OnCheckedChangeListener 類別。...
    程式設計 發佈於2024-11-09
  • 如何在 Linux 中使用「cpuid」指令存取 CPU 資訊?
    如何在 Linux 中使用「cpuid」指令存取 CPU 資訊?
    在Linux 上使用cpuid 指令存取CPU 資訊在這個問題中,開發人員試圖在Linux 環境中使用方法類似於Windows API 中的_cpuinfo() 函數。提供的程式碼嘗試利用彙編指令 (cpuid) 來檢索此訊息,但開發人員希望避免手動彙編的需要。 解決方案在於利用編譯程式碼時可用的 ...
    程式設計 發佈於2024-11-09
  • 如何確定 JavaScript 字串的位元組大小
    如何確定 JavaScript 字串的位元組大小
    確定JavaScript 字串的位元組大小在JavaScript 中,字串使用Unicode 字元編碼標準(稱為UCS-2)表示。這意味著字串中的每個字元通常由兩個位元組表示。但是,字串的實際位元組大小可能會有所不同,具體取決於傳輸過程中使用的字串編碼(例如 UTF-8)和特定瀏覽器實作等因素。 計...
    程式設計 發佈於2024-11-09
  • JavaScript 記憶
    JavaScript 記憶
    JavaScript 是一種功能強大的程式語言,在開發互動式網站方面發揮重要作用。然而,在處理複雜和資料密集型應用程式時,JavaScript 效能可能會成為一個問題。這就是記憶發揮作用的地方。透過釋放快取的力量,記憶化是一種可以顯著提高 JavaScript 效能的技術,使您的應用程式運行得更快、...
    程式設計 發佈於2024-11-09
  • 如何在 Linux 系統中使用 Python 建立預填輸入函數?
    如何在 Linux 系統中使用 Python 建立預填輸入函數?
    Python 中的輸入編輯Python 的 input() 和 raw_input() 函數本身不允許預先填入輸入編輯。然而,在Linux系統中,readline模組可以用來建立提供此功能的rlinput函數。 rlinput函數有兩個參數:prompt:顯示的提示字元給使用者。 prefill:在...
    程式設計 發佈於2024-11-09
  • 如何在 Java 中檢索文件建立日期?
    如何在 Java 中檢索文件建立日期?
    在Java 中檢索文件創建日期確定文件創建日期對於組織和管理文件至關重要,特別是在需要按時間順序排序時。在 Java 中,有一個利用 Java NIO 函式庫的解決方案。 NIO(新輸入/輸出)提供了檢索文件元資料(包括建立日期)的方法。僅當底層檔案系統支援時才能存取此元資料。 要使用NIO 存取檔...
    程式設計 發佈於2024-11-09
  • 如何用 Python 建立 Hangman 遊戲:逐步指南
    如何用 Python 建立 Hangman 遊戲:逐步指南
    Hangman 是一款经典的猜词游戏,非常有趣,对于初学者程序员来说是一个很棒的项目。 在本文中,我们将学习如何用 Python 构建一个简单版本的 Hangman 游戏。 最后,您将了解如何使用 Python 的基本控制结构、函数和列表来创建这个游戏。 什么是刽子手? Hang...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3