本文为您介绍PAI-Studio提供的PMI算法组件。

互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不确定性。

本算法统计若干文章中所有词的共现情况,计算两两之间的PMI(point mutual information)。其定义为:PMI(x,y)=ln(p(x,y)/(p(x)p(y)))=ln(#(x,y)D/(#x#y))。其中,#(x,y)为pair(x,y)的count数,D为pair的总数。若x、y在同一个窗口出现,那么#x+=1; #y+=1;#(x,y)+=1。了解更多PMI的信息,请参见PMI

配置组件

PAI-Studio支持通过可视化或PAI命令的方式,配置组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 分词好的文档列名,分词用空格隔开
    参数设置 截断的最小词频 出现次数少于该值的词会被过滤掉。默认值为5。
    窗口大小 例如5指当前词右边相邻的5个词(不包含当前词)。在窗口中出现的词被被认为与当前词相关。
    执行调优 计算的核心数 系统自动选择。
    每个核心的内存(MB) 系统自动选择。
  • PAI命令方式
    PAI -name PointwiseMutualInformation    
        -project algo_public    
        -DinputTableName=maple_test_pmi_basic_input    
        -DdocColName=doc    
        -DoutputTableName=maple_test_pmi_basic_output    
        -DminCount=0    
        -DwindowSize=2    
        -DcoreNum=1    
        -DmemSizePerCore=110;
    参数名称 是否必选 描述 默认值
    inputTableName 输入表
    outputTableName 输出表
    docColName 分词好的文档列名,分词用空格隔开。
    windowSize 窗口大小。例如5指当前词右边相邻的5个词(不包含当前词)。在窗口中出现的词被被认为与当前词相关。 默认整行内容
    minCount 截断的最小词频,出现次数少于该值的词会被过滤掉。 5
    inputTablePartitions 输入表中指定哪些分区参与训练,格式为:Partition_name=value。如果是多级格式为name1=value1/name2=value2。如果指定多个分区,中间用“,”隔开。 选择所有分区
    lifecycle 指定输出表的生命周期
    coreNum 节点个数,取值范围为[1,9999]。 自动计算
    memSizePerCore 单个节点内存大小,单位为MB,取值范围为[1024,64*1024]。 自动计算

示例

  • 生成数据
    create table maple_test_pmi_basic_input as
    select * from
    (  
        select "w1 w2 w3 w4 w5 w6 w7 w8 w8 w9" as doc from dual
        union all  
        select "w1 w3 w5 w6 w9" as doc from dual  
        union all  select "w0" as doc from dual  
        union all  
        select "w0 w0" as doc from dual  
        union all  
        select "w9 w1 w9 w1 w9" as doc from dual
    )tmp;
    doc:string
    w1 w2 w3 w4 w5 w6 w7 w8 w8 w9
    w1 w3 w5 w6 w9
    w0
    w0 w0
    w9 w1 w9 w1 w9
  • 运行PAI命令
    PAI -name PointwiseMutualInformation    
        -project algo_public    
        -DinputTableName=maple_test_pmi_basic_input    
        -DdocColName=doc    
        -DoutputTableName=maple_test_pmi_basic_output    
        -DminCount=0    
        -DwindowSize=2    
        -DcoreNum=1    
        -DmemSizePerCore=110;
  • 输出结果
    word1 word2 word1_count word2_count co_occurrences_count pmi
    w0 w0 2 2 1 2.0794415416798357
    w1 w1 10 10 1 -1.1394342831883648
    w1 w2 10 3 1 0.06453852113757116
    w1 w3 10 7 2 -0.08961215868968704
    w1 w5 10 8 1 -0.916290731874155
    w1 w9 10 12 4 0.06453852113757116
    w2 w3 3 7 1 0.4212134650763035
    w2 w4 3 4 1 0.9808292530117262
    w3 w4 7 4 1 0.13353139262452257
    w3 w5 7 8 2 0.13353139262452257
    w3 w6 7 7 1 -0.42608439531090014
    w4 w5 4 8 1 0
    w4 w6 4 7 1 0.13353139262452257
    w5 w6 8 7 2 0.13353139262452257
    w5 w7 8 4 1 0
    w5 w9 8 12 1 -1.0986122886681098
    w6 w7 7 4 1 0.13353139262452257
    w6 w8 7 7 1 -0.42608439531090014
    w6 w9 7 12 1 -0.9650808960435872
    w7 w8 4 7 2 0.8266785731844679
    w8 w8 7 7 1 -0.42608439531090014
    w8 w9 7 12 2 -0.2719337154836418
    w9 w9 12 12 2 -0.8109302162163288