网站兼职做计划赚小钱视频音乐网站怎样建设
news/
2025/9/23 20:08:18/
文章来源:
网站兼职做计划赚小钱,视频音乐网站怎样建设,wordpress iframe广告,电子商务网站开发的总结使用PPMI改进共现矩阵
共现矩阵的元素表示两个单词同时出现的次数#xff0c;这里的次数并不具备好的性质#xff0c;举个例子#xff0c;有短语叫the car#xff0c;因为the是个常用词#xff0c;如果以两个单词同时出现的次数为衡量相关性的标准#xff0c;与drive 相…使用PPMI改进共现矩阵
共现矩阵的元素表示两个单词同时出现的次数这里的次数并不具备好的性质举个例子有短语叫the car因为the是个常用词如果以两个单词同时出现的次数为衡量相关性的标准与drive 相比the和car的相关性更强这是不对的。
点互信息(Pointwise Mutual Information,PMI)表达式如下P(x)表示x发生的概率P(y)表示y发生的概率P(x,y)表示x和y同时发生的概率。PMI的值越高表明x与y相关性越强。 用共现矩阵重写PMI表达式将共现矩阵表示为C将单词X和Y的共现次数表示为C(x,y)将单词x和y的出现次数分别表示为C(x)、C(y)将语料库的单词数量记为N。表达式如下。 正的点互信息Positive PMIPPMI当两个单词的共现次数为0时 log0-∞。为解决这个问题实践上会使用下述正的点互信息。可以将单词间的相关性表示为大于等于0的实数。 共现矩阵转化为PPMI矩阵的函数实现代码中防止 np.log2(0)-inf 而使 用了微小值 eps。
分析一下源码函数里加一个print M np.zeros_like(C, dtypenp.float32)N np.sum(C)S np.sum(C, axis0)total C.shape[0] * C.shape[1]print(C)print(M)print(N)print(S)print(total)输出如下可见N是把共现矩阵C中所有数相加M是维度和C相同的全为0的数组用来存PPMI矩阵S是记录每个词和别的词共现的次数total是等于7*7这个是输出进展情况时候用的用来判断当前进度。
[[0 1 0 0 0 0 0][1 0 1 0 1 1 0][0 1 0 1 0 0 0][0 0 1 0 1 0 0][0 1 0 1 0 0 0][0 1 0 0 0 0 1][0 0 0 0 0 1 0]][[0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0.]]14[1 4 2 2 2 2 1]49下面这句代码S[j]和S[i]指的是i和j和别的词共现的次数这里就知道了代码的实现和PMI表达式定义其实还是有差别的代码是在共现范围内判断两个词的相关性。举个例子a和b共现了x次b和其他人现了y次a和其他人现了j次群体中人的个数是n那在这个群体里b和a现的程度就是(x * n)/(y * j) 。(‘现’理解成XO)。
pmi np.log2(C[i, j] * N / (S[j]*S[i]) eps)完整代码
def ppmi(C, verboseFalse, eps 1e-8):生成PPMI正的点互信息:param C: 共现矩阵:param verbose: 是否输出进展情况:return:M np.zeros_like(C, dtypenp.float32)N np.sum(C)S np.sum(C, axis0)total C.shape[0] * C.shape[1]cnt 0for i in range(C.shape[0]):for j in range(C.shape[1]):pmi np.log2(C[i, j] * N / (S[j]*S[i]) eps)M[i, j] max(0, pmi)if verbose:cnt 1if cnt % (total//100 1) 0:print(%.1f%% done % (100*cnt/total))return M例子
text You say goodbye and I say hello.
corpus, word_to_id, id_to_word preprocess(text)
vocab_size len(word_to_id)
C create_co_matrix(corpus, vocab_size)
W ppmi(C)np.set_printoptions(precision3) # 有效位数为3位
print(covariance matrix)
print(C)
print(-*50)
print(PPMI)
print(W)输出PPMI矩阵各个元素均为大于等于0的实数。
covariance matrix
[[0 1 0 0 0 0 0][1 0 1 0 1 1 0][0 1 0 1 0 0 0][0 0 1 0 1 0 0][0 1 0 1 0 0 0][0 1 0 0 0 0 1][0 0 0 0 0 1 0]]
--------------------------------------------------
PPMI
[[0. 1.807 0. 0. 0. 0. 0. ][1.807 0. 0.807 0. 0.807 0.807 0. ][0. 0.807 0. 1.807 0. 0. 0. ][0. 0. 1.807 0. 1.807 0. 0. ][0. 0.807 0. 1.807 0. 0. 0. ][0. 0.807 0. 0. 0. 0. 2.807][0. 0. 0. 0. 0. 2.807 0. ]]
随着语料库词汇量增加各个单词向量的维数也会增加这个矩阵很多元素都是0表明向量中的绝大多数元素并不重要对于这些问题一个常见的方法是向量降维。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913747.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!