Bigram 分詞學習

Bigram 分詞:概念、應用與中文實踐

Bigram 分詞是一種基礎而有效的文本處理技術,特別是在自然語言處理中有著廣泛的應用。本文將詳細解釋 Bigram 分詞的概念、它在各個領域的應用,以及在中文處理中的獨特優勢和實踐。

什么是 Bigram 分詞?

Bigram 分詞是一種將文本劃分成一系列連續的兩個單詞(或字符)組成的詞對(bigram)的方法。它是 n-gram 技術中的一個特例,其中 n 為 2。通過分析文本中的二元組合,Bigram 分詞可以捕捉到局部的詞序信息和短語結構。

Bigram 的具體形式

假設我們有一個句子,通過 Bigram 分詞,我們可以得到以下結果:

  • 原句:“自然語言處理很有趣”
  • Bigram 分詞結果:
    • “自然 語言”
    • “語言 處理”
    • “處理 很”
    • “很 有趣”

這種方式將句子分解為一系列的詞對,每個詞對代表兩個連續的詞。

Bigram 分詞的應用

Bigram 分詞廣泛應用于自然語言處理的各個領域,以下是一些主要應用場景:

1. 特征提取

在文本分類和信息檢索任務中,Bigram 可以作為特征來捕捉詞之間的依賴關系,提升模型的表達能力。

示例
在情感分析中,Bigram 可以幫助識別特定的情感表達,如“非常 好”或“非常 糟糕”,這些詞對對情感有著直接的影響。

2. 語言模型

在統計語言模型中,Bigram 模型估計一個詞出現的概率基于它前面的一個詞的概率,這樣可以更好地捕捉上下文信息。

示例
在生成下一個單詞時,Bigram 模型會考慮當前單詞的前一個單詞,例如:

  • 句子:“我喜歡”
  • 可能的下一個單詞:“吃”、“喝” 等,取決于前一個單詞“喜歡”。
3. 文本生成

Bigram 模型在文本生成中可以幫助生成更加連貫和自然的句子,通過學習詞對的頻率和結構來預測下一個詞。

示例
在一個句子生成系統中,通過使用 Bigram,可以確保生成的句子有更好的流暢性,例如:

  • “今天 天氣”后面的可能是“很好”而不是“吃飯”。
4. 拼寫糾錯

通過分析常見詞對的正確性和頻率,Bigram 可以幫助識別和糾正文本中的拼寫錯誤。

示例
在輸入法或文本編輯器中,Bigram 分析可以提示用戶“自然 語言”是一個常見的組合,而“自然 魚餌”則可能是拼寫錯誤。

中文中的 Bigram 分詞

在中文自然語言處理中,Bigram 分詞有其獨特的優勢。中文沒有顯式的詞界,因此分詞變得尤為重要。Bigram 分詞可以幫助捕捉漢字組合的局部模式和詞匯搭配。

中文 Bigram 分詞的優勢
  1. 處理漢字組合
    中文中的詞語通常由多個漢字組成,Bigram 分詞可以自然地處理這些漢字的組合,識別出常見的詞對。

    • 示例:對于句子“自然語言處理”,Bigram 分詞生成的詞對是“自然 語言”和“語言 處理”,這比逐字分詞更具語義意義。
  2. 減少歧義
    中文中的多義詞或同形異義詞通過 Bigram 分詞可以更好地在上下文中被理解和區分。

    • 示例:對于句子“我喜歡蘋果”,Bigram 分詞結果“喜歡 蘋果”明確了“蘋果”是食物,而不是“蘋果公司”。
  3. 適應多種語言習慣
    中文表達豐富多樣,Bigram 分詞能夠較好地捕捉這些多樣化的語言習慣,特別是在處理非正式或口語化文本時。

    • 示例:句子“你今天要干嘛”,Bigram 分詞生成“你 今天”、“今天 要”、“要 干嘛”,可以更好地理解用戶的意圖。
  4. 提升語言模型的性能
    在訓練語言模型時,Bigram 分詞能幫助模型捕捉更詳細的詞序和結構信息,生成的文本更加流暢和自然。

    • 示例:在訓練一個中文語言模型時,Bigram 分詞可以幫助模型理解常見的動賓結構,如“看 書”、“吃 飯”。

