关键词的提取,也可以称之为文本标签提取。 比如说,”今天这顿烧烤是真不错啊“,在这句话中,”烧烤“这个词就可以被认为是一个关键词,或者说这个句子的一个标签。 这个标签在一定程度上能够表现出这个句子的含义,比如这个”烧烤“,如果用在文本分类任务中,可以隐含带有”美食“这个类别的信息。 这些标签有些时候也可以用在推荐系统的召回,比如直接按照”烧烤“这个标签做一路召回。
对于关键词的提取一般来说分为抽取式和生成式。其实类比到摘要,其实也是分为抽取式和生成式。 生成式有一个缺点就是有些结果不可控,这其实还挺要命的。
对于抽取式,就是从现有的数据中拿出来词组。最差的结果也就是拿出的单词并不重要,不是我们想要的。
我们的重点是在抽取式提取关键词。 关键词的提取可以分为两个步骤:召回+排序
1. 召回
召回就是得到文本中的候选关键词,也就是得到这个句子中有可能是关键词的词汇。 常用方法:
宁可多不能少。如果多了,无非就是增加了资源消耗,但是少了,可能在排序阶段就是无米之炊了。
2. 排序
排序阶段,我们可以将方法大致的分为有监督和无监督的方法
2.1. 无监督抽取关键词
对于无监督,我们分为基于统计和基于图:
关键词提取的一个baseline就是 TF-IDF 提取,这种方法效果已经很好。投入产出比很高,我们一般需要去掉常用的停用词,保留重要的词语。 TF-IDF基于统计,易于实现,但是缺点就是没有考虑词与词,词与文档之间的关系。是割裂的。
- 基于图最常见的就是TextRank。
- 位置特征: 使用位置特征是我们基于文本关键词出现的位置是在大量数据的情况下是有规律可言的,比如微博文本中出现在##符号中部分词汇有很大概率就是文本的一个关键词。 是否出现在开头,是否出现在中间部分,是否出现在末尾,出现的位置(具体是第几个单词);相对于整个文本的位置;是否出现在##符号中...
- 统计特征: 共现矩阵信息;词频;逆词频;词性;词跨度;关键词所在句子的最大长度/最小长度/平均长度;
- 向量特征: 关键词词向量和文档向量的相似性
- 状态定义:定义标注的状态集合,例如词性标注中的动词、名词、形容词等。
- 转移概率:计算状态之间的转移概率,即从一个状态转移到另一个状态的概率。
- 发射概率:计算每个状态对应的发射概率,即在某个状态下观测到某个单词的概率。
- 初始概率:定义初始状态的概率分布。
- 计算标注序列:根据观测序列和模型参数,计算最可能的标注序列。
- 模型定义:定义条件概率分布,即在给定特征的情况下,标注序列的条件概率分布。
- 模型训练:利用已标注的数据集,通过最大似然估计或正则化方法来训练模型参数。
- 模型定义:定义分类器模型,例如线性分类器。
- 模型训练:利用已标注的数据集,通过梯度下降等方法来训练模型参数。
- 计算词频:统计每个单词在文本中的出现频率。
- 计算搭配度:根据不同的算法计算单词之间的搭配度,例如互信息、左右熵、卡方检验等。
- 筛选新词:根据搭配度和一定的阈值,筛选出新词。
- 设定规则:根据词性、词长、词频等设定一定的规则。
- 筛选新词:根据规则筛选出新词。
另一个baseline就是基于图的TextRank,TextRank 由 PageRank 演变而来。 相比于TF-IDF,TextRank考虑了词与词之间的关系(提取思想就是从窗口之间的词汇关系而来),但是缺点是它针对的是单个文本,而不是整个语料,在词汇量比较少的文本中,也就是短文中,效果会比较差。
随着数据量的积累,我们需要把模型更换到有监督模型加上。一般来说,有监督分为两种,一种是看做序列标注,一种是看做二分类的问题。
2.2. 有监督之二分类
先说二分类问题,比较简单,就是找到词汇的各种特征,去判断这个词汇是不是这个文本的关键词。 我大概罗列一些可能会用到的特征。
2.3. 有监督之序列标注
关键词的提取,就是一个典型的序列标注的问题。判断句子中关键词的开头中间结尾的位置。 序列标注最基础的就是HMM和CRF方法,但是特征工程比较复杂。 为了解决特征工程复杂的问题,我们使用深度学习模型序列标注。
序列标注是一种文本处理技术,它可以对文本中的每个单词或字符进行标注,例如词性标注、命名实体识别、事件抽取等。常用的序列标注方法包括以下几种:
隐马尔可夫模型(Hidden Markov Model,HMM):HMM是一种基于概率的序列标注方法,它可以对序列中的每个单词进行标注。其基本思想是假设每个标注都对应一个概率分布,然后根据观测序列和概率分布来计算最可能的标注序列。HMM的流程包括以下几个步骤:
条件随机场(Conditional Random Field,CRF):CRF是一种基于概率的序列标注方法,它可以对序列中的每个单词进行标注。与HMM不同的是,CRF可以考虑上下文信息,更加准确地预测标注结果。CRF的流程包括以下几个步骤:
感知机(Perceptron):感知机是一种基于分类的序列标注方法,它可以对序列中的每个单词进行标注。其基本思想是利用线性分类器来预测标注结果。感知机的流程包括以下几个步骤:
以上是常用的序列标注方法和流程,不同的方法和算法有各自的优缺点和适用场景,需要根据具体的需求和数据特点来选择合适的方法。
3. 新词发现
还会出现一个问题,如果我们使用二分类判定关键词,上述的过程我们都是基于我们的分词器来做的。有可能会出现一些新词,由于分词错误,不能及时的出现在你的候选词库中,比如”爷青结“。 这个时候,我们需要一个新词发现系统,持续不断的补充到词库中,在召回阶段可以提升召回率。
对于新词发现来说,基操就是从文本的自由程度和凝固程度来判断是否是新词,这样的问题就是阈值不好调整从而导致召回和精准不好平衡。
我们还可以通过别的方法离线挖掘实体词补充道词库中,之前有借鉴美团ner的文章实现了一下,效果还不错,在这里,大家可以参考我这个文章:实体库构建:离线大规模新词实体挖掘。
新词发现是一种文本处理技术,它可以从文本中发现新的词语或短语。常用的新词发现方法包括以下几种:
基于统计的新词发现方法:基于统计的方法通过分析词语在文本中的出现频率和搭配情况来发现新词。常用的算法包括互信息、左右熵、卡方检验等。其流程包括以下几个步骤:
基于规则的新词发现方法:基于规则的方法通过设定一定的规则来发现新词。常用的规则包括词性、词长、词频等。其流程包括以下几个步骤: