1. 简介
NLP 是 natural language processing 的三个英文词的首写字母,意思是自然语言处理。学习NLP,对于想直接应用在产品场景的,首先要弄懂word2vec,然后是 BERT 模型。那我们先来解释一下word2vec和BERT 模型。听完解释,初学者可能会觉得,怎么这么简单呢!
1.1 word2vec
word2vec 从 word to vector 来。word是词汇,比如 Elephant (大象),mouse (老鼠),dog (狗),pet dog (宠物犬),Lion (狮子)。vector 就是向量,就是带有方向的坐标。word2vec 就是将一个一个word 词汇转换为 坐标系上一个一个向量。
word2vec 其实就是一种技术,一种算法,将词汇word变成向量。比如狮子是一个向量,大象是一个向量,dog也是一个向量。通过word2vec,近似的动物和词汇会靠得近,距离近。形象的说,鳄鱼和狮子的向量靠得比狗的向量要近。狗和猫的向量靠得要比狗和老鼠的距离近。也就是说,这个word2vec 通过算法,将词汇相近意思或形态的靠得就近。
1.2 Bert模型
而BERT模型是也是通过某种算法训练出来的词汇的向量集。是现成可以用的模型,减少开发者大量的时间,精力和财力。
1.3 word2vec 和 BERT 不同
Word2Vec 将词汇转换成向量是和上下文无关的,也就是词汇在不同句子里,转换出的向量结果是不变的。BERT模型则不同,词汇转换为不同的向量,根据词汇的上下文不同而不同。BERT模型当然更胜一筹。
2. 深入浅出介绍
向量有什么用呢,可以计算啊!可以用数学公式计算啊!比如向量之间的夹角可以看出两个词汇之间的近似度。
解释到现在,初学者肯定要问,我想了解词汇和向量的关系,wod2vec 有哪些算法?如果您是有一定英文基础的,不妨看看这篇将计算机问题,变成浅显的文字解释。这篇文章,写得非常棒,可能要VPN。也是笔者开始学习NLP的首篇文章。多看几遍。如果不愿意看英文,就看我的解释,虽然不会有英语原文那样深入浅出,但还是能应付一下。
图1
图1,我是根据某种算法,就是体积,凶残度将一些动物转换为向量。在脑子里,宠物狗跟大象差了老远,狼和老虎有点近似,老虎和狮子是非常近似。词和词的距离就是他们的相似度。有的word2vec的算法是词和词的向量的夹角成为相似度。
对于,想出略的看一下word2vec到底有几种算法,可以看这篇文章,可能也要VPN。我们不会展开对算法的解释,但初学者可以想象就是通过一些逻辑将词汇转换成向量。而有了向量,我们就可以作数学运算了。
import math
def distance2d(x1, y1, x2, y2):
return math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
图 2
def meanv(coords):
# assumes every item in coords has same length as item 0
sumv = [0] * len(coords[0])
for item in coords:
for i in range(len(item)):
sumv[i] += item[i]
mean = [0] * len(sumv)
for i in range(len(sumv)):
mean[i] = float(sumv[i]) / len(coords)
return mean
图 3
import numpy as np
from numpy import dot
from numpy.linalg import norm
# cosine similarity
def cosine(v1, v2):
if norm(v1) > 0 and norm(v2) > 0:
return dot(v1, v2) / (norm(v1) * norm(v2))
else:
return 0.0
图 4
读者可以展开丰富的想象,怎样计算一个句子的向量的平均值,两个向量之间夹角的cosine值,这些都可以作为词或句子的相似度计算。
3. 应用
有了相似度计算,
3.1 告警聚合
是不是把相似的zabbix告警聚合。
3.2 舆情分析
是不是可以通过爬虫把评论截下来,聚合,然后进行舆情分析,并可以对重要节点标记,谁可能是关键节点,波及率更广。这些都留给读者思考。我的第一阶段抛砖引玉就到这里。
4. 参考文献
1. https://gist.github.com/aparrish/2f562e3737544cf29aaf1af30362f469
2. https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/