python做什么模型_主題模型初學者指南[Python]

引言

近年來涌現出越來越多的非結構化數據,我們很難直接利用傳統的分析方法從這些數據中獲得信息。但是新技術的出現使得我們可以從這些輕易地解析非結構化數據,并提取出重要信息。

主題模型是處理非結構化數據的一種常用方法,從名字中就可以看出,該模型的主要功能就是從文本數據中提取潛在的主題信息。主題模型不同于其他的基于規則或字典的搜索方法,它是一種無監督學習的方法。

主題可以由語料庫中的共現詞項所定義,一個好的主題模型的擬合結果應該如下所示——“health”、“doctor”、“patient”、“hospital”構成醫療保健主題,而“farm”、“crops”、“wheat”則構成農業主題。

主題模型的適用領域有:文檔聚類、信息提取和特征選擇。比如,紐約時報利用主題模型的結果來提升文章推薦引擎的功能。許多專家將主題模型應用到招聘領域中,利用主題模型來提取工作要求中的潛在信息,并用模型的擬合結果來匹配候選人。此外,主題模型還被用于處理大規模的非結構化數據,如郵件、顧客評論和用戶社交數據。

如果你不熟悉主題模型的話,那么本文將告訴你主題模型的原理以及如何利用Python來構建主題模型。

目錄LDA(Latent Dirichlet Allocation) 模型LDA 模型的參數

Python 實現過程數據準備

數據清洗與預處理

計算文檔詞頻矩陣

構建 LDA 模型

擬合結果

建議頻數過濾法

標記過濾法

Batch Wise LDA

特征選擇

LDA 模型

我們可以用多種方法來處理文本數據,比如 TF 和 IDF 方法。LDA模型是最流行的主題模型,我們接下來將詳細介紹 LDA 模型。

LDA 模型假設文檔是由一系列主題構成的,然后再從這些主題中依據相應的概率分布生成詞語。給定一個文檔數據集,LDA 模型主要用于識別文檔中的主題分布情況。

LDA 模型是一種矩陣分解技術,在向量空間模型中,任何語料都能被表示成一個文檔詞頻矩陣。如下所示,矩陣中包含 N 篇文檔,M 個詞語,矩陣中的數值表示詞語在文檔中出現的頻率。

LDA 模型將上述的文檔詞頻矩陣轉換成兩個低維的矩陣—— M1 和 M2。其中 M1 表示文檔主題矩陣,M2 表示主題詞語矩陣,它們的維度分別是 N*K 和 K*M,K 表示文檔中主題的個數,M 表示詞語的數量。

需要注意的是,上述兩個矩陣提供了文檔主題和主題詞語的初始分布情況,LDA 模型通過抽樣的方法來更新這兩個矩陣。該模型通過更新文檔中每個詞語的主題歸屬情況來調整模型的參數值 p1 和 p2,其中 $p1 = p(\frac{topict}{documentd})$,$p2 = p(\frac{wordw}{topict})$。經過一系列的迭代計算后,LDA 模型達到收斂狀態,此時我們即可得到一組最佳參數值。

LDA 模型的參數

超參數 alpha 和 beta —— alpha 表示文檔—主題密度,beta 則表示主題—詞語密度,其中 alpha 值越大表示文檔中包含更多的主題,而更大的 beta 值則表示主題中包含更多的詞語。

主題中的詞數——這個參數取決于你的真實需求,如果你的目標是提取主題信息,那么你最好選擇較多的詞語。如果你的目標是提取特征,那么你應該選擇較少的詞項。

迭代次數—— LDA 算法的迭代次數

Python 實現

數據準備

以下是一些示例數據:

數據清洗與預處理

數據清洗是文本建模分析過程中的一個重要環節,在這個過程中我們將移除標點符號、停止詞并規整數據集:

計算文檔詞頻矩陣

構建 LDA 模型

擬合結果

建議

主題模型的擬合結果完全取決于語料庫中的特征項,而語料是由一個稀疏的文檔詞頻矩陣所構成的。降低該矩陣的維度可以提升主題模型的擬合結果,根據我的個人經驗,主要有以下幾個降維方法:

頻數過濾法

我們可以按照詞語的頻數進行排序,然后保留頻數較高的詞語并將頻數較低的詞語剔除掉。此外我們還可以借助探索性分析的方法來決定如何設置閾值。

