NLP文本表示

深度解析:从词到文档的NLP向量表示
本文深入探讨了自然语言处理中词和文档的表示方法,包括词的稀疏和稠密向量表示,如word2vec、GloVe,以及文档的TF-IDF加权表示和神经网络提取的稠密向量表示。这些方法在理解和处理文本语义中起着关键作用。

1.语义表示

目前,语义表示的两种主要方式为基于符号的形式化系统和基于向量的语义表示。基于符号的语义表示有逻辑表达式和语义图等。
基于向量的语义表示适用于神经网络的输入,文本中的语义信息可以通过神经网络提取出来。并且能够直接用于神经网络的下游任务。缺点是,表示语义的向量难以被人类理解,缺乏可解释性。
而基于符号的形式化系统的语义表示具有良好的可解释性,能够很好地被人类解读,并且可以方便地依托符号知识库进行研究,可以进行精确的逻辑推理。缺点是符号语义表示难以具有统一的规范性,很难统一符号语义表示的形式,难以建立有效统一,适用性强的单一标准。并且,构建文本的符号表示的解析器相当困难。
本文主要以向量为主介绍语义表示。

2.词表示

词是文本的最小组成单位,如果能够用向量表示词,那么就可以进一步用向量表示语义。
对于词的向量表示,分为稀疏向量表示稠密向量表示两种主流类型。

2.1词的稀疏向量表示

2.1.1词-词共现矩阵

词的稀疏向量表示通过词-词共现矩阵实现。对于特定的词,词的上下文为在这个词前后出现的固定个数的词。这个词称之为中心词。词-词共现矩阵的元素表示,在该元素所在列的词的上下文里,该元素所在行的词的出现次数。词-词共现矩阵是一个对称矩阵。词-词共现矩阵的行或列,表现了一个词与其他词共同出现的次数的统计关系,实际上,反映了一个词与其他词共同出现的概率的多少。
词-词共现矩阵的一个潜在问题是,英语的定冠词‘the’和汉语中用于定语标记的助词‘的’频繁出现,使得这类词的共现统计失去意义,并且,远大于其他词出现次数的数值会影响其他词的向量表示。

2.1.2正点间互信息矩阵

解决这类问题的一种方案是根据词-词共现矩阵计算正点间互信息矩阵(PMI),再从正点间互信息矩阵中提取词的稀疏向量表示。
在词-词共现矩阵中,元素cijc{ij}cij 表示词 iii 和词 jjj 在给定上下文窗口内共现的次数。词频定义为词在整个语料中的出现次数。计算PMI需要计算每个词对 wi,wjw_i, w_jwi,wj 在整个语料中的联合概率 P(wi,wj)P(w_i, w_j)P(wi,wj) 和各自的边缘概率 P(wi)P(w_i)P(wi)P(wj)P(w_j)P(wj)。联合概率可以通过共现次数除以总的词对观察次数来估算,边缘概率可以通过词的总频数除以总的词数来估算。

  • 联合概率: P(wi,wj)=Cij/NP(w_i, w_j) = C{ij} / NP(wi,wj)=Cij/N,其中 N 是所有词对的共现次数之和。
  • 边缘概率: P(wi)=sum(C[i])/NP(w_i) = sum(C[i]) / NP(wi)=sum(C[i])/NP(wj)=sum(C[:,j])/NP(w_j) = sum(C[:,j]) / NP(wj)=sum(C[:,j])/N,分别是对 iii 列和 jjj 行的总和除以 N
    PMI 定义为:
    PMI(wi,wj)=log⁡(P(wi,wj)P(wi)P(wj)) PMI(w_i, w_j) = \log\left(\frac{P(w_i, w_j)}{P(w_i)P(w_j)}\right) PMI(wi,wj)=log(P(wi)P(wj)P(wi,wj))
    分子是联合概率,分母是两个边缘概率的乘积。
    当联合概率为0但边缘概率不为0时,公式计算所得可能为负,通常设定一个最小计数阈值来过滤掉稀有共现,并对负值或无穷大(对数为负数的情况)进行截断或平滑处理。

2.2 词的稠密向量表示

词的稠密向量表示,相比于词的稀疏向量表示而言,具有更低的维度,包含有更少的噪声,更容易泛化应用到新数据。词的稠密向量表示方法有很多,如Word2VEC、GloVe和上下文相关词嵌入等。

2.2.1word2vec

