词向量演变

本文基于以下视频
从词袋法到词嵌入,词向量是如何演进的? BGE | TF-IDF | 词袋法 | WordEmbedding

NLP研究离不开数学,文本是没有办法输入电脑进行运算的,必须化约为数字信号;文本一般会转化为向量,将信息作为特征投射到向量中,这个过程称为文本向量化

文本向量化方法的不断演进本质是在提升文本向量所包含的信息量,信息量越多,NLP工作(文本分类、文本检索、文本翻译等)效果就越好;

1.词袋法

文本向量化早期方法是词袋法(天然是去重的),将多个文档的语句去除标点符号,进行分词,去重,得到词表;

将每个文档和词表进行比对,该词出现,特征设为1,否则置为0,此时词向量的特征传递的信息是有没有这个词,对于垃圾邮件识别,有没有特定的词就足够;

但是,一个词在一个文档出现次数是1,在另一个文档出现次数是2,词频也是重要的信息,因此衍生出了无去重词袋法,将该词出现的次数填入词表,此时词向量传递的信息是有多少这个词;

2. TF IDF

接着,又出现了问题,如果仅将词频作为抽取关键字的依据,似乎不太合理,关键词一般是稀有的,越稀有越有区分度、代表性,而不是常见的;因此我们需要综合考量稀有度和词频这两个维度,而词频这个维度本身也有优化的空间,如果将文档中该词出现的次数作为特征,长文档会占优势,但是量从不代表质,真理往往是以朴素的形式出现的,所以我们将词频优化为该词在文档中出现的次数/文档包含的词语总数(TF),这样可以消解文档长度对词向量的影响;接着,稀有度=总文档数/出现该词的文档数,该词出现的文档数越多,这个比值越小,该词越普通;该词出现的文档数越少,这个比值越大,该词越稀有,但是此时这个文档数多一个少一个其实有些随机,但是影响很大,也就是比值容易受极端值影响,取对数,做平滑处理,结果更稳定,NLP工作效果更好,IDF=log(总文档数/出现该词的文档数);与文档总体有关,与具体文档没有太大关系;IF*IDF最后得到词表矩阵

3. 词嵌入

在影评情绪分类中,这电影很好和这电影很棒是一个意思,但是上述方法,每个词语独占一个维度,彼此孤立,捕捉不到语义及其相似度,词嵌入(word embedding)应运而生

3.1 静态 word2vec

早期是静态词嵌入,谷歌的做法是如果两个词周围总是出现相同的词,就认为这两个词语义是相似的;我们需要准备海量数据,构建词表矩阵,构建神经网络模型(任务是根据周围的词预测中间的词,CBOW,Continuous Bag-of-Words),将两个词匹配词表得到词向量,将词向量输入模型,模型计算输出预测结果,计算预测值和目标值之间的损失(前向传播),模型以此更新词表矩阵和模型参数(反向传播),这样的训练过程会不断进行,词表矩阵中的词向量也会不断调整,最终趋于稳定,这个过程叫做收敛,丢掉模型,保留词表矩阵(嵌入矩阵),下次开展NLP任务时,只需要拿着词去匹配词表矩阵得到词向量就可以用了,如果是词表矩阵中没有这个词(这种情况不多),给个默认值就可以了

还有根据中间的词预测周围的词,skip-gram;其实每一次预测都是在问猜猜我周围有谁,Word2vec的理念是,要想了解一个人,看看Ta身边都有谁,看看Ta的信息流里有什么,如果Ta关注了知识博主,说明Ta是个爱学习的人;如果Ta关注了运动博主,说明Ta是个爱运动的人

模型发现好、棒经常在很、非常等相同的词附近出现,就会意识到二者相似,我们可以通过余弦相似度计算向量的相关性

词向量能够捕捉语义相似度,大大提高文本检索、文本翻译等NLP工作的效果

3.2 动态

但是这种方法没有考虑词之间的顺序一词多义的情况,我爱你和你爱我在分词之后得到的词向量是一样的,这在数学上是等价的(这于我们每个人是极好的,但这是很难做到的),但是语义并不同;而且苹果可以是手机,也可以是"一天一苹果,医生远离我",而词表矩阵是预先生成好的,一个词只有一种表达方式,这正是它的缺陷;有问题,就会有办法,我们需要的是根据实际上下文动态预测语义,也就是现在大模型的根基transformer,它的attention机制可以发挥根据上下文动态捕捉语义的功能,写到这里,不禁感叹,知识大厦是无数先辈不断发现问题、解决问题堆砌起来的,没有什么是空穴来风,马克思主义基本概论上有这么一句话"社会上一旦有技术的需要,这种需要就会比十所大学更能把科学推向前进",这是我们实际NLP工作的需要催生的技术

现在主流的transformer架构是BGE(BGE(BAAI General Embedding))模型,如何训练呢,首先准备海量的文本数据------语料库,获取词表矩阵,接着初始化词向量,选一个预训练好的模型,比如Bert,选定一批样本,包括锚点样本及锚点样本对应的锚点正样本锚点负样本,一般负样本有多个,锚点样本及对应的正负样本输入模型,计算后输出结果,分别分析锚点样本的输出结果和正、负样本的输出结果S正、S负1、S负2等,S正越大越好,S负越小越好,计算损失,更新词向量和参数,接着进行下一批数据训练,直至模型收敛,保留模型,下一次开展NLP工作时,不仅仅去词表中匹配,把文本输入模型,得到词向量,在不同语境下会有不同解释

现在的模型甚至能够读懂隐喻和类比,BGE之所以效果好,样本的选取非常重要,在选取正样本时,选择了很多形式上不相似,但语义相似的硬正样本;选择负样本时,选择了很多形式上相似,语义不相似的硬负样本;这叫做对比学习

千方百计地给模型制造难度,如果模型连大家来找茬的游戏能处理地很好,那么生成的向量相比很有语义区分度

attention机制实现动态捕捉语义

对比学习提高语义区分度

现在BGE的应用主要是RAG,检索增强生成(Retrieval Augmented Generation)

相关推荐
莱昂纳多迪卡普利奥1 天前
LLM学习指南(二)—— NLP基础
人工智能·语言模型·自然语言处理·nlp
A7bert7771 天前
【DeepSeek R1部署至RK3588】RKLLM转换→板端部署→局域网web浏览
c++·人工智能·深度学习·ubuntu·自然语言处理·nlp
All The Way North-3 天前
RNN基本介绍
rnn·深度学习·nlp·循环神经网络·时间序列
闲看云起3 天前
大模型注意力机制进化史:从全局到稀疏,从标准到线性、滑动窗口、MQA……
人工智能·语言模型·nlp
Pyeako3 天前
机器学习--TF-IDF&红楼梦案例
机器学习·nlp·tf-idf·红楼梦·自然语言学习
Learn Beyond Limits4 天前
解构语义:从词向量到神经分类|Decoding Semantics: Word Vectors and Neural Classification
人工智能·算法·机器学习·ai·分类·数据挖掘·nlp
gravity_w5 天前
Hugging Face使用指南
人工智能·经验分享·笔记·深度学习·语言模型·nlp
未来之窗软件服务9 天前
幽冥大陆(九十三 ) PHP分词服务源码 —东方仙盟练气期
人工智能·nlp·仙盟创梦ide·东方仙盟·分词服务