我们下面要把共现矩阵加权,得到PPMI矩阵。counts2ppmi这个名字起得不是特别准确,这个文件实际上生成的是PMI矩阵。可能是为了统一,这个工具包把所有应该叫PMI的地方都变成了PPMI。ngram2vec中的counts2ppmi比较合理的利用了scipy中的稀疏矩阵,能很快的从文件中把共现矩阵建立好,然后加权得到PMI矩阵。这里默认要能把所有的三元组读进来,所以可能内存不足。
def read_counts_matrix(words_path, contexts_path, counts_path):
wi, iw = load_vocabulary(words_path)//读取中心词词典
ci, ic = load_vocabulary(contexts_path)//读取上下文词典
counts_num = 0
row = []//非零元素行id
col = []//非零元素列id
data = []//非零元素值
with open(counts_path) as f:
print str(counts_num/1000**2) + "M counts processed."
for line in f:
if counts_num % 1000**2 == 0:
print "\x1b[1A&#