Word2VEC主要包括两种模型。连续词袋模型和跳字模型。
连续词袋模型的目标是通过上下文最大限度地预测中心词的精确度。
设中心词为wcw_cwc,上下文词集合为{wc−m,…,wc−1,wc+1,…,wc+m}\{w_{c-m}, …, w_{c-1}, w_{c+1}, …, w_{c+m}\}{wcm,,wc1,wc+1,,wc+m},其中
mmm是上下文窗口的大小。CBOW模型通过求上下文词向量的平均(或加权平均)来得到一个上下文表示,然后通过简单的线性变换和softmax函数对中心词的概率分布进行预测。
公式可表示为:
vc=12m∑j=c−mc+mvwj(对于非边界词)v_c = \frac{1}{2m} \sum_{j=c-m}^{c+m} v_{w_j} \quad \text{(对于非边界词)}vc=2m1j=cmc+mvwj(对于非边界词)
P(wc∣wc−m,…,wc+m)=softmax(vc⋅W)P(w_c | w_{c-m}, …, w_{c+m}) = \text{softmax}(v_c \cdot W)P(wcwcm,,wc+m)=softmax(vcW)
其中,vwjv_{w_j}vwj是上下文词wjw_jwj的词向量,vcv_cvc是得到的上下文向量,WWW是权重矩阵,softmax\text{softmax}softmax函数用于将线性变换的结果转化为概率分布。
跳字型与连续词袋模型相反。基本思想是最大化通过中心词预测上下文的准确性,即给定中心词,其上下文中词的条件概率尽可能大。
中心词的词向量通过词典矩阵WWW获得,可以表示为:
vwc=Wwcv_{w_c} = W_{w_c}vwc=Wwc
对于任一上下文词wow_owo,通过以下公式计算其条件概率:
P(wo∣wc)=softmax(vwc⋅vwo⊤)P(w_o | w_c) = \text{softmax}(v_{w_c} \cdot v_{w_o}^\top)P(wowc)=softmax(vwcvwo)
跳字模型的计算开销更大,但跳字模型在捕获罕见字的语义向量表示中表现更为出色。

2.2.2 GloVe

Glove将全局统计信息与局部上下文信息的优点相结合。旨在通过优化词与词之间共现频率的数学模型来得到高质量的词向量表示,通过最大化共现矩阵中的元素和词向量的点积来学习词嵌入。
GloVe的目标函数是通过最小化以下损失函数来学习词向量:
J=∑i=1V∑j=1Vf(Xij)(wiTwj+bi+bj−log⁡Xij)2 J = \sum_{i=1}^{V} \sum_{j=1}^{V} f(X_{ij})(w_i^Tw_j + b_i + b_j - \log X_{ij})^2 J=i=1Vj=1Vf(Xij)(wiTwj+bi+bjlogXij)2
其中,wiw_iwibib_ibi 分别是词 iii 的词向量和偏置项,VVV 是词汇表的大小,f(Xij)f(X_{ij})f(Xij)是一个权重函数。用来减少高频词对的影响力,通常 f(Xij)=max⁡(Xij,100)f(X_{ij}) = \max(X_{ij}, 100)f(Xij)=max(Xij,100),确保高频共现对的梯度贡献不会过大。
通过GloVe训练得到的词向量展现了良好的线性关系,比如“actor” - “man” + “woman” ≈ “actress”,这反映了词向量空间中丰富的语义结构。

2.2.3上下文相关词嵌入

与Word2VEC为代表的静态词嵌入模型不同。上下文相关词嵌入模型得到的词向量能够随着上下文的变化而改变。这样的词嵌入模型能够反映词的含义随着上下文语境的不同而有所区别的现象,更符合客观现实。
上下文相关词嵌入模型通常包括两个阶段:预训练和微调。预训练阶段,模型在一个大规模无标注文本语料库上学习通用的语言结构和上下文关系,生成可以捕获丰富语境信息的词表示。微调是针对具体任务(例如情感分析、命名实体识别或问答系统)的过程,它以预训练模型为基础,对该模型在特定数据上进行进一步训练,从而优化其在该任务上的性能。

3.句子含义的符号表示

语义表示可分为通用和专用两种。专用语义表示针对特定使用场景设计,语法简单,但能表达的含义有限,如SQL。通用语义可以表示大部分常见语义,但难以用于推理。
一阶逻辑和语义图是常见的两种通用语义表示。

3.1一阶逻辑

一阶逻辑(First-Order,FOL)或称一阶谓词逻辑。是一种用于描述关系、属性和操作的形式系统。一阶逻辑可以量化陈述的公式,并使用变量、常量、函数和谓词来描述对象及其之间的关系。一阶逻辑支持全称量化(∀,表示“对于所有”)和存在量化(∃,表示“存在”),用谓词描述对象的属性或对象之间的关系,用函数表示对象间的映射关系。一阶逻辑可以用于描述自然语言句子的语法和语义结构,帮助计算机理解句子的深层含义。
如:所有人类学科都是社会科学:∀x (学科(x) → 社会科学(x))

3.2语义图

语义图用图的形式表示语义,主要有语义依存图和抽象语义表示两种形式。

3.2.1语义依存图

语义依存图的边表示词之间的关系,节点表示词。语义依存图可以让一个节点存在多个父亲节点。在语义依存图中,一个词可以与多个词存在语义关联。语义依存图的边之间可以互相交叉,突破了传统树结构的限制,能够更为完整地表示对兼语、连动等语言现象。语义依存图以图的形式来表示语义信息更丰富。包括主要语义作用,事件关系标记等内容。