標記過濾法

通常情況下,標記過濾法的效果優于頻數過濾法。主題模型通過詞語的共現情況來反映主題信息,然而在每個主題中并不是所有的詞語都是同等重要的。我們可以將這些無關緊要的詞語剔除掉,提升模型的擬合效果。

Batch Wise LDA

為了提取出文檔中最重要的主題信息,我們可以將語料庫分割成一系列固定大小的子集。然后我們可以對每個子集數據構建多個 LDA 模型,出現次數最多的主題就是該文檔中最重要的主題信息。

特征選擇

有些時候,我們還可以利用 LDA 模型來選擇特征。以文本分類問題為例,如果訓練集中包含多個類別的文檔,我們可以首先構建 LDA 模型,然后剔除掉不同類別文檔中共同出現的主題信息,剩余的特征即為有助于提升文本分類模型的準確率。

結語

到此為止,我們已經介紹完主題模型了,我希望本文能夠幫你了解如何處理文本數據。如果你想加深對主題模型的理解,那么我建議你最好親自練習下本文的代碼并檢查模型的擬合結果。

如果你覺得本文對你有幫助的話,你可以將此文分享給你的朋友。

***

原文作者:Shivam Bansal

譯者:Fibears

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

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

相關文章

python實現隊列_Python學習教程:用隊列實現棧

接著上一期跟大家說的用棧實現隊列,這期的Python學習教程跟大家講用隊列實現棧題目:使用隊列實現棧的下列操作:push(x) – 元素 x 入棧pop() – 移除棧頂元素top() – 獲取棧頂元素empty() – 返回棧是否為空Implement the following operati…

vue 點擊li 中的img 怎么不冒泡_Vue全解

一.Vue實例內存圖:1.把Vue的實例命名為vm,vm對象封裝了對視圖的所有操作包括數據讀寫、事件綁定、DOM更新2.vm的構造函數是Vue,按照ES6的說法vm所屬的類是Vue3.options是new Vue的參數一般稱為選項或構造選項1.options里面有什么英文文檔搜op…

python布局管理_Python基礎=== Tkinter Grid布局管理器詳解

本文轉自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html 箬笠蓑衣Grid(網格)布局管理器會將控件放置到一個二維的表格里。主控件被分割成一系列的行和列,表格中的每個單元(cell)都可以放置一個控件。注意:不要試圖在一個主…

python面向對象類_python面向對象-類和對象

一. 類的定義class類名():代碼#定義類classWasher():defwash(self):print("洗衣服")注意:類名要滿足標識符命名規則,同時遵循大駝峰命名習慣。二. 創建對象對象名 類名()#創建對象w Washer()#調用方法w.wash() #洗衣服三. selfself指的是調用…

vant部署_vant ui rem配置流程

參考地址 https://www.cnblogs.com/WQLong/p/7798822.html1.下載lib-flexible使用的是vue-cliwebpack,通過npm來安裝的npm i lib-flexible --save2.引入lib-flexible在main.js中引入lib-flexibleimport ‘lib-flexible/flexible‘3.設置meta標簽通過meta標簽&#…

terminal services 找不到_電腦局域網中查看不到其他計算機或無法連接的解決辦法...

在辦公環境中,電腦經常需要打開網絡,進行一些文件共享的操作,但是有時會出現很多無法共享的情況,之前有一篇文章講過解決辦法,今天再來將一下具體無法共享的錯誤提示和相對應的處理方法,主要有以下幾種情況…

如何避免mysql回表查詢_mysql如何避免回表查詢

《迅猛定位低效SQL?》留了一個尾巴:select id,name where name‘shenjian‘select id,name,sexwhere name‘shenjian‘多查詢了一個屬性,為何檢索過程完全不同?什么是回表查詢?什么是索引覆蓋?如何實現索引…

python爬蟲開發數據庫設計入門經典_Python3實現的爬蟲爬取數據并存入mysql數據庫操作示例...

本文實例講述了Python3實現的爬蟲爬取數據并存入mysql數據庫操作。分享給大家供大家參考,具體如下:爬一個電腦客戶端的訂單。羅總推薦,抓包工具用的是HttpAnalyzerStdV7,與chrome自帶的F12類似。客戶端有接單大廳,羅列…

