天天看点

文本挖掘(一)—— 新词发现1

文本挖掘(一)—— 新词发现2

一、规则/概率/信息熵

  1. 经典算法:采用凝固度和自由度和词频来进行新词筛选。
  • 凝固度:字之间相关性,概率计算得到
  • 自由度:一个足够独立的词应该会被应用在不同上下文中,采用左右信息熵计算得到
  • 参考link,github 代码,github代码2 github代码3
  • 搜资料中,看到比较多的是基于凝固度和自由度,以及在此之上进行改进的方法
  1. TextRank 关键词提取、关键短语提取、摘要提取
  • 参考 link, github代码
  1. On the unsupervised analysis of domain-specific Chinese texts
  • 方法:Apriori + EM + 动态规划 得到词典排序结果
  • link
  1. Improved New Word Detection Method Used in Tourism Field
  • 方法:改进的EMI(enhanced mutual information)方法
    文本挖掘(一)—— 新词发现1
  • 优点: 文章提到,对名词和情感词识别较好,对于一些下游任务(舆情、词表示)有较大帮助
  1. 基于分词的新词发现
  • 参考link
  • 300w微信文章做新词发现的词库

  • 方法: ngram + 粗切 + 回溯

序列标注/实体识别 + 规则 (基于分词的新词发现)

类似采用 CRF、 LSTM等进行序列标注任务,基于分词得到候选新词标记,在此基础上添加词频等规则过滤得到新词; 或者通过序列标注模型确定新词边界

  1. 无监督深度学习方法
  • link
  • 原理:通过给定一个词频表格随机挑选词表中词语组合成“句子",LSTM或CNN + 动态规划
  • 优点: 无监督,自称效果很好; 缺点:需要词频词表,逻辑上是分词结果,需要进行后处理

候选词+分类器

  1. 基于SVM和特征相关性的微博新词发现研究_韩修龙.pdf
  • 候选词抽取:n-gram
  • 分类: svm模型,特征:互信息、词频、信息熵、邻接词语类别、候选词长度, 再通过Pearson相关系数相关性分析,添加人工构造组合特征

    这里特征还是偏向于凝固度和自由度的相关特征,只是添加分类器在此基础上进行分类

  1. 基于古汉语语料的新词发现方法
  • 候选词抽取:改进的Apriori算法
  • 分类:LSTM+CRF->句子切分概率序列,结合过滤规则过滤掉噪声词,从而得到真正的新词
  • 缺点:针对的是古文,不知道实际效果,需要训练数据

已有工具

  1. SmoothNLP

相关介绍

  • 算法概述

    直接将文本按字符分割后拼接为候选词(文本按标点切分成句,然后提取每句话的2元组,3元组,…,k元组作为候选词), 计算候选词得分(左右信息熵),结果可以选取top数目进行输出

  • 代码示例
from smoothnlp.algorithm import phrase
file_name = 'xiaohongshu_homecleaning_for_guoshuang_2.txt'
corpus = open(file_name, 'r', encoding='utf-8')
new_phrases =phrase.phrase_extraction.extract_phrase(corpus, chunk_size=10000, max_n=3)
print(new_phrases)

           

看到了一篇腾讯识别行话/黑话的文章 link

介绍下整体思路:

  1. 新词发现 (采用了传统的自由度+凝固度方法)

    信息熵计算自由度,左右互信息计算凝固度,两者结合给候选词打分(候选词通过n-gram选取)

    将得到的词加入到分词器词典中,计算每个词的词向量,计算新词和种子黑词之间相似度

  2. 一词多义问题

    采用ELMo,动态生成每个词的词嵌入

    第一阶段:新词发现及分词并训练w2v词向量,训练模型

    第二阶段:得到语料的ELMo embedding

(这块没看太懂)

  • 需要较大语料

苏剑林新词发现

link

《新词发现的信息熵方法与实现》

《【中文分词系列】 2. 基于切分的新词发现》

《【中文分词系列】 5. 基于语言模型的无监督分词》

《【中文分词系列】 7. 深度学习分词?只需一个词典!》

《【中文分词系列】 8. 更好的新词发现算法》

《分享一次专业领域词汇的无监督挖掘》

最后一篇领域新词发现跑通,有一定效果,不过对文本及基础语料依赖较大,不同基础语料效果有波动,且训练时间较长,放弃

其他新词发现方法未尝试。

其它

另发现几篇csdn介绍,感觉比较有意思:

  1. https://www.sohu.com/a/298341468_787107 效果看起来还不错,不过没看到核心代码(可能是我看漏了),未来及尝试
  2. https://blog.csdn.net/weixin_43378396/article/details/103848628 新词发现理论介绍,基于分词、基于规则、基于统计
  3. 另外,列一下尝试过的一些相关关键词抽取算法:tfidf、textrank、n-gram、LDA、LSI、苏剑林领域新词发现、基于LTP依存句法的新词发现。 抽取关键词之后计算关键词之间相似度进行过滤。并进行进一步聚类,将相似的词聚到一起。(聚类逻辑类似KMeans,但是有改进,具体参考link )聚类之后的结果类进行idf过滤。以此得到准确率较高的结果。

    新词发现可以根据不同时间段抽取结果求差集得到。

下一篇: 文本挖掘(一)—— 新词发现2

继续阅读