哪种方法无法实现文本合并

哪种方法无法实现文本合并,第1张

基于词袋模型的方法无法实现文本合并。因为词袋模型是将文本分成若干个词语,每个词语与一个权重相关联,然后将所有词语的权重加和,得到这段文本的表示。这种表示方式没有考虑词与词之间的顺序和语义信息,因此无法实现文本合并。比如,若两段文本中有相同的词语,基于词袋模型的表示方式会将它们分别加权表示,无法合并为一个整体进行处理。

词袋模型假如现在有1000篇新闻文档,把这些文档拆成一个个的字,去重后得到3000个字,然后把这3000个字作为字典,进行文本表示的模型,叫做词袋模型。

1、特点是字典中的字没有特定的顺序,句子的总体结构也被舍弃。

2、词袋是一种不保存顺序的分词方法(生成的标记组成一个集合,而不是一个序列,舍弃了句子的总体结构),因此它往往被用于浅层的语言处理模型,而不是深度学习模型。在使用轻量级的浅层文本处理模型时(比如 logistic 回归和随机森林),n-gram 是一种功能强大、不可或缺的特征工程工具。

自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元。顾名思义,词向量是用来表示词的向量,也可被认为是词的特征向量或表征。把词映射为实数域向量的技术也叫词嵌入(word embedding)。近年来,词嵌入已逐渐成为自然语言处理的基础知识。

跳字模型假设基于某个词来生成它在文本序列周围的词。举个例子,假设文本序列是“the” “man” “loves” “his” “son”。以“loves”作为中心词,设背景窗口大小为2。如图1所示,跳字模型所关心的是,给定中心词“loves”,生成与它距离不超过2个词的背景词“the” “man” “his” “son”的条件概率,即

假设给定中心词的情况下,背景词的生成是相互独立的,那么上式可以改写成

虽然开篇说了one-hot不行,但是我们不要忽略一个事实,计算机没办法识别“字符”,所有的数据必须转化成二进制的编码形式。

大家已经注意到,我们已经到了Hidden Layer到Output Layer这一层了,简单来看就是隐藏层和输出层进行全连接,然后是一个softmax,输出概率。过程比较简单,一个Forward Propagation,一个Backward Propagation。

在跳字模型中,每个词被表示成两个 维向量,用来计算条件概率。假设这个词在词典中索引为 ,当它为中心词时向量表示为 ,而为背景词时向量表示为 。设中心词 在词典中索引为 ,背景词 ,在词典中索引为 ,给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到:

其中词典索引集 。假设给定一个长度为 的文本序列,设时间步 的词为 。假设给定中心词的情况下背景词的生成相互独立,当背景窗口大小为 时,跳字模型的似然函数即给定任一中心词生成所有背景词的概率

这里小于1和大于 的时间步可以忽略。

这样就可以计算出每个中心词推断背景词的概率,而我们在输入的时候给出了背景词的向量,此时只需要最大化背景词的输出概率即可。 基于这样的想法,我们会想到极大化似然估计的方式。但是一个函数的最大值往往不容易计算,因此,我们可以通过对函数进行变换,从而改变函数的增减性,以便优化。这等价于最小化以下损失函数:

最小化损失函数,我们最容易想到的就是梯度下降法。在使用梯度下降法之前,我们要把我们的损失函数定义出来,毕竟上面的式子是一个概率,下面把softmax的计算结果带入得到:

损失函数已经得到了,我们的目标就是最小化它,优化它之前我们要搞清楚我们的参数是谁?每错,我们的参数是中心词和背景词,那对于这样的一个函数显然是非凸函数,因此,我们要做一个假设,假设在对中心词权重更新时,背景词的权重是固定的,然后在以同样的方式来更新背景词的权重。

这里就计算出来了中心词的梯度,可以根据这个梯度进行迭代更新。对于背景词的更新是同样的方法,

当 时,即通过中心词 我们可以正确预测上下文词 时,不需要调整 ,反之,则相应调整 。

但是要注意背景词的个数不是唯一的,所以更新的时候要逐个更新,幅图辅助理解。

连续词袋模型与跳字模型类似。与跳字模型最大的不同在于,连续词袋模型假设基于某中心词在文本序列前后的背景词来生成中心词。在同样的文本序列“the” “man” “loves” “his” “son”里,以“loves”作为中心词,且背景窗口大小为2时,连续词袋模型关心的是,给定背景词“the” “man” “his” “son”生成中心词“loves”的条件概率(如图2所示),也就是

因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使用和跳字模型一样的方法来计算条件概率。设 和 分别表示词典中索引为 的词作为背景词和中心词的向量(注意符号的含义与跳字模型中的相反,假设输入向量为 ,输出向量为 )。设中心词 在词典中索引为 ,背景词 在词典中索引为 ,那么给定背景词生成中心词的条件概率

