使用Latent Semantic Analysis(LSA)判断文档所属主题的方法咨询
首先明确LSA通过TruncatedSVD输出的主题载荷数值的含义:数值的正负仅代表文档在对应主题语义轴上的方向差异,绝对值大小才是文档和该主题的关联强度,负号不代表无关联,仅代表和该主题的典型语义方向相反,你担心的负号影响完全可以通过取绝对值消除。
以下是几种可落地的判断思路:
固定阈值法
对每个主题列的所有载荷值取绝对值,统计所有文档该主题绝对值的均值/中位数/分位数作为判定阈值,单篇文档对应主题的绝对值超过阈值即可判定为和该主题相关。
以你的测试数据为例:topic_2列所有数值的绝对值为[0.074881, 0.192278, 0.192278, 0.360146],中位数约0.19,那么text_2、text_3、text_4的topic_2绝对值都超过中位数,可判定为和topic_2相关;text_1低于阈值,判定为不相关。最大关联归属法
如果需求是单篇文档仅归属到一个最相关的主题,直接对每一行的所有主题载荷取绝对值,取最大值对应的主题作为文档的归属主题即可。
以你的测试数据为例:text_4的topic_2绝对值0.36高于topic_1的0.316,所以归属到topic_2;其余三篇文档的topic_1绝对值都更高,归属到topic_1。适配负号的肘部法
你原本想用的肘部法可以调整后使用:先将待判定主题的所有载荷取绝对值,降序排序后再绘制肘部曲线找拐点,拐点以上的文档即可判定为和该主题相关,完全规避负号带来的偏差。
另外可以结合你的测试数据验证语义逻辑:你样本中topic_2的正向载荷对应文档内容为fox相关,负向载荷对应dog相关,本质是语义方向的差异,如果你需要进一步区分正负向语义簇,可以在取绝对值判定关联后,再根据符号判断属于该主题下的正向/负向子簇。
内容的提问来源于stack exchange,提问作者LJG

