美文网首页
短文本评分方法 (Short Text Scoring Meth

短文本评分方法 (Short Text Scoring Meth

作者: 吴祺育的笔记 | 来源:发表于2018-12-21 18:47 被阅读0次

    短文本评分方法 (Short Text Scoring Method)

    此方法是基于改进后的RAKE算法并结合word2vector,对短文本内容进行评分的一种方法。

    RAKE的改进

    原RAKE算法对划分后的短语打分机制存在一点问题,短语的长度对短语的得分影响大。也就是说,如果一个不重要的短语,但是它足够长,这个短语的分数就会高。这一点是存在较大问题的,针对这一点,对RAKE进行了以下改进。

    1. 一个短语的长度如果超过3,按照3计算;
    2. word_degree[word] += 1 / (word_list_length * 1.0),这一点改进主要意图还是减少短语长度对单个词得分的影响,所以将原来的 word_degree[word] += word_list_degree 改为上式,这样单个词得分只会因短语长度而缓慢增加;
    3. word_degree[item] = word_degree[item] 取消单个词频率的影响,提出一些不重要且重复的词对单词得分的影响。

    以上3点是对RAKE的改进措施,这样做会让单个词得分更加合理。

    word2vector模型

    对于word2vector模型来说,目前采用的语料库是Wikipedia,但是Wikipedia原始语料有60G,需要将短文本所属类型的语料从Wikipedia中提取出来才能进行训练。以下是提取步骤(以technology类型为例):

    1. 在wikipedia中找到关于technology的相关类,爬取下来(见代码XXX.py),进行一定的格式处理;
    2. 在Wikipedia原始数据enwiki-latest-pages-articles.xml中找到含有technology的相关类的内容,这里存在的问题是,enwiki-latest-pages-articles.xml太大,一般读取方法会导致内存溢出,所以考虑的方法是分行读取Wikipedia原始数据内容,匹配到相关类后,将整篇内容保存下来(见代码XXX.py);
    3. 清洗相关语料(去停用词,特殊符号等);
    4. 训练模型。

    word score

    方法一:将词利用word2vector进行扩展(expand_word_score)

    1. 将数据集D利用RAKE算法进行划分,得到很多个单词,我们这些单词称为 RAKE_words.

    2. 将RAKE_words输入进word2vector模型找到它们simword,然后将所有的simword合并为一个list,称为simwords_list = [simword1, simword2, simword3, simword4, ...]

    3. 找到RAKE_words中的词,称为 post_word_list = [postword1, postword2, ...].

    4. 将 post_word_list 中的词和 simwords_list 词分别放入word2vector模型中,输出两辆词之间的相似度。这里的相似度和步骤2中的相似度有所区别,步骤2中相似度是指寻找相似词时的相似度,可以理解为一个分数,我们把这个可以称为 sim_score, 而这里的相似度指的是在通过word embeding后,两个词之间的相似程度, 我们可以称为 word_similarity.

    5. 设定一个阈值为t,当 simwordX 与 postwordX 的 word_similarity > t时,将simwordX 与 postwordX这两个词同时放到一个list中去, 最后在list中统计出 simwordX 与 postwordX 的频率,作为他们的word_score, 当t不同时,每个词的word_score也对应不同。

    6. t 取 0.9, 0.8, ..., 0.1 , weight_score = sum( word_score(t) * function(t) )
      其中,word_score(t)指的是当t时的word_score, function(t)指的是权函数。权函数的意义在于,将阈值(或相似度等)大的更大,小的更小,大小之间的区分度更大。

    7. 考虑词性的影响,名词权重为0.7, 动词权重为0.3,这里没有考虑其他词性。

       if word == N:
           final_score = weight_score * 0.7
       elif word == V:
           final_score = weight_score * 0.3
       else:
           pass
       return final_score
      

    方法二:不对词进行扩展 (not_expand_word_score)

    1.将方法一中步骤2中的simwords_list, post_word_list。 即用post_word_list中两两词,放入模型中进行相似度计算,可以得到word_similarity。

    1. 剩下步骤和方法一中的 步骤5 6 7相同。

    算法的变形

    方法一的变形 (expand_sim_weight_word_score)

    方法一步骤4之后变为:

    for w in post_word_list:
        score[w] = 0
        for x in simwords_list:
            score[w] += function(word_similarity(w, x))
    
    if word == N:
            final_sore[word] = score[word] * 0.7
    elif word == V:
            final_sore[word] = score[word] * 0.3
    else:
        pass
    
    return final_score
    
    方法二的变形(not_expand_sim_weight_word_score)

    方法二
    for w in post_word_list:
    score[w] = 0
    for x in post_word_list and x != w:
    score[w] += function(word_similarity(w, x))

    if word == N:
        final_sore[word] = score[word] * 0.7    
    elif word == V:
            final_sore[word] = score[word] * 0.3
    else:
        pass
        
    return final_score
    

    短文本分数

    在fina_score中的word_score,利用正则匹配的方法,将匹配到的词相加,得到一条短文本的分数。

    相关文章

      网友评论

          本文标题:短文本评分方法 (Short Text Scoring Meth

          本文链接:https://www.haomeiwen.com/subject/bguvkqtx.html