Python30 使用Gensim庫實現Word2Vec對文本進行處理

圖片

1.Word2Vec

Word2Vec?是一種將詞語表示為向量的技術,能夠捕捉詞語之間的語義關系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出,廣泛應用于自然語言處理任務中。其核心概念主要包括:

詞嵌入(Word Embeddings)

詞嵌入是將詞語映射到一個固定大小的向量空間中,使得在語義上相似的詞在向量空間中也相互接近。Word2Vec 通過神經網絡模型生成詞嵌入。

模型架構

圖片

Word2Vec 主要有兩種模型架構:

  • CBOW(Continuous Bag of Words):給定一個詞的上下文,預測中心詞。例如,給定上下文 ["The", "cat", "on", "the", "mat"],目標詞是 "sat"。

  • Skip-gram:給定一個詞,預測其上下文。例如,目標詞是 "sat",上下文是 ["The", "cat", "on", "the", "mat"]。

工作原理

CBOW 模型

CBOW 模型通過上下文詞預測中心詞。其工作原理如下:

  • 輸入層接受上下文詞的詞向量,將這些詞向量求平均,得到一個上下文表示。

  • 隱藏層將上下文表示映射到一個新的空間。

  • 輸出層使用 softmax 函數預測中心詞的概率分布,選擇概率最大的詞作為預測結果。

Skip-gram 模型

Skip-gram 模型通過中心詞預測上下文詞。其工作原理如下:

  • 輸入層接受中心詞的詞向量。

  • 隱藏層將中心詞詞向量映射到一個新的空間。

  • 輸出層使用 softmax 函數預測上下文詞的概率分布,選擇概率最大的詞作為預測結果。

訓練過程

Word2Vec 的訓練過程包括以下幾個步驟:

  1. 語料庫準備:收集并預處理大量文本數據,將其分詞,并去除低頻詞和停用詞。

  2. 模型初始化:初始化詞向量矩陣和模型參數。

  3. 前向傳播:將輸入詞通過神經網絡進行前向傳播,計算預測的上下文詞或中心詞。

  4. 損失計算:計算預測結果與實際標簽之間的損失。

  5. 反向傳播:通過反向傳播算法更新詞向量和模型參數。

  6. 迭代訓練:重復上述過程,直至模型收斂。

2. Gensim

圖片

Gensim?是一個開源的 Python 庫,用于從非結構化文本數據中提取語義信息,主要應用于自然語言處理(NLP)領域。它提供了高效的工具和算法來實現主題建模、文檔相似性分析、詞嵌入等任務。其核心功能主要包括:

Gensim?提供了多種強大的 NLP 功能,包括但不限于:

  1. 詞嵌入(Word Embeddings)

    • 支持 Word2Vec、FastText、Glove 等詞嵌入模型。

    • 可以從文本語料庫中訓練詞向量,或加載預訓練的詞向量。

  2. 主題建模(Topic Modeling)

    • 支持 Latent Dirichlet Allocation (LDA)、Latent Semantic Indexing (LSI)、Hierarchical Dirichlet Process (HDP) 等主題模型。

    • 可以從文檔集合中提取主題,分析文檔的主題分布。

  3. 文檔相似性分析(Document Similarity)

    • 提供相似性檢索工具,可以計算文檔與文檔、文檔與查詢之間的相似性。

  4. 文本預處理(Text Preprocessing)

    • 包括分詞、去停用詞、詞干提取、詞頻計算等功能。

3. Python實現

以下代碼使用?Gensim?庫中的?Word2Vec?模型對分詞后的文本數據進行訓練,并實現以下功能:

  1. 加載分詞語料文件?word.txt

  2. 訓練一個向量維度為200的skip-gram模型。

  3. 計算并打印兩個單詞"企業"和"公司"的相似度。

  4. 查找并打印與"科技"最相關的20個詞。

  5. 通過詞向量計算,尋找與"公司-產品+生產"關系最相關的詞。

  6. 查找并打印在"企業 公司 是 合作伙伴"中最不合群的詞。

  7. 將訓練好的模型保存為?企業關系.model

這段代碼展示了如何使用 Word2Vec 模型進行文本數據的相似性計算和關系分析。

