LOADING

加载过慢请开启缓存 浏览器默认开启

基于PyWebview与Selenium的智慧树脚本系统踩坑开发日志(三)—— 基于TF-IDF与文本向量化的答案匹配算法

2024/9/25 智慧树脚本 智慧树脚本 selenium 该文总阅读量

基于PyWebview与Selenium的智慧树脚本系统踩坑开发日志(三)—— 基于TF-IDF与文本向量化的答案匹配算法

文本向量化与相似度分析(2024-9-25)

背景

虽然说这个算法确实有点难搞,但是看着标题搞得跟真的一样,其实并没有那么高级。

之前的算法是将匹配到的答案文本进行一堆屎山代码处理之后变为结构化的答案,这种算法非常依赖网站的答案文本,一旦有一个地方少了一小段答案,或者格式错误,直接崩,当年不懂事,只会拉屎(虽然现在也差不多,但现在好歹拉的是香的啊)

但是当年也是有难处的,当年爬取不到题目的文本,只能够模糊匹配爬取到的数据库中各章节答案,在解决了题目文本能准确获取到了之后,就不需要匹配各章节答案了,直接上余弦相似度。

实现

采用这种方式的大致流程如下:获取原始文本->对原始文本进行切块->文本向量化->获取匹配文本->余弦相似度匹配向量->对匹配后的结果进行清洗

其实这个流程最难的是文本切块和加索引,但是对于答案这种来说还好,每一段答案都隔开的,很容易切块;对于文本向量化,一开始用的是Bert进行文本向量化,但是这个我讲实话速度又慢体积又大,稍微计时了一下,1w3的文本切块后在线向量化需要32-34s,只能够用来用它提前把答案加载好然后保存为离线静态的版本,我们的需求是能动态爬取答案匹配,所以完全不够看。

最后用的是TF-IDF逆文档频率算法

算法原理

  • TF-IDF(Term Frequency-Inverse Document Frequency):用于评估一词对于一篇文档的重要性。高频词可能出现在许多文档中,而低频词则更能代表特定文档。

  • 余弦相似度:计算两个向量之间的夹角余弦值,用于衡量它们的相似度,值越接近1表示越相似。

    image-20240925231422106

ocr初始化耗时0.0473475456237793
向量化文本块耗时: 0.031250953674316406秒
answerQuery初始化耗时0.5610225200653076
找到答案,499.依照赫曼全脑模型划分,孙悟空属于( )
答案:象限D:善于用直觉的,整体的,演绎推理的认识与处理问题。
答案 ['象限D', '善于用直觉的,整体的,演绎推理的认识与处理问题。']
answerQuery耗时0.0020482540130615234
['象限D', '善于用直觉的,整体的,演绎推理的认识与处理问题。']

相同的文本加载为向量只需要0.02s左右