为了让符号更加简单,我们记 ,且 ,那么上式可以简写成

给定一个长度为 的文本序列,设时间步t的词为 ,背景窗口大小为 。连续词袋模型的似然函数是由背景词生成任一中心词的概率

训练连续词袋模型同训练跳字模型基本一致。连续词袋模型的最大似然估计等价于最小化损失函数

注意到

通过微分,我们可以计算出上式中条件概率的对数有关任一背景词向量 的梯度

中心词的梯度同理可得,

同跳字模型不一样的一点在于,我们一般使用连续词袋模型的背景词向量作为词的表征向量。

>

目标: 给定一组文档, 将其分类成不同的主题

词袋方法尝试直接使用数据集中出现的单词表示数据集中的文档, 但是通常这些单词基于一些底层参数, 这些参数在不同的文档之间有所变化, 例如讨论的主题, 在这一部分将讨论这种隐藏或潜在的变量( Latent Variables ), 然后将学习用来估计他们的特定技巧称之为潜在狄利克雷分布( Latent Dirichlet Allocation ), 最后使用 LDA 进行主题建模

从图形角度考虑词袋模型的话, 可以发现它表示一组文档对象与一组单词对象之间的关系

假设有一篇这样的文章, 我们要看看该文章中有哪些单词, 假设我们正确地进行了词干提取和文本处理 *** 作, 只查看重要的单词, 这篇文章有三个单词即Space, vote和explore, 出现的次数分别为2次, 1次, 3次, 要计算每个单词出现在文章中的概率, 我们除以单词总数 得出概率, 这样就获得了三个参数, 文档用 表示, 单词或项用 表示, 参数是单词出现在文档中的概率

对于任何给定的文档 和所观察的项 , 文档 生成词项 的概率是多少

如下给出一些文档和一些词, 绘制所有这些概率, 假设有500个文档, 1000个唯一单词, 那么这个模型有多少个参数呢

通过上面的单个文档含有三个词产生三个参数可知, 那么1000个唯一词对于每篇文档产生1000个参数, 那么对于500个文档就是, 500×1000个参数

因此总的来说,

但是对于我们的这个例子而言, 所计算的参数太多了, 所以需要缩减这一数字并继续保留大部分信息 为此, 我们将向模型中添加一小组主题或潜在变量(Latent Variable), 这些变量实际上推动了每个文档中单词的生成, 也即每个文档中获得的单词应该是和潜在变量有关系 在此模型中, 任何文档中都被视为具有一系列潜在相关主题, 同样, 主题被视为由可能会生成的词项组成 例如下面这个例子中, 我们提到了三个主题, Science和Politics以及sports, 现在我们需要计算两组概率参数分布

第一个是在文档 下主题 的概率, 即

第二个是在主题 下词项 的概率, 即

在文档 下词项 的概率, 可以表示为前两个概率的和, 即如下

思考: 如果由500个文档, 10个主题, 1000个单词, 新模型有多少个参数

通过潜在变量的引入, 我们发现参数由之前的50W减少到15W, 此称之为潜在狄利克雷分布, 简称LDA, LDA是一种矩阵分解, 我们将了解如何计算

原理: 从左侧的词袋模型, 变为右侧的LDA 模型, 左侧的词袋模型表示单词tax由第二个文档生成的概率是下图中白色箭头标签

在右侧的LDA模型中, 这个概率可以通过这些白色箭头计算, 用顶部的 乘以底部对应的 然后求和, 这个公式可以采用矩阵乘法

我们可以将左侧的模型中的概率写成大的矩阵, 然后将这个大的词袋矩阵写成, 这个用文档和主题作为索引的高瘦矩阵, 与这个用主题和词项作为索引的宽扁模型的积

在此示例中, 词袋矩阵中第二个文档和词项'tax', 对应的条目等于右侧矩阵的相应行和列的内积

和之前一样 如果这些矩阵很大, 例如有 500 个文档, 10 个主题和 1,000 个词项, 词袋矩阵有 500,000 个条目, 而主题模型中的两个矩阵相结合后有 15,000 个条目

除了更简化之外, LDA还有一个更大的优势, 它具有大量主题 使我们能够根据这些主题拆分文档, 在这里 我们称这些主题为science politics and sports, 在现实生活中, 算法将直接采用一些主题, 并且由我们来 查看相关单词 并决定所有这些单词的共同主题是什么

构建这个 LDA 模型的原理是, 将左侧的词袋矩阵分解成两个矩阵, 两个矩阵的索引分别为文档和主题, 主题和单词

