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.mzph.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指令表要复杂很多。此处假设每个…