NLP
Last updated
Last updated
TF-IDF 用于计算文档中的每个单词的重要性,这样便可以得到文档中的关键词,问题定义为:给定一个文本集合 ,对于每个文档 ,需要计算文档 中每个单词 的重要性
计算公式为:
term frequecy(词频):
其中 为单词 在文档 中出现的次数。
inverse document frequency(逆文档词频):
具体计算相似度的方法为:
修正项(非必须,且不同 BM25 算法对此项的处理略有不同)
完整公式
动机
对于英文来说,词的数量可能太多。同一个词根,可以通过修改前/后缀的方式来得到动词形式,名词形式,副词形式,例如如下词表:
own、owner、play、player、research、researcher、care、careful、hope、hopeful。
使用词作为 embeding 的最小单位,需要 10 个向量。但如果拆解为:
own、play、research、care、hope、er、ful。
那么仅需要 7 个向量,且这些词根和前/后缀有着某种含义。因此 embeding 的对象为这些 word piece,似乎比较合理。这带来一个问题,上面的拆解过程是人工找的规律(需要语言学的专业知识),因此需要用一个算法来自动发现这些 word piece。BPE 算法就是一种自动发现 word piece 的算法
具体算法流程参考博客:Byte Pair Encoding
即普通的语言模型: 根据已经见到的内容预测下一个 token
参考博客: https://www.projectpro.io/recipes/what-is-causal-language-modeling-transformers
The task of predicting the token after a sequence of tokens is known as causal language modeling. In this case, the model is just concerned with the left context (tokens on the left of the mask).
其中 在文档底库中有多少个文档包含词 。
BM 算法用于文本检索 (elasticsearch 2.x 版本所使用的算法)。检索问题的定义如下:给定一个文本集合 ,输入一个文本 ,按相关性得到底库 中最相关的文本。
BM25 算法框架为:对于每个底库文档 ,计算查询 与文档 的相似度,之后按相似度排序即可。
其中 表示查询 中不同的单词的个数。
单词权重:
其中 为 的每个单词(如果某个单词出现了多次,求和项中只计算一次), 为每个单词的权重。而 的定义为:
其中 为底库中包含单词 的文档个数。因此词 在每个文档出现的越频繁(例如停用词),则其对搜索结果的权重越小。
单词相关度:
而 的定义为:
其中 与 为超参数,一般设置为 , 为文档 的长度, 为文档底库 的平均长度。而 即为 term frequency:
其中 为单词 在文档 中出现的次数。
当 比较长时,还需要对权重 做一步修正:
其中 表示 term frequency (单词 在文档 中出现的次数),而 在文档底库中有多少个文档包含词 。