以下将详细介绍这些矩阵的含义

计算词袋矩阵的方式如下, 假设对于文档2(Doc 2), 其中包含单词space 3次, climate和rule给1次, 其他单词已被当作stopwords去除 通过将这些数字写在相应的行中

要计算概率直接除以行的条目之和, 对于Doc 2, 条目之和为5, 这就是词袋矩阵

现在计算 文档主题矩阵 , 假设对于Doc 3, 我们能够判断主要讲的是科学, 并且涉及了一些体育和政治, 假设70%关于科学, 10%关于政治, 20%关于体育, 将这些数字记录在相应的行中

主题词项矩阵也相似, 这里有一个主题是政治, 假设我们能够得到这个主题生成一些单词的概率, 这些概率之和应该为1, 将他们放入相应的行

可以看出这两个矩阵的积是词袋矩阵, 并不是完全相等, 而是非常接近, 如果我们能够找到积非常接近词袋矩阵的两个矩阵, 则创建了主题模型

找到这个矩阵的方法

一种是传统的矩阵分解算法

注意: 矩阵的行的和是1

一组文档中, 主题和单词存在很多结构 , 我们采取比矩阵乘法更复杂的方法, 基本原理是两个主题建模矩阵的条目来自特殊的分布图 我们将根据这一事实利用这些分布得到这两个矩阵

假设有一个派对, 场地是一个三角形房间, 这些黑点表示派对人士, 他们在现场到处走动, 假设某个角落有一些食物, 另一个角落有一些甜点, 还有一个角落有音乐

人们被这些角落吸引, 开始走向这些角落, 有些人喜欢音乐, 有些人则反之, 左侧白色的点 代表的人, 不知道是选择食物还是甜点, 因此呆在中间, 但是通常, 他们倾向于走到红色区域并离开蓝色区域

假设我们创造了一个对立事物, 我们在一个角落放一头狮子, 另一个角落防止火源, 还有一个角落放置放射性废弃物, 现在人们将作出相反的行为, 他们将远离角落并被吸引到中心区域并离开蓝色区域, 因此我们有三个情形, 在角落放置吸引人的物品, 什么也不放置以及放置危险物品, 这些示例称之为狄利克雷分布

在这些三角形中, 点在红色区域的概率比在蓝色区域的概率要高

狄利克雷分布在角落有参数, 如果参数很小例如 07, 07, 07, 则表示左侧情形, 如果全是1则为中间情形, 如果是很大的数字, 例如5, 则为右侧的情形

我们可以将这些参数看作排斥因子, 如果很大, 则促使点离开, 如果很小, 则使点更接近

例如我们的主题模型有三个主题, sports, science, politics

那么上面的三个模型中很显然左边更适合产生我们的主题模型, 在左侧分布中, 我们很有可能选择一个接近角落或边缘的点, 例如接近政治, 表明文章有80%是围绕政治, 10%围绕体育, 10%围绕科学

在中间的分布中, 我们可以选择任何点 概率都相同, 例如这个文档40%关于科学, 40% 政治, 20%关于体育

在右侧的分布中, 我们很有可能选择中间的点, 例如这个文档, 科学, 体育, 政治的概率几乎相等

我们选择的所有文档都会这样, 他们将是这些概率分布中的点, 我们思考下, 如果有大量文章, 文章是更有可能围绕一个主题, 还是同时围绕三个主题 大部分文章都只围绕某一个事物, 要么是科学, 要么是体育, 要么是政治, 很少有文章围绕两个主题, 几乎没有文章是同时围绕三个主题的, 因此最有可能的主题分布是左侧分布

我们通常做的是, 对于LDA模型, 我们将选择一个参数 很小的狄利克雷分布, 例如 为07, 07, 07, 然后我们将选取一些点作为文档, 每个点都给出了混合概率向量 , 描绘的是该文档的主题分布

以下是狄利克雷分布的三维图形, 在三角形上选择一个点的概率取决于该点的概率分布高度

我们来讨论下概率分布

假设有一枚硬币, 投掷两次 一次是正面 一次是背面 这个硬币的正反面概率如何? 可能比较公平 也有可能稍微偏向于正面或背面, 数据不足无法判定

假设我们认为它很公平 但是并不是很确定 我们思考下这枚硬币正面朝上的概率 p 保持一定的置信水平的话, p 为 1/2 但是也可能是其他值, 因此 p 的概率分布是这样的图形 1/2 处更高 但是整个区间内比较均匀, 角落 0 和 1 处非常低

假设投掷硬币 20 次 10 次正面 10 次背面 现在更有信心相信硬币很公平, 新值 p 的分布更像这个图形 , 05 的峰值更高

