文本表示(one-hot独热编码&分布式表示)

文本表示的概念

文本表示是用用计算机对自然语言(这里特定指文本)进行处理,处理后的结果做到能够为计算机所识别,直接运用,直接计算,例如用于计算文本之间的预先相似度或者字面相似度。

备注:

  • 本质是将文本表示为向量,而且每一个维度都表示一个特征

  • 这里的特征可以理解为单词出现的频数,或者是单词出现的位置。(亦或是有其他的相同点也可以作为特征)

one-hot向量

概念:one-hot向量,即为用一个词表大小确定的向量去表示一个词,(词表的向量为V,词表的长度为)将词表中的第i个词语表示为向量。而且该词表的第i个词语在第i维设置为1,其他维度均为0

具体如图所示。

缺点

  • 处理语义相似的词语的时候效果较差,比如美好和美丽的余弦相似度为0。对数据处理的时候未能考虑到语义相似度。

  • 出现数据稀疏性(Data Sparsity)问题。(向量中容易出现几乎都是0的情况)

解决

引入一些其他的特征,比如引入WordNet语义特点的同义词的特征(共同语义信息),缓解one-hot编码中的缺点。

分布式表示

分布式表示即为通过分布式语义假设(运用上下文词语分布去表示一个词语的意思),而且确定好分词之后我们就可以构建词语共线频次表。(两个词语在同一行出现的频次,而且默认对角线为0),下面我们利用这个表格进行优化分布式表示。具体如图所示。(在后续的计算PMI有用到)

分布式表示缺点

  • 高频无关词语提高了相似度。在构建向量的时候可能会影响词义的计算。

  • 无法通过推导得到另外的关系,术语为共线频次无法反映词语之间的高阶关系。(A与B共线,B与C共线,无法判断A与C共线关系)

解决

点互信息(Pointwise Mutual Information)(PMI)去缓解高频词语对于词的向量效果构建影响。(通过对高的词语赋予低权重,对出现次数少的词语赋予高权重),而且运用(PMI/PPMI)去衡量词语的权重信息,公式以及推导如图所示。

备注:PMI更好的保留了特征,减少了其他高频词影响。

备注p(w,c)是w和c共现的频率,p(w)和p(c)是w出现的概率和c出现的概率。

为了方便python计算数据,我们运用了极大似然估计(MLE)去计算相关的概率值。具体公式如下。相关的数据介绍也如图所示。这里的图指的是上文所提及的词语共线频次表,而且为矩阵。

为了缓解词语出现共线次数较低从而导致PMI出现负值,我们通常采用PPMI去计算。

备注:PPMI只是将计算结果跟0(极小值)做对比,如果为小于极小值,就设置为极小值。

具体公式如下。目的是保证PPMI大于等于0

代码

import numpy as np
# 这里的M是一个(V,C)的矩阵,而且V为词表大小,C为全部上下文,Mij为词Wi在上下文Cj中共线的次数
M = np.array([
[0, 2, 1, 1, 1, 1, 1, 2, 1, 3],
[2, 0, 1, 1, 1, 0, 0, 1, 1, 2],
[1, 1, 0, 1, 1, 0, 0, 0, 0, 1],
[1, 1, 1, 0, 1, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1, 0, 1],
[2, 1, 0, 0, 0, 1, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 0, 0, 1, 0, 1],
[3, 2, 1, 1, 1, 1, 1, 2, 1, 0]])
def pmi(M, positive=True):
    col_totals = M.sum(axis=0) # 按列求和
    row_totals = M.sum(axis=1) # 按行求和
    total = col_totals.sum() # 总频数
    excepted = np.outer(row_totals, col_totals) / total # 获得每个元素的分子
    M = M / excepted
    with np.errstate(divide='ignore'):# 不显示log(0)的警告
        M = np.log(M)
    M[np.isinf(M)] = 0.0 # 将log(0) 放置为0
    if positive:
        M[M < 0] = 0.0
    return M
M_pmi = pmi(M)
np.set_printoptions(precision=2)
print(M_pmi)

此外,TF-IDF也可以实现环境多频次词语的影响。

猜你喜欢

转载自blog.csdn.net/xiaziqiqi/article/details/129190650