#?導入包
from?gensim.models?import?word2vec
import?logging#?初始化日志
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',?level=logging.INFO)
sentences?=?word2vec.Text8Corpus("files/data/python32-data/word.txt")??#?加載分詞語料#?訓練skip-gram模型,使用vector_size參數替代size
model?=?word2vec.Word2Vec(sentences,?vector_size=200)??#?默認window=5
print("輸出模型",?model)#?計算兩個單詞的相似度
try:y1?=?model.wv.similarity("企業",?"公司")
except?KeyError:y1?=?0
print("【企業】和【公司】的相似度為:{}\n".format(y1))#?計算某個詞的相關詞列表
y2?=?model.wv.most_similar("科技",?topn=20)??#?20個最相關的
print("與【科技】最相關的詞有:\n")
for?word?in?y2:print(word[0],?word[1])
print("*********\n")#?尋找對應關系
print("公司-產品",?"生產")
y3?=?model.wv.most_similar(positive=["公司",?"產品"],?negative=["生產"],?topn=3)
for?word?in?y3:print(word[0],?word[1])
print("*********\n")#?尋找不合群的詞
y4?=?model.wv.doesnt_match("企業?公司?是?合作伙伴".split())
print("不合群的詞:{}".format(y4))
print("***********\n")#?保存模型
model.save("files/data/python32-data/企業關系.model")

輸入數據:

圖片

輸出結果:

圖片

通過 Gensim 的 Word2Vec 模型對給定文本數據進行了訓練,生成了詞向量,并通過計算詞語相似度、相關詞、對應關系、不合群的詞等方法對詞向量進行了分析和應用。

以上內容總結自網絡,如有幫助歡迎轉發,我們下次再見!

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

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

相關文章

使用昇騰芯片進行多卡訓推時使用hccl_tools.py為npu分配ip報錯問題解決辦法

目錄 問題描述問題產生原因解決辦法最終執行并驗證參考網站命令擴展 問題描述 昇騰芯片(910b/310p等)進行多卡訓練或者推理時需要先獲取并配置每張npu的ip信息,因此需要執行類似下面問題: python mindformers/tools/hccl_tools.…

[AI 大模型] Meta LLaMA-2

文章目錄 [AI 大模型] Meta LLaMA-2簡介模型架構發展新技術和優勢示例 [AI 大模型] Meta LLaMA-2 簡介 Meta LLaMA-2 是 Meta 推出的第二代開源大型語言模型(LLM),旨在為研究和商業應用提供強大的自然語言處理能力。 LLaMA-2 系列模型包括從…

Python實現串口通信(Python+Stm32)詳解

Python實現串口通信(PythonStm32)詳解 引言 在現代的嵌入式系統開發和自動化控制中,串口通信是一種非常常見的通信方式。Python作為一種易于學習且功能強大的編程語言,結合Stm32微控制器,能夠實現高效、靈活的串口通…

Python29 Tensorflow的基本知識和使用

1. TensorFlow TensorFlow 是一個開源的機器學習框架,由 Google Brain 團隊開發。它用于數據流圖的計算,尤其擅長深度學習任務。在 TensorFlow 中,數據流圖(Data Flow Graph)是其核心概念之一,它定義了計算…

Blackbox AI : 全新的人工智能編碼助手 您的高效AI開發全能助手

🎬 鴿芷咕:個人主頁 🔥 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想,就是為了理想的生活! 引入 提起AI 智能編碼助手,相信到了如今大家都不陌生。其對我們開發的代碼時的效率有顯著的提升,可以說…

效果驚人!LivePortrait開源數字人技術,讓靜態照片生動起來

不得了了,快手已經不是眾人所知的那個短視頻娛樂平臺了。 可靈AI視頻的風口尚未過去,又推出了LivePortrait--開源的數字人項目。LivePortrait讓你的照片動起來,合成逼真的動態人像視頻,阿里通義EMO不再是唯一選擇。 讓圖像動起來 LivePortrait 主要提供了對眼睛和嘴唇動作的…

Mattermost:一個強大的開源協作平臺

Mattermost是一個強大的開源協作平臺,基于云原生架構,為企業級用戶提供安全、可擴展且自托管的消息傳遞解決方案。 一、平臺特點 開源與定制性:Mattermost是一個開源項目,用戶可以根據自身需求定制界面、添加功能或擴展其功能&am…

[大師C語言(第四十一篇)]C語言指針數組與數組指針技術詳解