假设投掷硬币 4 次 正面 3 次 背面 1 次 p 的概率分布现在以 075 为中心, 因为尝试 4 次后有 3 次是正面 但是置信水平不高 因此是这样的图形

但是如果投掷 400 次 正面朝上 300 次 那么我们非常有信心相信 p 的值很接近 05 因此 p 的概率分布是这样的, 在 075 处有个很高的峰值 其他地方都几乎是扁平的, 称之为 β 分布

适合任何 a 和 b 值, 如果正面朝上 a 次 背面朝上 b 次 图形是这样的

在 处出现峰值 公式是这样的 除以 乘以 x 的 a-1 次幂 乘以 y 的 b-1 次幂

如果你没有见过伽马函数 可以看做阶乘函数的连续版本

在此示例中 如果 a 是整数 则 是 a-1 的阶乘 例如 是 4 的阶乘 结果为 24, 是 5 的阶乘 结果为 120 , 关于伽马函数 比较有趣的一点是 它还可以计算带小数点的值 例如可以计算 结果将在 24 和 120 之间

如果值不是整数会怎样 例如正面为 01 背面为 04, 这是不合理的, 因为不可能有 01 次正面 04 次背面, 但是对于 β 分布来说是可以的

我们只需使用伽马函数绘制正确的公式 对于小于 1 的值 例如 01 和 04 得出这个图形 表明 p 更有可能接近 0 或 1 而不是中间值

多项分布是二项分布向多个值的泛化

例如假设有新闻报道和三个主题分别是科学, 政治和体育, 假设每个主题随机分配给这些文章 有三篇科学文章, 六篇政治文章和两篇体育文章, 对于一篇新文章 它是科学, 政治或体育文章的概率是多少?

可以想象它是政治和科学文章的概率高些并且是科学和体育文章的概率也高些, 不确定但是很有可能发生

这些概率位于一个三角形中 如果选择角落中的某个点 则该主题的概率是 1 其他主题的概率是 0 如果选择中间的点 则三个主题的概率相似

因此这三个概率的概率密度分布可能是这样的图形

因为文章更有可能是政治文章 不太可能是体育文章

这个概率密度分布的计算方式是采用如下 β 分布的泛化公式称之为狄利克雷分布

同样 这些数字并非必须是整数 例如 如果是 07 07 和 07 这是狄利克雷分布情况

当我们非常接近三角形的角落时 密度函数变得非常高 虽然不太容易看出这一规律, 表明从这个分布中随机选择的任何点, 非常有可能落入 科学 政治或体育所在角落 至少接近任何一条边, 位于中间某个位置的可能性非常低

这些是具有不同值的狄利克雷分布示例

注意:

如果值很大 则密度函数在中间很高

如果值很小 则在角落很高

如果值各不相同 则更高的部分移向更小的值 并离开更大的值

这是三维图形 如果要创建很好的主题模型, 我们需要选择很小的参数, 例如左侧图形 接下来我们将这么选择主题

现在构建 LDA 模型, 介绍下原理

这些是我们的文档

假设有右边的三个文档 然后生成一些虚假文档 例如左边三个文档 我们使用主题模型生成这些文档 然后将生成的文档与实际文档进行比较 这样可以判断使用模型创建真实文档的准确率有多高 和大多数机器学习算法一样 我们从这些错误中汲取经验 从而改善我们的主题模型

做法是在论文中 主题模型是这么绘制的 看起来很复杂

接下来我们会详细分析上图

我们首先为文档选择一些主题 从参数 狄利克雷分布开始 参数应该很小 以便分布在某侧出现峰值 意味着如果我们从分布中选择一个点 它最有可能接近角落 至少靠近边缘

假设选择这个接近政治角落的点 生成以下值 科学为 01 政治为 08 体育为 01 这些值表示这个文档的主题混合情况 并且给出了多项分布 我们开始从这个分布中 选择主题 因此所选主题 是科学的概率是 10% 是政治的概率是 80% 是体育的概率是 10% 我们将选择一些主题 例如最右边的政治 科学 政治 体育等等

对多个文档这么 *** 作 每个文档是这个狄利克雷分布中的某个点

假设文档 1 在这里 得出了这个多项分布, 文档 2 在这里 给出了这个分布

算出所有其他文档的分布值

现在 合并所有这些向量 得出第一个矩阵 即用相应主题对文档进行索引标记的矩阵

现在对主题和单词进行相同的运算

为了方便可视化 假设只有四个单词 space climate vote 和 rule, 现在有一个不同的分布 , 这个分布和之前的相似 但是三维分布 不是三角形 而是单纯形, 同样 红色部分表示很高的概率 蓝色部分表示很低的概率 如果有更多单词 则依然是非常清晰的分布 但是维度更高的单纯形 因此我们选择了 4 个单词 这样可以用三维图形来表示

