这里写目录标题
- [处理创造性词汇 & 词组特征(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 方法可以更好地处理:
- 使用特殊标记(UNK Token):
- 例如,将所有未知词替换为
"<UNK>"
,使模型仍然能学习到它们的位置影响。
- 例如,将所有未知词替换为
- 使用子词(Subword Tokenization):
- 例如 WordPiece、Byte Pair Encoding(BPE)、SentencePiece ,可以拆分 " 12523.22 " 为 [ " 12523.22 " 为 [" 12523.22"为["", "12523", ".", "22"],从而保留部分信息。
- 使用预训练词向量(如 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),用于在预测中对某个标签进行偏向,或者作为常数项来调整模型的输出。
这种方法也适用于 线性模型,例如逻辑回归和线性回归等。