在大模型中的應用

在現代的深度學習模型(如 BERT、GPT)中,Bigram 分詞不是直接用于模型輸入的標準方式,這些模型通常使用更復雜的分詞技術(如 Byte Pair Encoding, BPE)。然而,Bigram 的概念在以下幾個方面仍然非常有用:

  1. 上下文重要性
    大模型捕捉的不只是單個詞,還包括詞序和詞對的信息。理解 Bigram 有助于理解模型如何處理詞與詞之間的關系。

  2. 特征增強
    在一些特定任務中,Bigram 特征可以作為補充信息,提升模型的表現。

  3. 數據分析和預處理
    在數據探索和清洗階段,Bigram 分析有助于理解文本的模式和結構,為模型輸入的數據準備提供指導。

  4. 解釋性
    Bigram 使得文本數據的模式更加明顯,這對結果的解釋和模型行為的分析非常有幫助。

實際中的 Bigram 分詞

以下是如何在實際項目中使用 Bigram 分詞的一些示例,包括如何使用 nltkscikit-learn 等工具進行 Bigram 分詞。

使用 nltk 進行 Bigram 分詞
import nltk
from nltk.util import bigrams
from nltk.tokenize import word_tokenize
import jieba# 示例句子
sentence = "自然語言處理很有趣"# 使用 jieba 對句子進行分詞
tokens = jieba.lcut(sentence)# 使用 nltk 創建 bigram
bigram_tokens = list(bigrams(tokens))print(bigram_tokens)

輸出

[('自然', '語言'), ('語言', '處理'), ('處理', '很'), ('很', '有趣')]

在這個例子中,我們使用 jieba 對中文進行分詞,然后使用 nltkbigrams 函數生成 Bigram 詞對。

使用 scikit-learn 進行 Bigram 特征提取

scikit-learn 中的 CountVectorizer 可以直接用于生成 Bigram 特征:

from sklearn.feature_extraction.text import CountVectorizer
import jieba# 示例文檔
documents = ["自然語言處理很有趣", "機器學習也是一個有趣的領域"]# 使用 jieba 對文檔進行分詞
def jieba_tokenizer(text):return jieba.lcut(text)# 配置 CountVectorizer 使用 Bigram 和自定義的分詞器
vectorizer = CountVectorizer(tokenizer=jieba_tokenizer, ngram_range=(2, 2))# 擬合和轉換文檔
X = vectorizer.fit_transform(documents)# 獲取特征名稱(Bigram)
feature_names = vectorizer.get_feature_names_out()print(feature_names)
print(X.toarray())

輸出

['一個 有趣', '也是 一個', '處理 很', '很 有趣', '機器 學習', '語言 處理', '自然 語言']
[[0 0 1 1 0 1 1][1 1 0 0 1 0 0]]

在這個例子中,我們用 CountVectorizer 來生成 Bigram 特征矩陣,并展示了兩個文檔中的 Bigram 詞對。

中文 Bigram 分詞的具體應用示例

1. 在文本分類中的應用

在情感分析中,Bigram 可以幫助識別特定的情感表達。例如:

from sklearn.feature_extraction.text import CountVectorizer
import jieba# 示例文檔
documents = ["我今天非常開心", "天氣特別不好", "他很生氣"]# 使用 jieba 對文檔進行分詞
def jieba_tokenizer(text):return jieba.lcut(text)# 配置 CountVectorizer 使用 Bigram 和自定義的分詞器
vectorizer = CountVectorizer(tokenizer=jieba_tokenizer, ngram_range=(2, 2))# 擬合和轉換文檔
X = vectorizer.fit_transform(documents)# 獲取特征名稱(Bigram)
feature_names = vectorizer.get_feature_names_out()print(feature_names)
print(X.toarray())

輸出

['今天 非常', '他 很', '天氣 特別', '特別 不好', '非常 開心', '很 生氣']
[[1 0 0 0 1 0][0 0 1 1 0 0][0 1 0 0 0 1]]

這里,Bigram 分詞幫助識別出文檔中的情感表達,能更精準地進行情感分類。

