【NLP】 9. 处理创造性词汇 词组特征(Creative Words Features Model), 词袋模型处理未知词,模型得分

news/2025/3/20 0:00:20/

处理创造性词汇 & 词组特征(Creative Words & Features Model), 词袋模型处理未知词,模型得分

  • 处理创造性词汇 & 词组特征(Creative Words & Features Model)
        • 1. 处理否定(Negation Handling)
        • 2. 词组特征(Bigrams & N-grams)
        • 3. 结合否定传播与 n-grams 进行优化
  • 词袋模型(Bag-of-Words, BoW)
        • 1. BoW 示例
        • 2. 处理未知词
        • 3. 为什么忽略未知词?
        • 4. 处理未知词的方法
  • 计算模型得分(Score Calculation)

处理创造性词汇 & 词组特征(Creative Words & Features Model)

在 NLP 任务(如情感分析、文本分类)中,我们不仅要考虑单个词,还要考虑词的组合(n-grams),以及如何处理否定(negation)等特殊情况,以提高模型的理解能力。

1. 处理否定(Negation Handling)

问题:简单的情感分析模型可能会忽略否定词的影响。例如:

  • 句子:“I love this place” → 可能被分类为正向情感。
  • 句子:“I don’t love this place” → 由于 “love” 是正面词,可能仍然被误判为正向情感,但实际上应该是负向情感。

解决方案:否定传播(Negation Propagation) 一种方法是在否定词后面的词前加上 “NOT_”,直到遇到标点符号。

示例 1(单层否定)

  • 原句:“I don’t recommend this restaurant at all.”
  • 转换后:“I don’t NOT_recommend NOT_this NOT_restaurant NOT_at NOT_all.”

效果:模型不会错误地把 “recommend” 视为正向词,而是识别出它受到了否定的影响。

示例 2(双重否定)

  • 原句:“She didn’t dislike the movie.” (实际上表达的是喜欢这个电影)
  • 转换后:“She didn’t NOT_dislike NOT_the NOT_movie.”

挑战:单纯加 “NOT_” 可能导致错误理解,因此在这种情况下,可能需要更高级的依存解析(Dependency Parsing)来判断句子实际表达的情感。

2. 词组特征(Bigrams & N-grams)

除了单个词(unigram),我们还可以使用双词组(bigram)、三词组(trigram)来捕捉更丰富的语义信息。

示例 1(双词组 - bigram)

  • 原句:“The coffee is incredibly strong”
  • Bigram 生成:
    • The_coffee
    • coffee_is
    • is_incredibly
    • incredibly_strong

效果:相比单独的 “strong”,“incredibly_strong” 更能表达强烈的正向情感。

示例 2(情感分析中的 bigram)

  • 原句:“The service is not great at all.”
  • Bigram 生成:
    • The_service
    • service_is
    • is_NOT (保留否定信息)
    • NOT_great
    • great_at
    • at_all

效果:因为包含 “is_NOT” 和 “NOT_great”,模型更容易识别该句子的负面情感,而不仅仅是依赖单个 “great”。

示例 3(带否定传播的 bigram)

  • 原句:“I don’t think this hotel is amazing.”
  • 转换后:“I don’t NOT_think NOT_this NOT_hotel NOT_is NOT_amazing.”
  • Bigram 生成:
    • I_don’t
    • don’t_NOT_think
    • NOT_think_NOT_this
    • NOT_this_NOT_hotel
    • NOT_hotel_NOT_is
    • NOT_is_NOT_amazing

效果:模型可以学会识别 “NOT_amazing” 这种特征,避免误判该句子为正面情感。

3. 结合否定传播与 n-grams 进行优化

在实际 NLP 任务中,常见的做法是:

  • 应用否定传播(添加 “NOT_” 标记)。
  • 使用 n-grams(如 bigram/trigram),让模型更好地理解上下文。
  • 结合机器学习或深度学习模型(如 LSTM、BERT),利用更复杂的上下文信息。

词袋模型(Bag-of-Words, BoW)

BoW 是 NLP 中一种简单但有效的文本表示方法,它将文本转换为词频(word counts)**或**词向量(word vectors),但 不考虑词序

1. BoW 示例

例如:

  • 句子 1:“I love this movie”
  • 句子 2:“This movie is amazing”

BoW表示:

{"I": 1, "love": 1, "this": 2, "movie": 2, "is": 1, "amazing": 1}

每个词汇都会被映射为它在文本中出现的次数(词频)。

2. 处理未知词

当遇到训练集中没有出现过的词(即未知词,unknown words),BoW 通常直接忽略它们,因为它们不在预定义的词汇表(vocabulary)中。

示例 1(未知词被忽略)

  • 训练集的词汇表["I", "love", "this", "movie", "is", "amazing"]
  • 测试句子:“I really love this old movie”

“really” 和 “old” 在训练集词汇表中不存在,因此它们被忽略:

{"I": 1, "love": 1, "this": 1, "movie": 1}

示例 2(金额作为未知词被忽略)

  • 句子:“That will be $12523.22 please”

由于 “$12523.22” 可能不在训练集的词汇表中,它被当作未知词(unknown token),并不计数。最终的词频向量可能是:

