🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹
在自然语言处理(NLP)任务中,文本预处理是至关重要的一步。
未经处理的原始文本通常杂乱无章,无法直接用于机器学习模型。
通过一系列预处理步骤,文本被转化为规范化的数据格式,从而满足模型输入的要求。
此外,科学的文本预处理还能够有效指导模型超参数的选择,提升模型的评估指标,进而增强整体性能。
本文主要内容:
1. 文本处理的基本方法
2. 文本张量表示方法
3. 文本语料的数据分析
4. 文本特征处理
5. 数据增强方法
在实际生产应用中,我们最常使用的两种语言是中文和英文,因此文本预处理部分的内容都将针对这两种语言进行讲解。
定义:将连续的文本序列分割成词语序列,是文本预处理的第一步,特别是在中文中。
方法:
数学表示:
令
T
T
T 为输入的文本序列,
w
1
,
w
2
,
…
,
w
n
w_1, w_2, \ldots, w_n
w1,w2,…,wn 为分词结果;
分词过程可以表示为:
T
→
{
w
1
,
w
2
,
…
,
w
n
}
T \rightarrow \{w_1, w_2, \ldots, w_n\}
T→{w1,w2,…,wn}
定义:为每个词语标注其词性(如名词、动词、形容词等)。
方法:
数学表示:
令
w
i
w_i
wi 为词语,
t
i
t_i
ti 为对应的词性标签
词性标注过程可以表示为:
{
w
1
,
w
2
,
…
,
w
n
}
→
{
(
w
1
,
t
1
)
,
(
w
2
,
t
2
)
,
…
,
(
w
n
,
t
n
)
}
\{w_1, w_2, \ldots, w_n\} \rightarrow \{(w_1, t_1), (w_2, t_2), \ldots, (w_n, t_n)\}
{w1,w2,…,wn}→{(w1,t1),(w2,t2),…,(wn,tn)}
定义:识别并分类文本中的实体,如人名、地名、组织名等。
方法:
数学表示:
令
T
T
T 为输入的文本序列,
E
E
E 为命名实体的集合。
N
E
R
NER
NER 过程可以表示为:
T
→
{
E
1
,
E
2
,
…
,
E
m
}
T \rightarrow \{E_1, E_2, \ldots, E_m\}
T→{E1,E2,…,Em}
定义:将每个词表示为一个高维向量,其中只有一个位置为1,其他位置为0。
方法:
数学表示:
令
V
V
V 为词汇表,
∣
V
∣
|V|
∣V∣ 为词汇表的大小
对于词语
w
i
w_i
wi 的 One-Hot 编码可以表示为:
OneHot
(
w
i
)
=
[
0
,
0
,
…
,
1
,
…
,
0
]
\text{OneHot}(w_i) = [0, 0, \ldots, 1, \ldots, 0]
OneHot(wi)=[0,0,…,1,…,0]
其中,只有第
i
i
i 个位置为1,其余位置为0。
定义:通过神经网络将词语映射到低维向量空间,捕捉词语的语义相似性。
方法:
数学表示:
令
w
w
w 为目标词,
C
(
w
)
C(w)
C(w) 为上下文词的集合。
S
k
i
p
Skip
Skip-
g
r
a
m
gram
gram 模型的目标是最大化以下概率:
∏
w
∈
Corpus
∏
c
∈
C
(
w
)
P
(
c
∣
w
)
\prod_{w \in \text{Corpus}} \prod_{c \in C(w)} P(c|w)
∏w∈Corpus∏c∈C(w)P(c∣w)
这个公式是表示累积
其中, P ( c ∣ w ) P(c|w) P(c∣w) 是通过 s o f t m a x softmax softmax 函数计算的:
P ( c ∣ w ) = exp ( v c ⋅ v w ) ∑ i = 1 ∣ V ∣ exp ( v i ⋅ v w ) P(c|w) = \frac{\exp(v_c \cdot v_w)}{\sum_{i=1}^{|V|} \exp(v_i \cdot v_w)} P(c∣w)=∑i=1∣V∣exp(vi⋅vw)exp(vc⋅vw)
所以表示为: ∏ w ∈ Corpus ∏ c ∈ C ( w ) exp ( v c ⋅ v w ) ∑ i = 1 ∣ V ∣ exp ( v i ⋅ v w ) \prod_{w \in \text{Corpus}} \prod_{c \in C(w)} \frac{\exp(v_c \cdot v_w)}{\sum_{i=1}^{|V|} \exp(v_i \cdot v_w)} ∏w∈Corpus∏c∈C(w)∑i=1∣V∣exp(vi⋅vw)exp(vc⋅vw)
定义:通过深度学习模型(如
G
l
o
V
e
GloVe
GloVe、
F
a
s
t
T
e
x
t
FastText
FastText)训练的词向量,能够捕捉词语的复杂语义关系。
数学表示:
令
W
W
W 为词汇表,
d
d
d 为词向量的维度。
词嵌入过程可以表示为将每个词
w
w
w 映射到一个
d
d
d 维向量
v
w
v_w
vw:
w
→
v
w
∈
R
d
w \rightarrow v_w \in \mathbb{R}^d
w→vw∈Rd
定义:分析数据集中各类标签的数量分布,评估数据的平衡性。
方法:
数学表示:
令
y
y
y 为标签,
n
(
y
)
n(y)
n(y) 为标签
y
y
y 在数据集中出现的次数
标签数量分布可以表示为:
{
(
y
1
,
n
(
y
1
)
)
,
(
y
2
,
n
(
y
2
)
)
,
…
,
(
y
k
,
n
(
y
k
)
)
}
\{(y_1, n(y_1)), (y_2, n(y_2)), \ldots, (y_k, n(y_k))\}
{(y1,n(y1)),(y2,n(y2)),…,(yk,n(yk))}
定义:分析数据集中句子的长度分布,了解数据的整体结构。
方法:
数学表示:
令
s
s
s 为句子,
l
(
s
)
l(s)
l(s) 为句子
s
s
s 的长度。
句子长度分布可以表示为:
{
(
s
1
,
l
(
s
1
)
)
,
(
s
2
,
l
(
s
2
)
)
,
…
,
(
s
n
,
l
(
s
n
)
)
}
\{(s_1, l(s_1)), (s_2, l(s_2)), \ldots, (s_n, l(s_n))\}
{(s1,l(s1)),(s2,l(s2)),…,(sn,l(sn))}
定义:统计词语在数据集中出现的频率,生成关键词词云,帮助识别重要词语。
方法:
数学表示:
令
w
w
w 为词语,
f
(
w
)
f(w)
f(w) 为词语
w
w
w 在数据集中出现的频率。
词频统计可以表示为:
{
(
w
1
,
f
(
w
1
)
)
,
(
w
2
,
f
(
w
2
)
)
,
…
,
(
w
m
,
f
(
w
m
)
)
}
\{(w_1, f(w_1)), (w_2, f(w_2)), \ldots, (w_m, f(w_m))\}
{(w1,f(w1)),(w2,f(w2)),…,(wm,f(wm))}
定义:将相邻
n
n
n 个词作为一个特征,捕捉局部词组信息。
方法:使用 Python 库(如
s
c
i
k
i
t
scikit
scikit-
l
e
a
r
n
learn
learn)生成
n
n
n-gram 特征。
数学表示:
令
T
T
T 为文本序列,
w
i
w_i
wi 为词语。
n
n
n-gram 特征可以表示为:
{
(
w
i
,
w
i
+
1
,
…
,
w
i
+
n
−
1
)
}
\{(w_i, w_{i+1}, \ldots, w_{i+n-1}) \}
{(wi,wi+1,…,wi+n−1)}
定义:规范文本长度,以确保输入张量的一致性。
方法:截断或填充文本,使其达到固定长度。
数学表示:
令
T
T
T 为文本序列,
L
L
L 为固定长度
规范文本长度可以表示为:
T
→
T
′
T \rightarrow T'
T→T′
其中,
T
′
T'
T′ 为长度为
L
L
L 的文本序列。
回译数据增强法:
定义:通过将文本翻译成另一种语言再翻译回来,生成新的变体。
方法:使用机器翻译工具(如
G
o
o
g
l
e
Google
Google
T
r
a
n
s
l
a
t
e
Translate
Translate
A
P
I
API
API)进行回译。
数学表示:
令
T
T
T 为原始文本,
T
′
;
T';
T′; 为回译后的文本
回译过程可以表示为:
T
→
T
′
T \rightarrow T'
T→T′
通过这些预处理步骤,我们可以有效提升文本数据的质量,从而提高后续模型的性能和效果。
文本预处理不仅是NLP的基础环节,也是提升模型效果的重要手段。
每一步预处理都需要根据具体任务和数据特点进行调整和优化,以达到最佳效果。