# 1. 引言

### 1.1 背景

关键词是内容本身的一种抽象，它是一种介于内容粒度(细粒度)和内容类目粒度(粗粒度)之间的一种内容表示。

它既可以帮助用户快速在大量内容中获取所需的内容，也可以帮助推荐系统更准确的推荐给用户想看的内容。相较于现在广泛应用的深度推荐模型，embedding的内容表示，标签表示有着无与伦比的可解释性。

### 1.2 关键词标注方式

主要有关键词抽取和关键词分配。抽取就是从内容本身中抽取，而分配是根据预先定义的标签列表进行打标。

#### 1.2.1 关键词抽取

**步骤一: 在内容中选取候选关键词**&#x20;

这里说的是如何去界定词的边界，因为关键词可能不是一个词而是短语。这种一般通过一些统计方法去求，类似于新词发现。如果只分析分词得到的结果词，可以略过。

**步骤二: 抽取关键词**

* 无监督

  常用tfidf，textrank等，不过一般效果也就那样了，毕竟只考虑词的统计结果，没有考虑其在文章的分布。
* 有监督

  关键词抽取可以看作是判断一个词是不是关键词的二分类问题，不过实际用的时候基本没有标注数据。。。

#### 1.2.2 关键词分配

给定一个候选词表，去判断是否是内容的关键词。和关键词抽取的一个显著不同是，关键词分配的词可能并不会在内容中出现，这其实就可以看作是一个多标签分类问题了。

**步骤一: 候选词表构建**

要么领域专家人工构建，要么机器构建。机器的话，相应的肯定会有不少case。

**步骤二: 分配关键词**

一般通过半监督或者有监督做。但是由于相对于传统分类，标签分类的类目个数非常复杂。

### 1.3 标签推荐

标签推荐可以看作是标签提取后的最重要的应用，它通过内容打上的标签去给用户推荐符合用户兴趣的标签和标签关联内容。

#### 1.3.1 基于图

根据用户历史行为，可以得到用户-标签-内容的图网络，利用图挖掘技术挖掘用户兴趣。

#### 1.3.2 基于内容

由于很多内容是存在文本的，因此可以直接利用文本和标签本身去做推荐。比如得到文本和标签的主题表示，根据两者的相似性得到文本最接近的标签。

### 1.4 关键词标注的难点

![关键词标注的主要方法](https://3676603176-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ln2Cwa30IhAwp_pKAP9%2F-LnbAJta28FQ-OdEbG1K%2F-Lnh1VblyGmSa9GLi9U4%2Fimage.png?alt=media\&token=55e20a4c-fc36-4c91-948a-72d3a5cd5e0a)

好的文档关键词往往有以下3个特点：

* 可读性，关键词必须要是有意义的。
* 相关性，关键词必须与文档主题相关。例如，一篇主要介绍用图方法进行关键词抽取的学术论文，其中可能只顺带提到“文档摘要”这个 短语，这时就不希望这个短语被选取作为文档关键词。
* 覆盖度，关键词要能够对文档的主题有较好的覆盖，不能只集中在文档某个主题而忽略了文档其他主题。

根据以上3个特点，可以得到关键词标注算法的2个主要挑战：

* 关键词对文档主题覆盖度的问题
* 文档和关键词之间的词汇差异问题

#### 1.4.1 文档主题的覆盖度问题

常用的TFIDF和TextRank等方法均没有考虑所抽取的关键词对文档主题的覆盖度问题，导致推荐的关键词往往集中在某一个大的主题中，而没有顾及文档的其他主题。

#### 1.4.2 文档与关键词的词汇差异问题

传统的统计方法都非常依赖关键词本身在文档中的出现，但是关键词并不一定非在内容中出现，或者说描述的形式不一样。更有甚者，在短文本中，关键词可能都没有出现过。

词语通常是会带有强烈的语义信息的，只要关键词的语义描述和内容的语义描述一致，显然就应该为这样的内容匹配上关键词。

因此，本文提出，**文档**和**关键词**都是对同一个事物的 描述，因此他们具有“**主题一致性**”，基于这样一个假设，可以通过某些算法来建立**文档中的词**与**关键词**之间的语义关系，在文档和关键词之间建立语义映射关系，从而能够推荐语义相关的关键词。

本文将以关键词抽取作为主要研究对象，探索如何有效利用文档主题结构进行关键词抽取。

### 1.5 补充: 结合自己工作的一些思考

在平时工作上，对于候选关键词的发现或依靠人工，或依靠无监督方案，总之关键词是不缺的。

但是对于关键词的分配，总感觉之前的做法很扯。之前组内对于内容的关键词打标，仅仅是依靠关键词本身和一些人为给的同义词，然后做关键词匹配。虽然我后来通过给词进行tfidf的加权可以避免一些显然的错误，但是还是存在很多问题，结合上面提到的三个特点说一下现有方案的case

* 可读性

  这个其实还好，最多就是一些分词错误，无伤大雅。
* 相关性

  这个是现有方案存在最多的问题，关键词匹配只要是说到了，基本就算命中了。很多情况下，文档只是随口一提，并没有更多的描述关键词相关的内容。
* 主题覆盖度

  纯靠关键词匹配，完全没有考虑主题覆盖。。。

不过工作上不同场景下关键词匹配也并不是每个关键词都要具备上述三个特点，比如：

* 场景一: 识别出评论中提到“有折扣“的评论。这个基本只要匹配到评论中有“折扣“这样的词，就可以认为是匹配上了该关键词。
* 场景二: 给用户推荐“赏枫美景“相关的内容。这时如果内容仅仅是提到赏枫(例如：这个公园适合赏枫)，就不是非常符合了。最好是能找到提到赏枫，且有大段内容描述枫叶美景。

上面的两个场景也对应了我工作上最常见的两种关键词匹配的应用场景，解决这两种场景的case分别的难点在于：

* 场景一在于没有语义匹配，穷举的同义词肯定不够全面，不一定能保证关键词在文章中出现，导致标签的召回率Recall过低。
* 场景二在于没有办法衡量关键词的匹配程度，即使使用tfidf的值，不同的关键词不好统一比较。也就无法挑选高匹配的内容，导致关键词匹配的内容很多是一笔带过，标签的准确率Precision过低。

而这两个问题的根源都在于现有方案将关键词看作是一个{0,1}的Hard编码导致的，如果能得到关键词和内容的语义表示，既可以解决关键词不出现在内容中的问题，又可以通过语义匹配去得到关键词和内容的语义相关性来衡量关键词的匹配程度。
