大數據之路【第十三篇】:數據挖掘---中文分詞

来源:https://www.cnblogs.com/hackerer/archive/2019/09/04/11456681.html
-Advertisement-
Play Games

一、數據挖掘 中文分詞 • 一段文字不僅僅在於字面上是什麼,還在於怎麼切分和理解。• 例如: – 阿三炒飯店: – 阿三 / 炒飯 / 店 阿三 / 炒 / 飯店• 和英文不同,中文詞之間沒有空格,所以實現中文搜索引擎,比英文多了一項分詞的任務。• 如果沒有中文分詞會出現: – 搜索“達內”,會出現 ...


一、數據挖掘---中文分詞

• 一段文字不僅僅在於字面上是什麼,還在於怎麼切分和理解。
• 例如:
    – 阿三炒飯店:
    – 阿三 / 炒飯 / 店     阿三 / 炒 / 飯店
• 和英文不同,中文詞之間沒有空格,所以實現中文搜索引擎,比英文多了一項分
詞的任務。
• 如果沒有中文分詞會出現:
    – 搜索“達內”,會出現“齊達內”相關的信息

• 要解決中文分詞準確度的問題,是否可以提供一個免費版本的通用分詞程式?
   –  像分詞這種自然語言處理領域的問題,很難徹底完全解決
   –  每個行業或業務側重不同,分詞工具設計策略也是不一樣的

二、切分方案

 

 

• 切開的開始位置對應位是1,否則對應位是0,來表示“有/意見/分歧”的bit內容是:11010

• 還可以用一個分詞節點序列來表示切分方案,例如“有/意見/分歧”的分詞節點序列是{0,1,3,5}

三、最常見的方法

• 最常見的分詞方法是基於詞典匹配
      –  最大長度查找(前向查找,後向查找)

 

• 數據結構
      –   為了提高查找效率,不要逐個匹配詞典中的詞
      –   查找詞典所占的時間可能占總的分詞時間的1/3左右,為了保證切分速度,需要選擇一個好
的查找詞典方法
      –   Trie樹常用於加速分詞查找詞典問題

四、Trie樹

 

 切分詞圖

五、概率語言模型

• 假設需要分出來的詞在語料庫和詞表中都存在,最簡單的方法是按詞計算概率,
而不是按字算概率。


• 從統計思想的角度來看,分詞問題的輸入是一個字串C=c1,c2……cn ,輸出是一
個詞串S=w1,w2……wm ,其中m<=n。對於一個特定的字元串C,會有多個切
分方案S對應,分詞的任務就是在這些S中找出一個切分方案S,使得P(S|C)的值
最大。


• P(S|C)就是由字元串C產生切分S的概率,也就是對輸入字元串切分出最有可能的
詞序列

 

例子:

• 例如:對於輸入字元串C“南京市長江大橋”,有下麵兩種切分可能:
      – S1:南京市 / 長江 / 大橋
      – S2:南京 / 市長 / 江大橋
• 這兩種切分方法分別叫做S1和S2。計算條件概率P(S1|C)和P(S2|C),然後根據
P(S1|C)和P(S2|C)的值來決定選擇S1還是S2。


• P(C)是字串在語料庫中出現的概率。比如說語料庫中有1萬個句子,其中有一句
是 “南京市長江大橋”那麼P(C)=P(“南京市長江大橋”)=萬分之一。


• 因為P(C∩S) = P(S|C)*P(C) = P(C|S)*P(S),所以

 

 

• 貝葉斯公式:

 

• P(C)只是一個用來歸一化的固定值


• 另外:從詞串恢復到漢字串的概率只有唯一的一種方式,所以P(C|S)=1。


• 所以:比較P(S1|C)和P(S2|C)的大小變成比較P(S1)和P(S2) 的大小

 

 

 

• 因為P(S1)=P(南京市,長江,大橋)=P(南京市)*P(長江)*P(大橋) > P(S2)=P(南京,市
長,江大橋),所以選擇切分方案S1

 

 例子三:

• 為了容易實現,假設每個詞之間的概率是上下文無關的,則:

 

• 其中,P(w) 就是這個詞出現在語料庫中的概率。因為函數y=log(x),當x增大,
y也會增大,所以是單調遞增函數。∝是正比符號。因為詞的概率小於1,所以取
log後是負數。


• 最後算 logP(w)。取log是為了防止向下溢出,如果一個數太小,例如0.000000000000000000000000000001 可能會向下溢出。

• 如果這些對數值事前已經算出來了,則結果直接用加法就可以得到,而加法比乘法速度更快。

六、一元模型

 

• 對於不同的S,m的值是不一樣的,一般來說m越大,P(S)會越小。也就是說,分出的詞越多,概率越小。

 

 

七、N元模型

 

• 假設在日本,[和服]也是一個常見的詞。按照一元概率分詞,可能會把“產品和服務”分成[產品][和服][務]。為了切分更準確,要考慮詞所處的上下文

• 給定一個詞,然後猜測下一個詞是什麼。當我說“NBA”這個詞時,你想到下
一個詞是什麼呢?我想大家有可能會想到“籃球”,基本上不會有人會想到“足
球”吧。


• 之前為了簡便,所以做了“前後兩詞出現概率是相互獨立的”的假設在實際中是
不成立的

 

 

• N元模型使用n個單片語成的序列來衡量切分方案的合理性:


• 估計單詞w1後出現w2的概率。根據條件概率的定義:    

 

 

 


• 可以得到:P(w1,w2)= P(w1)P(w2|w1)


• 同理:P(w1,w2,w3)= P(w1,w2)P(w3|w1,w2)


• 所以有:P(w1,w2,w3)= P(w1)P(w2|w1)P(w3|w1,w2)


• 更加一般的形式:


• P(S)=P(w1,w2,...,wn)= P(w1)P(w2|w1)P(w3|w1,w2)…P(wn|w1w2…wn-1)
• 這叫做概率的鏈規則。

 

 

八、Jieba分詞簡介

• 源碼下載的地址:https://github.com/fxsjy/jieba


• 支持三種分詞模式
         – 精確模式:將句子最精確的分開,適合文本分析
         – 全模式:句子中所有可以成詞的詞語都掃描出來,速度快,不能解決歧義
         – 搜索引擎模式:在精確模式基礎上,對長詞再次切分,提高召回


• 支持繁體分詞


• 支持自定義字典

 

• 基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成
的有向無環圖(DAG)


• 採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合
• 對於未登錄詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法

九、Jieba分詞細節

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天安裝軟體nginx的時候遇到的報錯:c compiler cc is not found 查了下網上的資料,解決方案也不複雜。 先說明下環境: - 伺服器:CentOS 7 - nginx:2.3.1 原因是因為缺少 gcc-c++ 的包 解決辦法很簡單,執行:yum... ...
  • ucore Lab2 lab 2 直接執行 會顯示 assert 失敗: 1 連續物理記憶體管理 1.1 page 概覽 對物理記憶體的管理,為了節省空間,也是為了配合接下來的虛擬記憶體管理,通常以某個比 byte 大一些的單位進行管理,我們稱這一單位記憶體為一" 頁(page) ",通常是 4KB.待 初 ...
  • 乙太網的發明:pc之間文件共用的情況出現 一層:物理層 網卡硬體設備:MAC地址 HUB 集線器 匯流排型結構 泛洪 廣播域/衝突域 二層 早期pc間只需要MAC地址,就可以互相共用,數據轉發 網橋--交換機 維護MAC地址表 三層:網路層 隨著網路增大,需要接入網路的設備越來越多;這時候,產生了邏輯 ...
  • 一、刪除自帶的JDK 查詢系統自帶JDK rpm -qa | grep java rpm -qa | grep jdk 刪除查詢出來的文件名 rpm -e --nodeps 文件名 命令執行成功後重新執行查看JDK命令,查看是否成功刪除。 二、安裝JDK並部署環境 https://www.oracl ...
  • 直接上碼供參考 關鍵點說明: 1.清理windows訪問記錄,包含在任務欄上右鍵出現最近訪問的程式的記錄%UserProfile%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations%UserProfile%\AppData\ ...
  • 借鑒:https://www.cnblogs.com/shijingjing07/p/9301590.html ...
  • u8 key_return = NO_KEY; u8 key_tmp = NO_KEY; u8 key_lock = 0;//按鍵自鎖標誌,自己加的 if (key_val == NO_KEY || key_val != key_ctl.key_val) //按鍵沒有按下或者本次按鍵與上一次按鍵不相 ...
  • 條件判斷: [ condition ],condition前後都有空格 常用的判斷條件: 1)兩個整數的比較 = 字元串比較 -lt 小於 -le 小於等於 -eq 等於 -gt 大於 -ge 大於等於 -ne 不等於 2)按照文件許可權進行判斷 -r有讀的許可權 -w有寫的許可權 -x有執行的許可權 3) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...