第九篇:分布式语义

Posted flying_1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九篇:分布式语义相关的知识,希望对你有一定的参考价值。

目录

词法数据库(上一篇提到) - 问题

分布假设

从上下文猜测意义

词向量

词嵌入?

大纲

基于计数的方法

文档作为上下文

向量空间模型Vector Space Model

操作向量空间模型VSM

Tf-idf

降维

奇异值分解SVD

截断——潜在语义分析

使用相邻词作为上下文

逐点互信息PMI

PMI 矩阵

PMI 技巧

SVD (A = UΣVT)

神经网络方法

词嵌入

神经模型对于嵌入

Word2Vec

Skip-gram Model

训练skip-gram模型

评估

词相似度

词类比

嵌入空间

下游任务

一般调查结果


词法数据库(上一篇提到) - 问题

• 手动构建
    ‣ 昂贵的
    ‣ 人工标注可能存在偏差和噪声
• 语言是动态的
   ‣ 生词:俚语、术语等。
   ‣ 新词义
• Internet 为我们提供了大量文本。 我们可以用它来获得词义吗?

分布假设

• 指示主题的文档共现(文档作为上下文)
    ‣ 例如 投票与政治
• 本地上下文反映其含义(词窗口作为上下文)
    ‣ 例如 吃披萨 vs. 吃汉堡

从上下文猜测意义

• 从用法中学习生词

• 另一种方式:查看具有相似上下文的单词!

词向量

• 每一行都可以被认为是一个词向量
• 它描述了一个词的分布特性
    ‣ 即编码有关其上下文词的信息
• 捕捉各种语义关系(同义词、类比等)

词嵌入?

• 我们之前见过词向量:词嵌入!
• 在这里,我们将学习其他生成词向量的方法
    ‣ 基于计数的方法
    ‣ 专为学习词向量而设计的更高效的神经网络方法

大纲

• 基于计数的方法
• 神经网络方法
• 评估

基于计数的方法

• 一般有两种风格
    ‣ 使用文档作为上下文
    ‣ 使用相邻词作为上下文

文档作为上下文


向量空间模型Vector Space Model

• 核心思想:将词义表示为向量
• 将文档视为上下文
• 一个矩阵,两个视点
    ‣ 用单词表示的文档
    ‣ 用文档表示的单词

操作向量空间模型VSM

• 加权值(超出频率)
• 创建低维密集向量

Tf-idf

• 信息检索的标准加权方案
• 削减常用词!

降维

• 术语文档矩阵非常稀疏
• 降维:创建更短、更密集的向量
• 更实用(功能更少)
• 去除噪音(减少过度拟合)

奇异值分解SVD

简单来说,就是通过矩阵等价转换,将矩阵A分解成三个矩阵乘积的形式

A=U\\Sigma V^{T}

A: |V|*D的词-文档矩阵

U:|V|*m 新的词矩阵

Σ:m*m 奇异值

D:m*|D| 新的文档矩阵

截断——潜在语义分析

• 将 U、Σ 和 V^{T}截断为 k 维可生成原始矩阵的最佳 k 秩近似值
U^{k} 是一种新的单词低维表示
• k 的典型值为 100-5000

简单来说,就是将U 从 |V|*m 的矩阵 截断为|V|*k的矩阵

使用相邻词作为上下文

• 列出单词与其他单词一起出现的频率
    ‣ 在一些预定义的上下文中(例如 N 个单词的窗口)
• 原始频率的明显问题:被常用词主导
    ‣ 但是我们不能使用 tf-idf!

逐点互信息PMI

• 对于两个事件 x 和 y,PMI 计算以下之间的差异:

    ‣ 它们的联合分布 =P(x, y)
    ‣ 他们的个体分布(假设独立)=P(x)P(y)

Σ:这里指的是所有词汇的出现次数总和;

count(x,y): x和y一起出现的次数

\\Sigma_{x}: 指的是x出现的次数总和,y也同理

上面的次数都可以从下面的单词的共同出现矩阵中获得。

PMI 矩阵

• PMI 在捕获语义方面做得更好
    ‣ 例如 天堂与地狱
• 但非常偏向于稀有词对(这点可以延申一下,用于网络新词的发现)
• 不能很好地处理零

PMI 技巧

• 将所有负值归零(正 PMI)
    ‣ 避免 –inf 和不可靠的负值