在这个分布 中 我们选择一个随机的点 它很有可能接近角落或边缘 假设在这里 这个点生成了以下多项分布 space 为 04 climate 为 04 vote 和 rule 都为 01 我们将这个多项分布称为 , 它表示单词和主题之间的关系 我们从这个分布中 抽取随机单词 单词是 space 的概率为 40% 是 climate 的概率为 40% 是 vote 和 rule 的概率都为 10% 单词可能是最右侧这样的

我们对每个主题执行这一运算 假设主题 1所在位置接近 Space 和 Climate 主题 2所在位置接近 vote 主题 3所在位置 接近 rule

注意 我们不知道它们是什么主题 只知道是主题 1 2 和 3 观察之后 可以推断 接近 Space 和 Climate 的主题 1 肯定是科学 同样 接近 vote 的主题 2 可能是政治 接近 rule 的主题 3 可能是体育 这是在模型最后执行的 *** 作

最后一步 我们将这三个主题合并起来 获得 LDA 模型中的其他矩阵

现在将这些组合到一起, 研究一下如何根据各自的狄利克雷分布获得 LDA 模型中的这两个矩阵

大致方式就是我们看到的, 第一个矩阵中的条目来自分布 中的点, 第二个矩阵的条目来自分布 β 中的点, 目标是找到这些点的最佳位置以便获得矩阵的最佳分解结果, 这些点的最佳位置将使我们获得所需的主题

我们生成一些文档 以便与原始文档进行比较 我们从主题 的狄利克雷分布开始 然后选择与所有文档对应的一些点 我们先选择其中一个点 这个点将为三个主题分别提供一些值 生成多项分布

这是与文档 1 对应的 主题混合结果, 现在为文档 1 生成一些单词 我们从 中选择一些主题 多少个主题呢? 这超出了这门课程的范畴 原理是根据泊松变量判断选择多少个主题 可以直接看作这个模型中的另一个参数

我们根据这个分布提供的概率 选择一些主题 选择科学的概率是 07 政治是 02, 体育是 01, 现在将单词与这些主题相关联, 如何关联?

使用单词狄利克雷分布 , 在这个分布中 我们确定该主题在某个位置 从每个点中 获得由每个主题生成的单词的分布

例如主题 1 科学 生成单词 space 的概率是 04 生成 Climate 的概率是 04 生成 vote 的概率是 01 生成 rule 的概率是 01 这些分布称为

对于所选的每个主题 我们将使用多元分布 选择与其相关的一个单词 例如 第一个主题是science, 我们在 分布中查看science所在行 并从中选择一个单词 例如 space, space 是文档 1 中的第一个单词

我们对每个主题执行这一流程 然后从第一个生成文档(称之为“虚假文档 1”)中 生成单词 重复这一流程

从 分布中选择另一个点 获得另一个多元分布 生成新的主题 并从 中生成新的单词 它是“Fake Doc 2” 一直持续下去 生成很多文档

现在将这些文档与原始文档进行比较, 我们将使用最大似然率找到获得真实文章概率最高的一系列点

总结下具体流程 我们有两个狄利克雷分布 和 我们从分布 中选择一些文档 并从分布 中 选择一些主题 将这两个相结合 创建虚假文章 然后将这些虚假文章与真实文章比较, 当然 获得真实文章的概率非常小, 但是 上方分布中肯定有一些点的组合能够最大化这个概率 我们的目标是找到这个点组合并获得主题就像训练机器学习中的很多算法一样

该过程肯定有错误, 可以告诉我们与生成真实文章的偏差有多大, 该错误将反向传播到分布中 获得一个梯度 可以告诉我们向哪移动点 以便减小这个错误, 我们根据提示移动点 现在获得效果稍微好些的模型 重复这一流程将获得效果不错的点组合

通常 效果好的点组合将为我们提供一些主题 狄利克雷分布 将告诉我们哪些文章与这些主题相关 狄利克雷分布 将告诉我们哪些单词与这些主题相关

我们可以进一步推理并反向传播错误 一直回到 和 不仅获得效果更好的点组合 而且获得更好的分布 和 就这样 这就是潜在狄利克雷分析的原理

如果你想了解论文中的图表 这就是该图表

我们只需知道

是主题分布

是单词分布

和 是从这两个分布中获取的多元分布

是主题

是将这两个相结合后获得的文档

如果不同特征的数量级不在一个等级,模型就不是碗形,而是长条形,难收敛。如果是逻辑回归、线性回归,一定要做幅度调整,如果用树模型,就不需要幅度调整。因为树模型是对各个特征一个一个做的,幅度差异不影响。

