为什么我的主题权重的符号从 运行 变为 运行?

Why are the signs of my topic weights changing from run to run?

我是 运行 来自 Gensim Topics and Transformations tutorial 的 LSI 程序,由于某种原因,主题权重的符号不断从正向负切换,反之亦然。例如,这是我使用行

打印时得到的结果
for doc, as_text in zip(corpus_lsi, documents):
    print(doc, as_text)

Run 1
[(0, 0.066007833960900791), (1, 0.52007033063618491), (2, -0.37649581219168904)]
[(0, 0.196675928591421), (1, 0.7609563167700063), (2, 0.5080674581001664)]
[(0, 0.089926399724459982), (1, 0.72418606267525132), (2, -0.408989731553764)]
[(0, 0.075858476521777865), (1, 0.63205515860034334), (2, -0.53935336057339001)]
[(0, 0.10150299184979866), (1, 0.57373084830029653), (2, 0.67093385852959075)]
[(0, 0.70321089393783254), (1, -0.1611518021402539), (2, -0.18266089635241448)]
[(0, 0.87747876731198449), (1, -0.16758906864658912), (2, -0.10880822642632856)]
[(0, 0.90986246868185872), (1, -0.14086553628718496), (2, 0.00087117874886860625)]
[(0, 0.61658253505692762), (1, 0.053929075663897361), (2, 0.25568697959599318)]

Run 2
[(0, 0.066007833960908563), (1, -0.52007033063618446), (2, -0.37649581219168959)]
[(0, 0.19667592859143226), (1, -0.76095631677000253), (2, 0.50806745810016629)]
[(0, 0.089926399724470751), (1, -0.72418606267525032), (2, -0.40898973155376284)]
[(0, 0.075858476521787177), (1, -0.63205515860034223), (2, -0.5393533605733889)]
[(0, 0.10150299184980684), (1, -0.57373084830029419), (2, 0.67093385852959098)]
[(0, 0.70321089393782976), (1, 0.16115180214026417), (2, -0.18266089635241456)]
[(0, 0.87747876731198149), (1, 0.16758906864660211), (2, -0.10880822642632891)]
[(0, 0.90986246868185627), (1, 0.14086553628719861), (2, 0.00087117874886795399)]
[(0, 0.61658253505692828), (1, -0.053929075663887563), (2, 0.25568697959599251)]

Run 3
[(0, 0.066007833960902929), (1, -0.52007033063618535), (2, 0.37649581219168821)]
[(0, 0.19667592859142491), (1, -0.76095631677000497), (2, -0.50806745810016662)]
[(0, 0.089926399724463771), (1, -0.7241860626752511), (2, 0.40898973155376317)]
[(0, 0.075858476521781085), (1, -0.63205515860034334), (2, 0.5393533605733889)]
[(0, 0.10150299184980124), (1, -0.57373084830029542), (2, -0.67093385852959064)]
[(0, 0.70321089393783143), (1, 0.16115180214025732), (2, 0.18266089635241564)]
[(0, 0.87747876731198304), (1, 0.16758906864659326), (2, 0.10880822642632952)]
[(0, 0.90986246868185761), (1, 0.1408655362871892), (2, -0.00087117874886778746)]
[(0, 0.61658253505692784), (1, -0.053929075663894419), (2, -0.25568697959599318)]

我在 PC 上 运行 Python 3.5.2,使用 IntelliJ 编码。

有人在使用 Gensim 库或其他地方遇到过这个问题吗?

有多种可能性:

  1. 主题的顺序可以不同。 Topic/vocabulary 在 运行 秒之间变化。如果你 运行 每次都从头开始(包括词汇生成, 等)有可能你看到的最终主题 在 运行 之间变化或词汇在 运行 之间变化 可以解释差异。
  2. 计算在数值上不稳定。如果有一个接近 0.0 的值可以四舍五入为 -0.0 或 +0.0(取决于有时可能不同的计算顺序)并影响结果的符号,则可能会发生这种情况。这可能与导致它的一般数字错误或 software/hardware 的组合有关。
  3. 一些其他原因尚未确定。

LSI 模型只不过是其下的快速截断 SVD 的实现。 SVD 计算特征向量,这些向量对应于主题。但是,即使乘以 -1 后,特征向量仍然是特征向量。因此,根据算法的实现方式,标志可能会不断翻转。事实上,流行库 LAPACK 的 SVD 实现甚至是 numpy 实现都是这种情况。

符号在这里并不重要,因为乘以 -1 也是一个特征向量。