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

这里写目录标题

  • [处理创造性词汇 & 词组特征(Creative Words & Features Model)](#处理创造性词汇 & 词组特征(Creative Words & Features Model))
        • [1. 处理否定(Negation Handling)](#1. 处理否定(Negation Handling))
        • [2. 词组特征(Bigrams & N-grams)](#2. 词组特征(Bigrams & N-grams))
        • [3. 结合否定传播与 n-grams 进行优化](#3. 结合否定传播与 n-grams 进行优化)
  • [词袋模型(Bag-of-Words, BoW)](#词袋模型(Bag-of-Words, BoW))
        • [1. BoW 示例](#1. BoW 示例)
        • [2. 处理未知词](#2. 处理未知词)
        • [3. 为什么忽略未知词?](#3. 为什么忽略未知词?)
        • [4. 处理未知词的方法](#4. 处理未知词的方法)
  • [计算模型得分(Score Calculation)](#计算模型得分(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=f∈features∑(countf×weightf)

其中:

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

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

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

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

相关推荐
helloworld工程师12 分钟前
Manus 一码难求,MetaGPT、OpenManus、Camel AI 会是替代方案吗?
人工智能
江江江江江江江江江20 分钟前
注意力机制:让AI拥有黄金七秒记忆的魔法--(注意力机制中的Q、K、V)
人工智能·pytorch·深度学习
QQ_77813297420 分钟前
《蓝耘容器全栈技术指南:企业级云原生与异构计算实战大全》
人工智能·scipy
欣然~26 分钟前
手搓智能音箱——语音识别及调用大模型回应
人工智能·语音识别
weixin_4082663431 分钟前
深度学习-服务器训练SparseDrive过程记录
服务器·人工智能·深度学习
有杨既安然1 小时前
基于传感器数据的城市空气质量预测与污染源分类
人工智能·分类·数据挖掘
胡耀超1 小时前
Xinference大模型配置介绍并通过git-lfs、hf-mirror安装
人工智能·git·python·大模型·llm·xinference
Honeysea_701 小时前
常用的Python库
开发语言·python·机器学习·计算机视觉·ai·自然语言处理
天行者@2 小时前
卷积神经网络(笔记02)
笔记·深度学习·cnn