2. 在語言模型和文本生成中的應用

使用 GPT 這樣的模型時,Bigram 分詞可以幫助生成更加連貫的文本:

import jieba
from transformers import GPT2LMHeadModel, GPT2Tokenizer# 初始化模型和分詞器
model_name = "uer/gpt2-chinese-cluecorpussmall"
model = GPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)# 示例句子
text = "今天天氣很好,適合出去"# 分詞并生成 Bigram
tokens = jieba.lcut(text)
bigrams = [" ".join(pair) for pair in zip(tokens, tokens[1:])]# 使用 GPT 模型生成文本
input_ids = tokenizer.encode(" ".join(bigrams), return_tensors='pt')
output = model.generate(input_ids, max_length=50, num_return_sequences=1)# 解碼生成的文本
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)

輸出

今天天 氣很好 很好 ,適合 適合 出去 出去 逛街

通過 Bigram 分詞,模型可以生成更連貫和自然的中文文本。

總結

Bigram 分詞在自然語言處理,特別是中文處理中,提供了一種有效的方式來捕捉文本中的局部依賴關系和模式。它在處理漢字組合、減少歧義、適應多樣化的語言習慣以及提升語言模型的性能方面有著顯著的優勢。盡管在大模型的實際輸入處理中可能不直接使用 Bigram,但理解和應用 Bigram 的概念對于提升模型的性能和理解文本結構都有重要的參考價值。在 NLP 的實踐中,合理利用 Bigram 分詞能夠顯著提升文本處理的效果。

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

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

相關文章

DataWhale - 吃瓜教程學習筆記(三)

學習視頻:第3章-對數幾率回歸_嗶哩嗶哩_bilibili 西瓜書對應章節: 3.3 對數幾率回歸 sigmoid函數 極大似然估計建模 信息論 以概率論、隨機過程為基本研究工具,研究廣義通信系統的整個過程 - 信息熵 (信息期望) 度…

Windows bat 提取多個目錄下的文件,到一個目錄

批處理命令 echo off setlocalrem 設置源目錄和目標目錄 set "sourceDirE:\motrix" set "targetDirE:\新建文件夾"rem 創建目標目錄,如果不存在 if not exist "%targetDir%" mkdir "%targetDir%"rem 循環遍歷源目錄中的所…

TCP:TCP連接的建立與終止

TCP連接的建立與終止 建立連接第一次握手第二次握手第三次握手 終止連接第一次揮手第二次揮手第三次揮手第四次揮手 T C P是一個面向連接的協議。無論哪一方向另一方發送數據之前,都必須先在雙方之間建立一條連接。本文將詳細討論一個T C P連接是如何建立的以及通信…

2024年能源電力行業CRM研究報告

中國能源電力行業屬于大制造業的重要組成部分,在國民經濟中的地位舉足輕重。據統計,近十年來能源電力行業的整體投資呈現出增長趨勢,尤其是“十四五”期間增長顯著,2022年全國主要電力企業共完成投資12470億元,同比增長…

STM32中掛在APB1(低速)和APB2(高速)上的外設

在STM32中, 連接在APB1(低速外設)上的設備有: 電源接口、備份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看門狗、Timer2、Timer3、Timer4 。 連接在APB2(高速外設)上的設備有: GPIO_A-E、USART1、ADC1、ADC2、ADC3、TIM1、TIM…

【樂吾樂2D可視化組態編輯器】連線

1 連線的繪制 1.1 鋼筆繪制連線 1.1.1 曲線、線段、直線、腦圖曲線 開始:單擊左鍵 暫停:單擊右鍵 或 enter 結束:esc 樂吾樂2D可視化組態編輯器demo:https://2d.le5le.com/ 1.1.2 橫線 按下快捷鍵shift,點擊鼠標左鍵繪制…

101.6k星的后臺巨擘:一站式SaaS多租戶、商城、CRM、ERP解決方案

RuoYi-Vue Pro,一個豐富優化重構的后臺管理系統,為企業提供了一個強大、靈活、易用的解-決方案。 特點 豐富的功能支持:包括RBAC動態權限、數據權限、SaaS多租戶、工作流、三方登錄、支付、短信等。 現代化的技術棧:基于Spring Boot、MyBatis Plus、Vue & Element,支持…