python中multiply函數_python中numpy庫內multiply()、dot()和 * 三種乘法運算的區別小計...

首先,導入函數包:import numpy as np1.np.multiply()函數:數組:(點對點)對應位置元素相乘矩陣:對應位置元素相乘示例:A np.array([[1,2],[3,4]])B np.array([[1,3],[2,4]])A_mat np.mat(A)B_mat np.mat(B)A_B_mult…

安裝python3.6.1_如何安裝python3.6.1/

如何在win7下安裝Python及配置1、首先,從搜索python官載適合自己電腦python版本。2標右擊桌面“計算機”擇打開菜單欄中的性”。3、WindowsXP時,在新彈出的屬性窗口,選擇“高級”->“環境變量”。Windows7是,在新彈出的屬性窗口…

編程入門python java和c語言_學習編程適不適合從Python入門?哪種語言更適合入門?...

本文對比了C語言和Python語言,分析它們作為編程入門語言各自的利弊,并給出了我推薦的編程學習道路。我本身已經入門了Python腳本語言,在進階C語言和JAVA語言后,Python重學就輕松很多,幾個小時就拾起了忘記的語法&#…

mysql 備份 一張表_mysql 備份表的一個方法

#--- start# 新建表create table sp2_match_comment_tmp like sp2_match_comment; # 這種方式 外鍵索引,觸發器不會在新表中有,要自己添加LOCK TABLES sp2_match_comment write, sp2_match_comment AS smc2 read, sp2_match_comment_tmp write;# 導出最新…

springmvc的工作原理_SpringMVC工作原理

1 簡介SpringMVC框架是以請求為驅動,圍繞Servlet設計,將請求發給控制器,然后通過模型對象,分派器來展示請求結果視圖。其中核心類是DispatcherServlet,它是一個Servlet,頂層是實現的Servlet接口。2 運行原理…

java邏輯運算符_Java邏輯運算符

Java邏輯運算符Java邏輯運算符包含下面6中符號:&& 與 ;&& 與 前后兩個操作數必須都是true才返回true,否則返回false& 不短路與 ; & 不短路與 表達式都會執行到|| 或; || 或 只要兩個操作數中有一個是tru…

跨站點請求偽造_十大常見web漏洞——跨站點請求偽造(CSRF)

CSRF介紹什么是CSRF呢?我們直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?dodelete&pgc_id6829574701128352260這個URL是頭條刪除pgc_id為6829574701128352260的一篇文章的連接,通過執行這個URL用戶就可以刪除這篇文章。首先攻擊…

java多線程隊列_java多線程消費者生產者模式(BlockingQueue 通過阻塞隊列實現)

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/*** Created with IntelliJ IDEA.* User: csx* Date: 4/24/14* Time: 9:56 AM* To change this template use File | Settings | File Templates.** 生產者與消費者模型中&#x…

unique函數_C++核心準則C.35:基類的析構函數必須滿足的條件

C.35: A base class destructor should be either public and virtual, or protected and nonvirtual基類的析構函數要么是公開的虛函數,要么是保護的非虛函數Reason(原因)To prevent undefined behavior. If the destructor is public, then calling code can atte…

java jta 例子_Java事務處理全解析(八)——分布式事務入門例子(Spring+JTA+Atomikos+Hibernate+JMS)...

在本系列先前的文章中,我們主要講解了JDBC對本地事務的處理,本篇文章將講到一個分布式事務的例子。請通過以下方式下載github源代碼:本地事務和分布式事務的區別在于:本地事務只用于處理單一數據源事務(比如單個數據庫)&#xff0…

python連接redis哨兵_Python redis.sentinel方法代碼示例

本文整理匯總了Python中redis.sentinel方法的典型用法代碼示例。如果您正苦于以下問題:Python redis.sentinel方法的具體用法?Python redis.sentinel怎么用?Python redis.sentinel使用的例子?那么恭喜您, 這里精選的方法代碼示例或…

交換兩個數組 差最小 java_如何交換兩個等長整形數組使其數組和的差最小(C和java實現)...

1 importjava.util.Arrays;23 /**4 *5 *authorAdministrator6 *7 */8 public classTestUtil {9 private int[] arrysMin null;1011 private int[] arrysMax null;1213 private int matchNum 0;1415 private boolean hasMatched false;1617 /**18 * 返回數組的所有元素的總和…