{"That": 1, "will": 1, "be": 1, "please": 1}
3. 为什么忽略未知词?
  • BoW 依赖词汇表,未知词无法转换为向量,通常会被忽略。
  • 减少噪声:某些数值(如金额、时间)可能对 NLP 任务(如情感分析)无关紧要。
  • 简化计算:省略未知词可以减少计算成本,避免词表过大导致模型效率下降。
4. 处理未知词的方法

虽然 BoW 直接忽略未知词,但现代 NLP 方法可以更好地处理:

  1. 使用特殊标记(UNK Token):
    • 例如,将所有未知词替换为 "<UNK>",使模型仍然能学习到它们的位置影响。
  2. 使用子词(Subword Tokenization):
    • 例如 WordPiece、Byte Pair Encoding(BPE)、SentencePiece,可以拆分 “ 12523.22 " 为 [ " 12523.22 " 为 [" 12523.22"["”, “12523”, “.”, “22”],从而保留部分信息。
  3. 使用预训练词向量(如 Word2Vec, GloVe, BERT):
    • 这些方法可以通过相似词的关系推测出未知词的意义。

计算模型得分(Score Calculation)

在处理 NLP 任务时,计算一个模型的得分是常见的做法。常见的计算方法是将每个特征的计数值与其对应的权重值相乘,然后求和。

得分计算公式
score = ∑ f ∈ features ( count f × weight f ) \text{score} = \sum_{f \in \text{features}} (\text{count}_f \times \text{weight}_f) score=ffeatures(countf×weightf)
其中:

  • score:模型的最终得分。
  • features:特征的集合,模型使用的数据特征。
  • count_f:特征 f 的计数值,通常指的是特征在样本中出现的次数。
  • weight_f:与特征 f 相关的权重值,通常由模型学习得到,表示特征的重要性或影响力。

通过这种方式,模型使用每个特征的计数和权重来生成一个最终的得分,用于分类或回归任务中的预测。

通常在这种模型中,也会加入一个偏置权重(bias weight),用于在预测中对某个标签进行偏向,或者作为常数项来调整模型的输出。

这种方法也适用于 线性模型,例如逻辑回归和线性回归等。


http://www.ppmy.cn/news/1580452.html

相关文章

Go语言--语法基础3--变量常量运算符--变量

1、变量 变量是几乎所有编程语言中最基本的组成元素。从根本上说&#xff0c;变量相当于是对一块数据存储空间的命名&#xff0c;程序可以通过定义一个变量来申请一块数据存储空间&#xff0c;之后可以通过引用变量名来使用这块存储空间。Go 语言中的变量使用方式与 C 语言接近…

CBNet:一种用于目标检测的复合骨干网架构之论文阅读

摘要 现代顶级性能的目标检测器在很大程度上依赖于骨干网络&#xff0c;而骨干网络的进步通过探索更高效的网络结构带来了持续的性能提升。本文提出了一种新颖且灵活的骨干框架——CBNet&#xff0c;该框架利用现有的开源预训练骨干网络&#xff0c;在预训练-微调范式下构建高…

使用DeepSeek制作可视化图表和流程图

用DeepSeek来制作可视化图表&#xff0c;搭配python、mermaid、html来实现可视化&#xff0c;我已经测试过好几种场景&#xff0c;都能实现自动化的代码生成&#xff0c;效果还是不错的&#xff0c;流程如下。 统计图表 &#xff08;搭配Matplotlib来做&#xff09; Python中的…

【QT:文件操作】

在Qt中&#xff0c;⽂件读写的类为QFile。QFile的⽗类为QFileDevice&#xff0c;QFileDevice提供了⽂件交互操作的 底层功能。QFileDevice的⽗类是QIODevice&#xff0c;QIODevice的⽗类为QObject。 QIODevice是Qt中所有输入输出设备的基础类&#xff0c;i/o设备就是能够进行数…

ctfshow-萌新赛刷题笔记

1. 给她 启动靶机&#xff0c;发现是sql注入&#xff0c;尝试后发现被转义\&#xff0c;思路到这里就断了&#xff0c;再看题目给她&#xff0c;想到git.有可能是.git文件泄露&#xff0c;dirsearch扫描一下果然是&#xff0c;用GitHack看一下git备份文件&#xff0c;得到hint…

R语言入门课| 02 R及Rstudio的下载与安装

视频教程 先上教程视频&#xff0c;B站同步播出&#xff1a; https://www.bilibili.com/video/BV1miNVeWEkw 完整视频回放可见&#xff1a;R语言入门课回放来啦 "R语言入门课"是我们认为生信小白入门不得不听的一个课程&#xff0c;我们也为这个课程准备了许多干…

C#通过API接口返回流式响应内容---SignalR方式

1、背景 在上两篇《C#通过API接口返回流式响应内容—分块编码方式》和《C#通过API接口返回流式响应内容—SSE方式》实现了流式响应的内容。 上面的这两个主要是通过HTTP的一些功能&#xff0c;除了这些之外&#xff0c;还有WebSocket的方式。C#中的WebSocket的有比较多的方案&…

Qt6.8实现麦克风音频输入音频采集保存wav文件

一.本文目的 实现在Qt中接收麦克风数据并保存为WAV文件,使用QAudioInput来录音,并使用QFile来保存数据到WAV文件。 开发环境:QT6.8 本文用极简代码实现,核心代码只需不到100行。 二.代码实现