C語言中的指針和數組是兩個核心概念,它們在許多高級編程任務中扮演著重要角色。本文將深入探討C語言中的指針數組與數組指針,包括它們的基本概念、使用場景和技術細節。我們將通過詳細的解釋和實用的代碼案例來展示如何有效地使用這些技術。 第一部分&a…

matlab 卷積和多項式乘法

目錄 一、算法原理1、原理概述2、主要函數二、代碼實現1、通過卷積計算多項式乘法2、向量卷積3、卷積的中心部分三、參考鏈接一、算法原理 1、原理概述 兩個向量 u u u和 v v v的卷積,表示

大屏自適應容器組件 v-scale-screen

在vue中,v-scale-screen可用于大屏項目開發,實現屏幕自適應,可根據寬度自適應,高度自適應,和寬高等比例自適應,全屏自適應。 倉庫地址:github國內地址:gitee 一、安裝 npm instal…

qr 獲取當前路徑

qDebug() 函數在 Qt 應用程序中用于輸出調試信息。這些信息通常被發送到標準輸出(stdout)或標準錯誤(stderr),具體取決于你的應用程序是如何配置的。在大多數開發環境中,你可以通過以下方式查看 qDebug() 輸…

React setState

老生常談之setState 是同步的還是異步的? 設想setState是同步的,那也就是每次調用setState都要進行新舊虛擬DOM的對比,然后將差異化的dom更新到頁面上,性能損耗很大 所以react把setState設置為了異步,當狀態更新時不…

【Unity2D 2022:Audio】添加游戲音樂和音效

一、添加背景音樂 1. 創建空的游戲物體,名為BackgroundMusic 2. 為音頻播放器添加音頻源(Audio Source)組件 3. 將背景音樂音頻賦值到AudioClip(紅色) 4. 設置循環播放(藍色) 二、添加草莓拾取…

springboot封裝請求參數json的源碼解析

源碼位置: org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver#readWithMessageConverters(org.springframework.http.HttpInputMessage, org.springframework.core.MethodParameter, java.lang.reflect.Type…

解答 | http和https的區別,誰更好用

TTP(超文本傳輸協議)和HTTPS(安全超文本傳輸協議)的主要區別在于安全性和數據傳輸的方式。 一、區別 1、協議安全性: HTTP:使用明文形式傳輸數據,不提供數據加密功能,數據在傳輸過…

coze搭建工作流和Agent

coze搭建工作流和Agent Agent LLM 記憶感知規劃使用工具 LLM是大語言模型,prompt提示詞影響LLM的輸出質量 描述需求——>背景——>解決思路,提示詞文檔。 當有明確的需求和實現需求的路徑時,可以通過搭建工作流來完成標準化任務為…

函數聲明與函數表達式的區別?

一、區別如下: 函數聲明的方法定義的函數,函數名是必須的,函數表達式的函數名是可選的。函數聲明的方法定義的函數,函數可以在函數聲明之前調用,函數表達式的函數只能在聲明之后調用。 函數聲明的方法定義的函數并不是真正的聲明,它們僅僅可以出現在全局中,或者嵌套在其他的函數…

Python爬蟲原理以及3個小案例(源碼)

一、爬蟲原理 網絡爬蟲是一種用于自動獲取網頁內容的程序。它模擬用戶瀏覽網頁的過程,通過發送HTTP請求獲取網頁的源代碼,并利用解析和提取技術來獲取所需的數據。 1. HTTP請求與響應過程 爬蟲向目標網站發送HTTP請求,請求包含URL、請求方…

Linux內核 -- DMA控制器之dmaengine框架的注冊與使用流程

Linux Kernel dmaengine 框架 簡介 Linux內核的dmaengine框架是一個用于管理DMA(Direct Memory Access)操作的通用框架。它抽象了不同DMA控制器的實現,使得上層代碼可以方便地進行DMA傳輸。 初始化流程 1. 驅動注冊 每個DMA控制器驅動都…

定義變量和聲明變量、定義類和聲明類

一、定義變量和聲明變量 在編程中,定義變量和聲明變量是兩個相關但不同的概念,尤其是在靜態類型的編程語言中。靜態類型的編程語言比如Java 1、聲明變量 (1)定義:聲明變量是指告訴編譯器變量的名字、類型和在某些情…