3.2.2抽象语义表示

抽象语义表示将句中的词抽象为概念,节点无需与词直接对应,边表示节点之间的关系。抽象语义表示以单根有向无环图(single-rooted directed acyclic graph)的形式来表示这些概念和关系。“单根”维系了句子的树状主干。“有向”保证了语义的传递,“无环”避免了语义传递的死循环。

4. 文档表示

4.1文档的稀疏向量表示

文档的稀疏向量表示基于词-文档共现矩阵。词-文档共现矩阵统计了词在文档中出现的频率,矩阵的行对应于词,列对应于文档。矩阵中的元素表示该行所表示的词在该列所表示的文档中的出现次数。因此,词-文档共现矩阵的列向量可以看做为文档的列向量表示。

4.2文档的TF-IDF加权表示

TF-IDF加权可以规避虚词类无意义但出现频率高的词的影响。
TF-IDF结合了两个指标:词条频率(TF)和逆文档频率(IDF)。以实现对文档中词语的加权。
词频的简单定义可以是文档中出现特定词语\(t\)的次数\(d。记作(tf(t, d))。为了归一化不同文档长度的影响,通常还会将词频除以文档中所有词语的总数,得到归一化的词频:
TF(t,d)=tf(t,d)∑w∈dtf(w,d)TF(t, d) = \frac{tf(t, d)}{\sum_{w\in d} tf(w, d)}TF(t,d)=wdtf(w,d)tf(t,d)
逆文档频率(IDF)反映了一个词的普遍重要性。如果一个词出现在很多文档中,那么它在区分文档方面的贡献就微乎其微了。IDF定义为所有文档数量(N)与包含词语(t)的文档数量(df(t))的比值的对数:
IDF(t)=log⁡(Ndf(t))IDF(t) = \log\left(\frac{N}{df(t)}\right)IDF(t)=log(df(t)N)
这里的(df(t))是指包含词语(t)的文档数量,而对数函数确保了即使是非常常见的词语,其IDF值也不会变得太小,保持了计算的稳定性。
将TF和IDF结合起来,就可以得到词语在文档中的TF-IDF加权值,它同时考虑了词语在文档中的频率以及在整个语料库中的独特性:
TF-IDF(t,d)=TF(t,d)×IDF(t)TF\text{-}IDF(t, d) = TF(t, d) \times IDF(t)TF-IDF(t,d)=TF(t,d)×IDF(t)
TF-IDF值越高,表明该词语对于文档(d)的区分度越大,越能体现文档的主题。在诸如文本分类、信息检索、关键词抽取等任务中,TF-IDF加权的词向量常被用作文档或词语的重要特征表示。通过降维(如PCA、LDA或t-SNE)进一步处理这些TF-IDF特征,可以帮助可视化文档集合或发现语料中的主题结构。

4.3文档的稠密向量表示

4.3.1池化词向量

池化词的稠密向量是获取文档中的稠密向量表示的一种简单方式,主要有平均池化、加权平均池化、最大池化、注意力机制和Top-K池化五种方式。
平均池化将文档中所有词的向量相加,然后除以词的数量,得到文档的平均向量。这种方法简单有效,能够提供文档主题的大致信息,但对于文档中的噪声或不相关词汇敏感。
加权平均池化类似于平均池化,但在求平均前,根据词的重要性给予不同权重。权重可以通过TF-IDF(词频-逆文档频率)等方式进行计算。这样能够更好地反映词在文档中的重要性。
最大池化对于文档中的每个词向量维度,取最大值作为该维度在文档向量中的值。这种方法能够突出文档中最显著的特征,但可能会忽略其他重要但非最极端的信息。
注意力机制是利用注意力机制为文档中的每个词分配一个权重,这些权重反映了词对于理解整个文档的重要性。加权后的词向量再进行求和或平均,得到文档表示。这种方法更加灵活和动态,能够自适应地捕捉文档的关键信息。
Top-K 池化选择文档中词向量的最高K个值(可以是每个维度上的),然后进行平均或加权处理。这种方法可以保留文档中最显著的特征信息。

4.3.2神经网络提取

使用RNN和Transformer模型是提取文档的稠密向量的另一类方式。
RNN作为一种神经网络,可以处理序列数据。特别适合于处理文本数据,可以在文中捕捉到时间依存关系。通常使用双向RNN进行提取,前向RNN从左至右读取序列,后向RNN从右至左读取,这样可以同时捕获每个词的前文和后文信息。每个时间步,RNN会产生一个隐藏状态,该状态包含了到当前词为止的所有历史信息。对其进行池化,池化后的向量就是文档的稠密向量。
Transformer的编码器,由多层自注意力层和FNN(Feed Forward Network)组成。自注意力机制允许模型在处理每个词时能考虑到序列中所有其他词的信息,这大大加强了模型型的表现能力。Transformer在文档的开始添加一个特殊的标记[CLS],模型最终的输出会特别关注这个标记的输出向量,以此作为整个文档的向量表示。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值