可以把不同特征调整到[0,1]范围内,(x-min)/(max-min),适用于非高斯分布,可以保留数值大部分信息,但易受到异常值影响。

或者使用standard scaler, ,适用于高斯分布。优点是处理后的数据更加正态化,但是缺点是对分布要求严格。

树模型(决策树、随机森林、GBDT)不需要做数值的缩放,线性模型、SVM、神经网络、KNN、PCA降维都是需要做数值缩放的。

1)加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过平均用户多少,用户连续登录天数超过平均多少。。。

2)分位线:商品属于售出商品价格的多少分位线处。

3)次序型:排在第几位

4)比例类:电商中,好/中/差评 比例,你已超过全国百分之多少的同学。

比如年龄,是一个连续值。如果要通过逻辑回归来判断是否要让座,要同时顾及“尊老”“爱幼”。而激活函数sigmoid函数是 ,如果 是正数,函数是单调增,年龄越大让座可能越大,但是小孩子就不让座了,如果 是负数,函数单调减,只能满足爱幼,不能尊老了。所以,将年龄字段分成[0,6],[7,59],[60,120]三段,变成三个字段,对应就会有三个 来判别,是否应该让座,就可以同时实现尊老和爱幼。

1)等距切分。pdcut()

2)等频切分,按照分位数切分。pdqcut()

如果是用逻辑回归模型,就要做离散化,如果使用树模型,如决策树、随机森林,就不一定要做离散化,因为模型本身会给你做离散化。

口红色号,衣服尺码等等

red:--->1

blue:--->2

yellow:--->3

如果用以上的编码方式,不同颜色之间存在了大小关系,而应该是等价的。

red:-->1,0,0

blue:-->0,1,0

yellow:-->0,0,1

拆分成三列,“是否是red”、"是否是blue"、“是否是yellow”。

*** 作:pdget_dummies()

哑变量和one hot其实是一件事,就像奇异果和猕猴桃。

相当于multi-hot,有多个1。

比如,我可以建一个词库,一句话里如果含有单词apple,那就在apple这列打1,含有多少单词就打多少个1。但是这种方法比较稀疏,词库太大了。

改进方法:比如我对于每一个领域都有一个词表,比如财经类词表,体育类词表。。。然后有一篇文章,我要对他进行分类,就可以看这篇文章里有多少个词是财经词表里的,有多少词是体育词表里面的。

比如:

性别:[男,女]

爱好:[足球,散步,电视剧]

要用爱好来表达性别

男生中这三个爱好的人数比例是:[2/3, 1/3, 0]

女生中这三个爱好的人数比例是:[0, 1/3, 2/3]

把这三列 [“喜欢足球的概率”,“喜欢散步的概率”,“喜欢电视剧的概率”] 加在对应的性别后面,可以作为新的特征。

4如果类别特征空间太大,超过了几十个一般就不适用one hot了。比如是中介的ID,可以考虑用Label encoding(直接用1,2,3代替,会产生次序关系,但总好过直接丢弃特征)、Count encoding(出现了多少次就写多少)、Target encoding(根据标签,反过来对特征编码,使用方法就是上面的histogram,但是会造成标签泄露,产生过拟合。可以用交叉验证的思想,分成5折,用4份的数据做编码,然后用剩下的一份做训练。)

既可以作为连续值,也可以作为离散值。

连续值:持续时间(浏览时长)、间隔时间(上次购买距离现在的时间)

离散值:哪个时间段、周几 等,离散后,就是类别型的数据。但不是说一定要做one-hot编码,比如时间段,可以离散化为“上班高峰期”和“非高峰期”。而周几,可以用one-hot,也可以离散为“工作日”和“周末”。

1、词袋模型:就是指上面的hash技巧,文本数据去掉停用词,剩下的词组成list,在词库中的映射稀疏向量。

2、词袋模型的问题: 李雷喜欢韩梅梅  VS 韩梅梅喜欢李雷,丢失了顺序信息。

解决方案:把词袋中的词扩充到n-gram,就是分词的时候,除了“李雷”、“喜欢”、“韩梅梅”,还要加上“李雷喜欢”、“喜欢韩梅梅”。这叫2-gram。在python里的库叫CountVectorizer。

3、新的问题:只统计了频次,但是,出现频次高的一定是重要的吗?

解决方案:使用TF-IDF特征。如果t虽然在文档中出现次数多,但是在其他文档中出现的次数也很多,那么这个词就不重要。

TF(t)=

IDF(t)=

TF-IDF权重=TF(t)IDF(t)

4、稀疏-->稠密,工具是word2vec,在机器学习中不太好用,在深度学习中用得多。原理比较复杂,先不讲。