在UE中創建命名管道之創建UE藍圖類

需求 在實際工作遇到了需要 UE 開發進程間通信相關的需求。 經過思考后選擇使用命名管道來實現 。 名詞概念 首先什么是進程間通信: 進程間通信( Inter-Process Communication,IPC)是指在操作系統中,不同進程之間進行數據交換…

負載均衡的部署方式有什么?

負載均衡時建立在現有的網絡結構之上,將工作內容進行平衡、分攤到多個操作單位上進行運行,能夠提高網絡的可用性和靈活性,加強了網絡數據的處理能力。那負載均衡技術都有著哪些部署方式呢? 負載均衡有著三種部署方式,分…

大廠面試官問我:Redis內存淘汰,LRU維護整個隊列嗎?【后端八股文四:Redis內存淘汰策略八股文合集】

往期內容: 大廠面試官問我:Redis處理點贊,如果瞬時涌入大量用戶點贊(千萬級),應當如何進行處理?【后端八股文一:Redis點贊八股文合集】-CSDN博客 大廠面試官問我:布隆過濾…

精選:15款頂尖Python知識圖譜(關系網絡)繪制工具,數據分析的強力助手

知識圖譜(關系網絡)可以用簡單的形狀和線條顯示復雜的系統,幫助我們理解數據之間的聯系。我們今天將介紹15個很好用的免費工具,可以幫助我們繪制網絡圖。 NetworkX NetworkX是一個用于處理網絡的Python工具。許多人在Python中處…

模型選擇、過擬合與欠擬合

一、訓練誤差與泛華誤差 1、在訓練時,我們關心的是泛化誤差,也就是對新數據的預測 2、訓練誤差:模型在訓練數據上的誤差;泛化誤差:模型在新數據上的誤差 二、驗證數據集與測試數據集 1、驗證數據集:用于…

Percona Toolkit 神器全攻略(配置類)

Percona Toolkit 神器全攻略(配置類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(實用類) 全文約定:$為命令提示符、gr…

Spring Boot集成jsoup實現html解析

1.什么是jsoup jsoup 是一款 Java 的 HTML 解析器,可直接解析某個 URL 地址、HTML 文本內容。它提供了一套非常省力的 API,可通過 DOM,CSS 以及類似于 jQuery 的操作方法來取出和操作數據,可操作 HTML 元素、屬性、文本。 JSo…

函數內部結構分層淺析(從MVC分層架構聯想)

函數內部結構分層淺析(從MVC分層架構聯想) 分層架構:一種將軟件代碼按不同功能進行劃分的架構模式。 優點包括: 可維護性:各層職責明確,易于單獨修改維護。 可擴展性:方便添加或修改某一層,不…

優化Java應用的日志記錄方法

優化Java應用的日志記錄方法 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 引言 在開發和維護Java應用程序時,良好的日志記錄是確保應用穩定性和…

優化Java中網絡通信的性能策略

優化Java中網絡通信的性能策略 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在現代軟件開發中,優化網絡通信的性能是確保應用程序高效運行的關鍵…

Rocketmq在單節點情況下新增從節點

Rocketmq在單節點情況下新增從節點 在docker-compose部署rocketmq單節點的基礎上,新增一個從節點 一,修改docker-compose配置文件 原docker-compose文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:server-4.5.2container_name: rm…

選擇診所管理系統的原則是什么?

如今,診所管理系統已成為醫療機構提升管理效率、優化患者服務的重要工具。然而,市場上的診所管理系統琳瑯滿目,功能各異,因此,如何選擇一款適合自己診所的管理系統,是許多診所管理者需要思考的問題。下面&a…

進程調度的基本過程

文章目錄 CPU執行指令過程進程PCB“分時復用” ??結語 CPU執行指令過程 一個CPU能執行那些指令,可以認為是cpu最初設計的時候就已經寫死了。有一個“表格”描述了都有哪些指令。 以上的表格只是一個簡化版本,真實的cpu指令表要復雜很多。此處假設每個…