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

使用 Python 進行詞嵌入:Wordc

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

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]刪除
最新教學 更多>
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-03-22
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-03-22
  • SQL如何從非結構化文本數據中計算成績百分比分佈?
    SQL如何從非結構化文本數據中計算成績百分比分佈?
    [2 [2 在計算等級百分比分佈時,將成績存儲為免費文本會提出挑戰。本文提供了SQL解決方案,即使沒有預定義的成績值,也可以計算所有等級的這些百分比。 [2 此SQL查詢利用 [2 來自mytable 組為等級; 替代sql query(對於沒有對於數據庫缺少函數,此替代查詢使用一個子查詢: [...
    程式設計 發佈於2025-03-22
  • 如何在ASP.NET MVC中生成簡單的html.dropdownlistfor()?
    如何在ASP.NET MVC中生成簡單的html.dropdownlistfor()?
    在 ASP.NET MVC 中創建簡單的 Html.DropDownListFor() 下拉列表 在 ASP.NET MVC 中,在下拉列表中顯示靜態選項非常簡單。讓我們來看看如何實現這一點。 如何創建簡單的 Html.DropDownListFor() 要生成一個基本的下拉列表,您可以使用 H...
    程式設計 發佈於2025-03-22
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-03-22
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-03-22
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-03-22
  • 如何在“配置服務”中手動解析ASP.NET核心服務?
    如何在“配置服務”中手動解析ASP.NET核心服務?
    在ConfigureServices中手動解析ASP.NET Core服務 ASP.NET Core 中用於配置依賴注入容器的 ConfigureServices 方法不提供直接解析服務的方法。 要從此方法手動解析服務,需要採用替代方法。 服務提供程序模式 為了解析服務,ASP.NET Core...
    程式設計 發佈於2025-03-22
  • 如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    從python import codecs import codecs import codecs 導入 text = codecs.decode('這狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#帶有...
    程式設計 發佈於2025-03-22
  • 如何在MySQL中動態創建交叉表的表?
    如何在MySQL中動態創建交叉表的表?
    forfront。 必須在查詢準備時間定義樞軸查詢的列數。 To achieve dynamic cross-tabulation, you have two options that involve writing application code:Option 1: Query Disti...
    程式設計 發佈於2025-03-22
  • JUNIT測試:Java中單位測試的綜合指南
    JUNIT測試:Java中單位測試的綜合指南
    [2 [2 Junit通過幫助開發人員在開發生命週期的早期確定問題,在軟件測試中起著至關重要的作用。它支持自動化,使其與連續集成管道不可或缺。此外,它可以促進編寫可測試的可維護代碼,增強整體軟件質量。 [2 要開始使用Junit,請使用Maven或Gradle添加必要的依賴項。配置您的開發環境,例...
    程式設計 發佈於2025-03-22
  • NULL與C ++中的0:哪個更好的空指針?
    NULL與C ++中的0:哪個更好的空指針?
    在c:null vs. 0 最初,由於其定義為(void*)0,因此在C中無法使用NULL。但是,隨著C 11的出現,遊戲發生了變化。現在,null被明確定義為0,在功能上與其數字對應物相同。 0的倡導者認為這是測試真實價值的更合乎邏輯的選擇。正如提供的代碼段所示,零自然適合使用(p &&!q)...
    程式設計 發佈於2025-03-22
  • 如何在Python中執行嵌套詞典的深入合併?
    如何在Python中執行嵌套詞典的深入合併?
    在python 與嵌套鍵合併多個詞典中,詞典的詞典的深度合併可能是一個具有挑戰性的任務。讓我們考慮以下示例: dict1 = { 1:{“ a”:{“ a”}}, 2:{“ b”:{“ b”}} } dict2 = { 2:{“ C”:{“ C”}}, 3:{“ D...
    程式設計 發佈於2025-03-22
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-03-22
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-03-22

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

Copyright© 2022 湘ICP备2022001581号-3