一、文本标识
- 单词的标识
给定一个构建好的词典库,在词典库基础之上,使用One-hot编码:出现单词的地方标1,没出现的单词标0
- 句子的表示
基于0/1:先对巨资进行分词,然后对句子使用One-hot编码。不统计出现的次数,出现就标1
基于计数:统计分词之后单词在词典库中出现的次数
二、计算相似度
句子用向量表示出来之后,就可以套用数学公式,向量是有方向的。
欧氏距离:欧几里得距离。结果越小越好,说明二者在坐标图上接近。但是没有考虑方向
余弦相似度:最常用的。
基于计数统计表示的有一个缺点:有限动词很重要但是出现的次数少,有些虚词出现的次数多但是不重要。
- tf-idf向量表示方法:可以解决出现次数和重要性不匹配的问题。
-默认出现的次数越小越重要,取Log。
三、相似度计算的改进
上面所讲的都属于One-hot编码,可以用欧式距离或者余弦计算相似度。
但是这两种方法会有问题么?
答案是会出现问题:假设用0/1 One-hot编码,计算单词之间欧式距离的时候,相似度一样。
用余弦相似度计算也有问题。
所以计算单词之间的相似度的时候不可用One-hot编码。
而且使用One-hot编码的时候,会出现大量的冗余,也不能表示单词之间的语义通顺性。
所以使用分布式的表达。
- 单词向量的分布式表达:向量长度我们自定义,带入一个模型里面,会输出一个计算好的向量。
分布式表达就是词向量:基于词向量求单词的相似度
词向量如何得到?
基于深度学习模型 ,输入大量的语料库,可以输出自己定义维度的词向量。
可用于多个领域,金融,医疗等等。
词向量模型的优点:
- 从词向量到句子embedding
1、对句子进行分词。每一个单词永磁向量来表示
2、用词向量的算数平均数标识句子
3、使用LSTM/RNN来标识句子
案例讲解
匹配句子的时候如何加速?
使用倒排表,先去掉不包含输入句子里面单词的问题,第一层过滤。
然后在进行相似度匹配