比如:

1)购物车购买转化率(用户维度统计特征)

2)商品热度(商品维度统计特征)

3)对不同item点击/收藏/购物车/购买的总计(商品维度统计特征)

4)对不同item点击/收藏/购物车/购买平均每个user的计数(用户维度统计特征)

5)变热门的品牌/商品(商品维度,差值型)

6)最近1/2/3/7天的行为数与平均行为数的比值(用户维度,比例型)

7)商品在类别中的排序(商品维度,次序型)

8)商品交互的总人数(商品维度,求和型)

等等。。。

统计值也可以用来发现一些规律,比如前一天加购物车的商品很有可能第二天购买;加车N件,只买了一件,剩余的不会买。。。

如:张三&&电子产品,李四&&服装,

增加一列,只有同时出现指定的用户和品类的时候,才取1。

第一种组合完全是拍脑袋,所以可以结合使用 决策树模型 (GBDT),用GBDT学习出来的路径,组合成新的特征。不一定是整条路径,选取其中的一小段也可以是一个新的特征。例如下图,“年龄 25 && 是教师” 就是一个新的特征。

1)冗余,部分特征相关度高,消耗计算性能。

2)噪声,有些特征对结果有负影响。

前者只踢掉原本特征里,和结果预测关系不大的列。后者是要在低维空间中,尽量保存住高维的信息。

1)评估 单个 特征和结果值之间的相关程度,排序,留下Top相关的特征部分。

2)Pearson相关系数,

3)缺点:没有考虑到特征之间的关联作用,可能把有用的关联特征误踢掉。

python包:SelectKBest(选最重要的K个)、SelectPercentile(选最重要的百分之多少)

看做一个子集搜索问题,筛选各种特征子集,用模型评估效果。

典型的包裹型算法为:递归特征删除算法(recursive feature elimination algorithm)。

做法:

1)先用全量特征跑逻辑回归模型

2)然后系数排序(体现相关性),砍掉5-10%的弱特征,观察准确率/auc的变化。

3)逐步进行,直至准确率/auc出现大的下滑为止。

python包:RFE

L1正则化 + 逻辑回归LR/ linear SVM

L1正则化的效果,是让一些不重要的特征的权重系数变成0。

通常用在 稀疏的高维 数据。

一、一般处理流程

语料获取 -> 文本预处理 -> 特征工程 -> 特征选择

1、语料获取

即需要处理的数据及用于模型训练的语料。

数据源可能来自网上爬取、资料积累、语料转换、OCR转换等,格式可能比较混乱。需要将url、时间、符号等无意义内容去除,留下质量相对较高的非结构化数据。

2、文本预处理

将含杂质、无序、不标准的自然语言文本转化为规则、易处理、标准的结构化文本。

①处理标点符号

可通过正则判定、现有工具(zhon包)等方式筛选清理标点符号。

②分词

将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列的过程。

一般看来英文较容易可通过空格符号分词,中文相对复杂,参考结巴分词、盘古分词、Ansj等工具。

常见的分词算法有:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于规则的分词方法,每种方法下面对应许多具体的算法。

③词性标注

为自然语言文本中的每个词汇赋予一个词性的过程,如名词、动词、副词等。可以把每个单词(和它周围的一些额外的单词用于上下文)输入预先训练的词性分类模型。

常用隐马尔科夫模型、N 元模型、决策树

④stop word

英文中含大量 a、the、and,中文含大量 的、是、了、啊,这些语气词、助词没有明显的实际意义,反而容易造成识别偏差,可适当进行过滤。

⑤词形还原

偏向于英文中,单数/复数,主动/被动,现在进行时/过去时/将来时等,还原为原型。

⑥统计词频

因为一些频率过高/过低的词是无效的,对模型帮助很小,还会被当做噪声,做个词频统计用于停用词表。

⑦给单词赋予id

给每一个单词一个id,用于构建词典,并将原来的句子替换成id的表现形式

⑧依存句法分析

通过分析句子中词与词之间的依存关系,从而捕捉到词语的句法结构信息(如主谓、动宾、定中等结构关系),并使用树状结构来表示句子的句法结构信息(如主谓宾、定状补等)。

3、特征工程

做完语料预处理之后,接下来需要考虑如何把分词之后的字和词语表示成计算机能够计算的类型。

如果要计算我们至少需要把中文分词的字符串转换成数字,确切的说应该是数学中的向量。有两种常用的表示模型分别是词袋模型和词向量。

①词向量

词向量是将字、词语转换成向量矩阵的计算模型。目前为止最常用的词表示方法是 One-hot,这种方法把每个词表示为一个很长的向量。