• 反对对罕见事件的偏见
    ‣ 平滑概率(归一化 PMI)

SVD (A = UΣVT)

• 无论我们使用文档还是单词作为上下文,都可以应用 SVD 来创建密集向量


神经网络方法

 

词嵌入

• 我们已经看到了神经网络中使用的词嵌入(第 6篇和第 7篇)
• 但这些模型是为其他任务设计的:
    ‣ 分类
    ‣ 语言建模
• 词嵌入只是副产品

神经模型对于嵌入

• 我们能否设计以纯粹学习词嵌入为目标的神经网络?
• 渴望:
    ‣ 无监督
    ‣ 高效的

Word2Vec

• 核心理念
    ‣ 由它所拥有的伙伴你会知道一个词
    ‣ 使用上下文词预测单词

• 被定义为学习分类器
    ‣ Skip-gram:预测目标词的周边词

    ‣ CBOW:使用周围词预测目标词
• 在 L 个位置内使用周围的单词,比如 L=2,也就是目标词左边两个词,右边两个词的范围

Skip-gram Model

• 预测给定目标词的每个相邻词
• 总概率定义为


• 使用逻辑回归模型

P(life| rests) =\\frac{exp(W_{rests}*C_{life})}{\\sum_{u\\in V}exp(W_{rests}*C_{u}) }

* :是点乘

W和C都是对应的词向量

• 两个词嵌入矩阵(W和C)!

i 是目标词嵌入;j是周围词嵌入

• 对单词进行编号,例如,通过对词汇进行排序并使用单词位置作为其索引

这个上面的图,有很多注意点:

1、V是词表大小,d是词向量维度

2.  参数矩阵W和C,就两个

训练skip-gram模型

• 训练以最大化原始文本的可能性
• 在实践中太慢了,因为在|V| 上进行了归一化。

• 将问题简化为二元分类

    ‣ (life, rests) → 真实上下文词
    ‣ (alialihaha, rests) → 非上下文词

    ‣ 如何绘制非上下文词或负样本?
    ‣ 从 V 随机

负采样

最大化目标词和周围词之间的概率

最小化消极词(非目标词)和周围词之间的概率

这个公式总结一下,如下,非常简单明了

• 在实践中,使用 k 个反例

 渴望

• 无监督
    ‣ 未标记语料库
• 高效的
    ‣ 负采样(避免在完整词汇表上使用 softmax)
    ‣ 缩放到非常大的语料库


评估

词相似度

• 使用余弦相似度测量两个词的相似度
• 将预测的相似性与人类直觉进行比较
• 数据集
    ‣ WordSim-353 是具有判断相关性的名词对
    ‣ SimLex-999 还涵盖动词和形容词

词类比

v(Man) - v(King) = v(Woman) - v(Queen)

嵌入空间

• Word2Vec 嵌入显示有趣的几何形状

下游任务

• 最佳评估是在其他下游任务中
    ‣ 使用词袋嵌入作为分类器中的特征表示
    ‣ 大多数深度学习模型的第一层是嵌入输入文本
    ‣ 用预训练的词向量初始化它们!

一般调查结果

• Neural Network神经网络 > count 技术
• 上下文词表示效果更好
• 根据上下文变化的动态词向量!
• ELMO 和 BERT(下一篇)

OK! 今天关于分布式语义这一块就到此结束,辛苦大家观看!内容非常杂糅,不过总体来说就是大纲的三部分,通过计数和神经网络的方式去获得分布式语义,然后评估;里面有很多有意思的技术,比如:TF-IDF,PMI, SVD, word2vec

这篇关于word2vec讲解比较宏观,之后可能专门针对论文进行细致理论讲解+代码实现!

今天就到这里啦,再次感谢!

以上是关于第九篇:分布式语义的主要内容,如果未能解决你的问题,请参考以下文章

(第九篇)Iptables详解

Python之路第九篇:Python操作 RabbitMQRedisMemcacheSQLAlchemy

Python之路第九篇:Python操作 RabbitMQRedisMemcacheSQLAlchemy

Python之路第九篇:Python操作 RabbitMQRedisMemcacheSQLAlchemy

第九篇:Map/Reduce 工作机制分析 - 作业的执行流程

MongoDB基础教程系列--第九篇 MongoDB 分片