第九篇:分布式语义
Posted flying_1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九篇:分布式语义相关的知识,希望对你有一定的参考价值。
目录
词法数据库(上一篇提到) - 问题
• 手动构建
‣ 昂贵的
‣ 人工标注可能存在偏差和噪声
• 语言是动态的
‣ 生词:俚语、术语等。
‣ 新词义
• Internet 为我们提供了大量文本。 我们可以用它来获得词义吗?
分布假设
• 指示主题的文档共现(文档作为上下文)
‣ 例如 投票与政治
• 本地上下文反映其含义(词窗口作为上下文)
‣ 例如 吃披萨 vs. 吃汉堡
从上下文猜测意义
• 从用法中学习生词
• 另一种方式:查看具有相似上下文的单词!
词向量
• 每一行都可以被认为是一个词向量
• 它描述了一个词的分布特性
‣ 即编码有关其上下文词的信息
• 捕捉各种语义关系(同义词、类比等)
词嵌入?
• 我们之前见过词向量:词嵌入!
• 在这里,我们将学习其他生成词向量的方法
‣ 基于计数的方法
‣ 专为学习词向量而设计的更高效的神经网络方法
大纲
• 基于计数的方法
• 神经网络方法
• 评估
基于计数的方法
• 一般有两种风格
‣ 使用文档作为上下文
‣ 使用相邻词作为上下文
文档作为上下文
向量空间模型Vector Space Model
• 核心思想:将词义表示为向量
• 将文档视为上下文
• 一个矩阵,两个视点
‣ 用单词表示的文档
‣ 用文档表示的单词
操作向量空间模型VSM
• 加权值(超出频率)
• 创建低维密集向量
Tf-idf
• 信息检索的标准加权方案
• 削减常用词!
降维
• 术语文档矩阵非常稀疏
• 降维:创建更短、更密集的向量
• 更实用(功能更少)
• 去除噪音(减少过度拟合)
奇异值分解SVD
简单来说,就是通过矩阵等价转换,将矩阵A分解成三个矩阵乘积的形式
A: |V|*D的词-文档矩阵
U:|V|*m 新的词矩阵
Σ:m*m 奇异值
D:m*|D| 新的文档矩阵
截断——潜在语义分析
• 将 U、Σ 和 截断为 k 维可生成原始矩阵的最佳 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一起出现的次数
: 指的是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) =
* :是点乘
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讲解比较宏观,之后可能专门针对论文进行细致理论讲解+代码实现!
今天就到这里啦,再次感谢!
以上是关于第九篇:分布式语义的主要内容,如果未能解决你的问题,请参考以下文章
Python之路第九篇:Python操作 RabbitMQRedisMemcacheSQLAlchemy
Python之路第九篇:Python操作 RabbitMQRedisMemcacheSQLAlchemy
Python之路第九篇:Python操作 RabbitMQRedisMemcacheSQLAlchemy