②词袋模型

即不考虑词语原本在句子中的顺序,直接将每一个词语或者符号统一放置在一个集合(如 list),然后按照计数的方式对出现的次数进行统计。统计词频这只是最基本的方式,TF-IDF 是词袋模型的一个经典用法。

常用的表示模型有:词袋模型(Bag of Word, BOW),比如:TF-IDF 算法;词向量,比如 one-hot 算法、word2vec 算法等。

4、特征选择

在文本挖掘相关问题中,特征工程也是必不可少的。在一个实际问题中,构造好的特征向量,是要选择合适的、表达能力强的特征。

举个自然语言处理中的例子来说,我们想衡量like这个词的极性(正向情感还是负向情感)。我们可以预先挑选一些正向情感的词,比如good。然后我们算like跟good的PMI,用到点互信息PMI这个指标来衡量两个事物之间的相关性。

特征选择是一个很有挑战的过程,更多的依赖于经验和专业知识,并且有很多现成的算法来进行特征的选择。目前,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。

5、模型训练

在特征向量选择好了以后,接下来要做的事情是根据应用需求来训练模型,我们使用不同的模型,传统的有监督和无监督等机器学习模型,如 KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等模型;深度学习模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。这些模型在分类、聚类、神经序列、情感分析等应用中都会用到。

当选择好模型后,则进行模型训练,其中包括了模型微调等。在模型训练的过程中要注意由于在训练集上表现很好,但在测试集上表现很差的过拟合问题以及模型不能很好地拟合数据的欠拟合问题。同时,也要防止出现梯度消失和梯度爆炸问题。

6、模型评估

在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。模型的评价指标主要有:错误率、精准度、准确率、召回率、F1 值、ROC 曲线、AUC 曲线等。

7、投产上线

模型的投产上线方式主要有两种:一种是线下训练模型,然后将模型进行线上部署提供服务;另一种是在线训练模型,在线训练完成后将模型 pickle 持久化,提供对外服务。

三、NLP应用方向

1、命名实体识别

指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、时间日期等。

传统机器学习算法主要有HMM和CRF,深度学习常用QRNN、LSTM,当前主流的是基于bert的NER。

2、情感分析

文本情感分析和观点挖掘(Sentiment Analysis),又称意见挖掘(Opinion Mining)是自然语言处理领域的一个重要研究方向。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。

情感分析技术可以分为两类,一类是基于机器学习的方法,通过大量有标注、无标注的主观语料,使用统计机器学习算法,通过提取特征,进行文本情感分析。另一类是基于情感词典的方法,根据情感词典所提供的词的情感极性(正向、负向),从而进行不同粒度的(词语、短语、属性、句子、篇章)下的文本情感分析。

3、文章标签

文章标签是利用机器学习算法,对文章进行文字和语义的分析后,提取出若干个重要的词或者短语(关键短语)。关键短语是NLP基础的算法模块,有了关键短语,能为后续的搜索、推荐等更高级的应用提供有力的抓手。

适用场景:1、个性化推荐:通过对文章的标签计算,结合用户画像,精准的对用户进行个性化推荐;2、话题聚合:根据文章计算的标签,聚合相同标签的文章,便于用户对同一话题的文章进行全方位的信息阅读;3、搜索:使用中心词可以对query进行相似度计算、聚类、改写等,可以用于搜索相关性计算。

4、案件串并

①信息抽取

运用实体抽取、关系抽取,从案情中抽取关键信息,如从警情中可以抽取报警人项目、报警人电话、案发地址等信息

②实体对齐

相同的实体在不同的案情中会有不同的表述,会给串并带来困难。可针对地址、人名、组织名进行对齐处理。

③文本聚类

对于关键片段类信息,无法像实体那样对齐,需要借助文本聚类技术进行关联。

④构建图谱

将信息抽取结果存入图谱。每个警情id对应一个节点,实体、属性、关键片段作为节点,对齐的实体、同一类的文本存为同一个节点。

除了来自于从警情中抽取的信息,还可以将其他警务系统中存在的结构化数据导入(如来自户籍信息的人物关系),从而丰富图谱。

⑤图谱检索

完成以上工作,即完成了案件串并的必要基础建设,接下来通过图谱的查询功能自动完成案件的串并。首先需要设定串并的条件,案件串并的条件在警务实战中已有很多的积累,如“具有相似的作案手段”,又如“相似作案手段,嫌疑人有共同联系人”,只需要将这些条件用图谱查询语言表达出来。

以上就是关于哪种方法无法实现文本合并全部的内容,包括:哪种方法无法实现文本合并、文本数据词袋法向量表示代码运行结果含义、Word2Vec原理详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10146808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存