博文

本篇blog主要记录一下SentHive上面的聚合优化分析,以及一些模块化技巧

图片
cluster_by_similarity_flexible优化 该函数用到了CPU以及GPU两个版本,在这个标题里面,我想分享一下的是我优化这个聚合算法的一个过程,以及最终的结果,还有未来可以拓展再优化的空间。     首先先来说明一下这个算法的思路,来说一下他是输入什么东西,然后得到什么东西,内部是怎么做到的。     输入: 一个字典,{关键句-人数},这个字典是经过了简单聚合,意思就是如果我在一个大文本库中,有些句子一模一样,但是发言的用户不一样,就会把他们合一起,例如“我爱机器学习”: 5642(id),“我爱深度学习”:5643(id),“我爱机器学习”5644(id), 其中“我爱机器学习”有两个人说,所以这个字典是{“我爱机器学习”: 2,“我爱深度学习”: 1}.     输出: 类似如此,输入到该聚合算法的是一个简单聚合后的字典,但是我们想要更近一步地把一些相近的句子合并,这里就用到了 SentenceTransformer 加载的模型,使用他把句子转换为向量,然后使用util.cos_sim方法来获取句子间的相似度,根据他们的相似度聚合。最终输出更加“聚合”的字典,形式类似上面。     内部黑盒: 我是边于运行边写出的这个算法,所以最终的这个呈现的结果肯定没有我分享出这个过程的对比有代表性,先来说一下比较关心的时间复杂度:O(n^2),这个我自己还是有点不满意的, 但是就根据他的核心逻辑:我需要把所有句子向量都和其他句子对比,然后根据他们的相似度合并,也就是一个句子要和N-1个句子对比,每个都要,也就是N(N-1) ,最终看起来也貌似还不错,所以优化的方案留到等下讲,先来说一下我报错/优化的历程。     在最开始的时候,这个算法是这么做的:      1.将字典转换成有序列表,然后提取句子,向量化,得到一个embedding_list,然后再初始化一个processed_words,这个用来记录已经聚类过的句子,初始化一个new_dic,用来输出。     2.外层循环 i ,遍历每一个句子向量,如果他还没有被聚类,则放进字典new_dic,内层循环j, 开始相似度计算(两两配对) ,这里要遍历...
图片
 2024年年末,11月的时候,做了一个宠物市场规模预测,困顿于网络找数据,困顿于第一次做数据分析,没做出想要的结果.现在再回过头看做过的这篇论文,简直不忍直视. 在开始这篇论文的写作时,我对"数学建模"的理解几乎仅限于从数据中推导出一堆数字.所以我就一直找数据,然后通过模型去拟合他们,然后得出结果,但我却忽视了一个很严重的东西:就是当你推导出一串一串的数字,你要怎么去解释他,或者说你要怎么根据这个数字去做出决策. 即使你能够利用数学模型准确预测数据趋势,但如果这些结果它并不能转换为实际的商业决策建议,很难为企业或行业带来价值,更重要的是,单纯的数字分析还是不具备足够的商业思维. 试题如下: 问题一:仅仅分割出猫狗两大类市场,然后使用多元回归模型,用五个宏观变量(人均GDP,人均收入等)预测宠物经济规模. 用ARIMA模型预测未来三年的特征变量(如GDP)的值,然后再代入回归模型. 结果是预测出2024年-2026年宠物经济规模,猫狗市场份额. 问题二:思路是用公式 市场规模 = 需求量 x 单价, 反推需求量.假设全球猫狗占比与中国相同. 模型复用,预测全球市场规模和单价. 预测2024-2026全球需求,解释为"需求下降因高端化趋势" 问题三:数据跨度短,改用了线性回归预测生产和出口值. 验证方法采用自洽性检验. 问题四:假定美国关税2014-2017 = 10%, 2018-2023 = 20% 测试税率,汇率,市场份额对出口的影响 结论是税率和汇率影响最大,建议"转向低关税市场" 所有的问题都停留在了"预测数值",但是没有回答出:到底这个数值,可以指导出什么样的商业方案,可以怎么样根据它去进行更合理的决策. 现在回过头来再看,确实疏忽了.以下是论文原文: