tomotopy
.. image:: https://badge.fury.io/py/tomotopy.svg :target: https://pypi.python.org/pypi/tomotopy
.. image:: https://zenodo.org/badge/186155463.svg :target: https://zenodo.org/badge/latestdoi/186155463
🌐
English,
한국어
_.
.. _한국어: README.kr.rst
什么是tomotopy?
tomotopy
是 tomoto
(主题建模工具)的一个Python扩展,它是一个基于Gibbs抽样的主题模型库,用C++编写。
它利用现代CPU的矢量化来最大化速度。
tomoto
的当前版本支持几种主要的主题模型,包括
- 潜在狄利克雷分配 (
tomotopy.LDAModel
) - 标记LDA (
tomotopy.LLDAModel
) - 部分标记LDA (
tomotopy.PLDAModel
) - 监督LDA (
tomotopy.SLDAModel
) - 狄利克雷多项式回归 (
tomotopy.DMRModel
) - 广义狄利克雷多项式回归 (
tomotopy.GDMRModel
) - 分层狄利克雷过程 (
tomotopy.HDPModel
) - 分层LDA (
tomotopy.HLDAModel
) - 多粒度LDA (
tomotopy.MGLDAModel
) - Pachinko分配 (
tomotopy.PAModel
) - 分层PA (
tomotopy.HPAModel
) - 相关主题模型 (
tomotopy.CTModel
) - 动态主题模型 (
tomotopy.DTModel
) - 基于伪文档的主题模型 (
tomotopy.PTModel
).
请访问https://bab2min.github.io/tomotopy 查看更多信息。
入门指南
您可以使用pip轻松安装tomotopy。(https://pypi.org/project/tomotopy/) ::
$ pip install --upgrade pip
$ pip install tomotopy
支持的操作系统和Python版本有:
- Linux (x86-64),Python >= 3.6
- macOS >= 10.13,Python >= 3.6
- Windows 7或更高版本 (x86, x86-64),Python >= 3.6
- 其他操作系统,Python >= 3.6:需要从源代码编译 (使用c++14兼容编译器)
安装后,您可以通过简单地导入来启动tomotopy。 ::
import tomotopy as tp
print(tp.isa) # 输出'avx2', 'avx', 'sse2'或'none'
目前,tomotopy可以利用AVX2、AVX或SSE2 SIMD指令集来最大化性能。
当软件包被导入时,它会检查可用的指令集并选择最佳选项。
如果 tp.isa
显示 none
,训练迭代可能需要很长时间。
但是,由于大多数现代Intel或AMD CPU提供SIMD指令集,SIMD加速可以显著提升性能。
以下是一个从'sample.txt'文件进行简单LDA训练的示例代码。 ::
import tomotopy as tp
mdl = tp.LDAModel(k=20)
for line in open('sample.txt'):
mdl.add_doc(line.strip().split())
for i in range(0, 100, 10):
mdl.train(10)
print('Iteration: {}\tLog-likelihood: {}'.format(i, mdl.ll_per_word))
for k in range(mdl.k):
print('Top 10 words of topic #{}'.format(k))
print(mdl.get_topic_words(k, top_n=10))
mdl.summary()
tomotopy的性能
tomotopy
使用Collapsed Gibbs-Sampling(CGS)来推断主题的分布和词的分布。
一般来说CGS比 gensim's LdaModel
_ 使用的变分贝叶斯(VB)收敛得更慢,但其迭代计算速度更快。
此外,tomotopy
可以利用多核CPU和SIMD指令集,从而加快迭代速度。
.. _gensim's LdaModel: https://radimrehurek.com/gensim/models/ldamodel.html
下图显示了 tomotopy
和 gensim
的LDA模型运行时间的比较。
输入数据包括1000篇来自英语维基百科的随机文档,共1,506,966个词(约10.1 MB)。
tomotopy
训练200次迭代, gensim
训练10次迭代。
.. image:: https://bab2min.github.io/tomotopy/images/tmt_i5.png
在Intel i5-6600, x86-64 (4核)上的性能
.. image:: https://bab2min.github.io/tomotopy/images/tmt_xeon.png
在Intel Xeon E5-2620 v4, x86-64 (8核, 16线程)上的性能
尽管 tomotopy
迭代次数多20倍,总的运行时间比 gensim
快5到10倍。而且结果稳定。
直接比较CGS和VB是困难的,因为它们是完全不同的技术。 但从实际角度来看,我们可以比较它们的速度和结果。 下图显示了两组模型结果的每词对数似然值对比。
.. image:: https://bab2min.github.io/tomotopy/images/LLComp.png
SIMD指令集对性能有很大的影响。以下是SIMD指令集间的比较。
.. image:: https://bab2min.github.io/tomotopy/images/SIMDComp.png
幸运的是,大多数现代的x86-64 CPU提供AVX2指令集,因此我们可以享受AVX2的性能。
模型保存和加载
tomotopy
为每个主题模型类提供 save
和 load
方法,
因此,您可以随时将模型保存到文件中,并从文件中重新加载它。
::
import tomotopy as tp
mdl = tp.HDPModel()
for line in open('sample.txt'):
mdl.add_doc(line.strip().split())
for i in range(0, 100, 10):
mdl.train(10)
print('Iteration: {}\tLog-likelihood: {}'.format(i, mdl.ll_per_word))
# 保存到文件
mdl.save('sample_hdp_model.bin')
# 从文件中加载
mdl = tp.HDPModel.load('sample_hdp_model.bin')
for k in range(mdl.k):
if not mdl.is_live_topic(k): continue
print('Top 10 words of topic #{}'.format(k))
print(mdl.get_topic_words(k, top_n=10))
# 保存的模型是HDP模型,
# 因此当您用LDA模型加载它时,它会抛出异常
mdl = tp.LDAModel.load('sample_hdp_model.bin')
当您从文件加载模型时,文件中的模型类型应与方法的类匹配。
请参阅 tomotopy.LDAModel.save
和 tomotopy.LDAModel.load
方法。
交互模式查看器
.. raw:: html
<video src="https://private-user-images.githubusercontent.com/19266222/355924875-fc9d27f5-5542-4e65-ab69-1d96dc0913af.mp4?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMwNTI4MTUsIm5iZiI6MTcyMzA1MjUxNSwicGF0aCI6Ii8xOTI2NjIyMi8zNTU5MjQ4NzUtZmM5ZDI3ZjUtNTU0Mi00ZTY1LWFiNjktMWQ5NmRjMDkxM2FmLm1wND9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA3VDE3NDE1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk1N2YxODE3MzBiZTNhMjkyNTk1OWJkODRmZjc4ZTcyYzFkZGYxZjgxODUxYTNlNGYxMzllOTgzNDI0MjA4ZDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.evTswIGMps594nQ6JCtbd6puFM8ARHM0emgaluIUxvY" style="max-width:100%"></video>
自v0.13.0版起, 您可以使用交互查看器查看建模结果。
::
import tomotopy as tp
model = tp.LDAModel(...)
# ...一些训练代码...
tp.viewer.open_viewer(model, host="localhost", port=9999)
# 然后在您的网络浏览器中打开 http://localhost:9999!
如果您有保存的模型文件,您也可以使用以下命令行。
::
python -m tomotopy.viewer a_trained_model.bin --host localhost --port 9999
请参阅更多内容,参见 tomotopy.viewer
模块。
模型内文档与模型外文档
我们可以使用主题模型用于两个主要目的。 基本目的是从一组文档中发现主题作为训练模型的结果, 更高级的目的是利用训练好的模型推断非见过文档的主题分布。
我们将用于前一种目的的文档(用于模型训练)称为 模型内文档, 将后一种目的中的文档(训练期间未见过的文档)称为 模型外文档。
在 tomotopy
中,这两种不同类型的文档是以不同方式生成的。
模型内文档 可以通过 tomotopy.LDAModel.add_doc
方法创建。
add_doc
可以在 tomotopy.LDAModel.train
开始之前调用。
换句话说,调用 train
之后,不能通过 add_doc
将文档添加到模型中,因为用于训练的文档集合已经固定。
要获取创建的文档实例,应使用 tomotopy.LDAModel.docs
,如:
::
mdl = tp.LDAModel(k=20)
idx = mdl.add_doc(words)
if idx < 0: raise RuntimeError("Failed to add doc")
doc_inst = mdl.docs[idx]
# doc_inst 是添加的文档实例
模型外文档 由 tomotopy.LDAModel.make_doc
方法生成。 make_doc
只能在 train
开始后调用。
如果在训练使用的文档集合尚未固定之前使用 make_doc
,可能会得到错误的结果。
由于 make_doc
直接返回实例,可以使用它的返回值进行其他操作。
::
mdl = tp.LDAModel(k=20)
# add_doc ...
mdl.train(100)
doc_inst = mdl.make_doc(unseen_doc) # doc_inst 是未见文档的实例
非见文档推断
如果一个新文档由 tomotopy.LDAModel.make_doc
创建,其主题分布可以由模型推断。
非见文档的推断应使用 tomotopy.LDAModel.infer
方法进行。
::
mdl = tp.LDAModel(k=20)
# add_doc ...
mdl.train(100)
doc_inst = mdl.make_doc(unseen_doc)
topic_dist, ll = mdl.infer(doc_inst)
print("非见文档的主题分布: ", topic_dist)
print("推断的对数似然值: ", ll)
infer
方法只能推断一个 tomotopy.Document
实例或一个 tomotopy.Document
实例列表。
请参阅更多内容,参见 tomotopy.LDAModel.infer
。
语料库和转换
tomotopy
中的每个主题模型都有其内部的文档类型。
每个模型通过其 add_doc
方法创建和添加适合的文档。
但是,尝试将同一文档列表添加到不同的模型会变得相当不便,
因为必须对每个不同模型调用 add_doc
为相同的文档列表。
因此,tomotopy
提供 tomotopy.utils.Corpus
类来保存文档列表。
通过将语料库传递给每个模型的 __init__
或 add_corpus
方法, tomotopy.utils.Corpus
可以插入任何模型。
因此,插入 tomotopy.utils.Corpus
与插入语料库保存的文档具有相同效果。
一些主题模型要求其文档具有不同数据。
例如, tomotopy.DMRModel
需要 str
类型的 metadata
参数,
但 tomotopy.PLDAModel
需要 List[str]
类型的 labels
参数。
由于 tomotopy.utils.Corpus
持有独立于特定主题模型的数据集,
当语料库被添加到该主题模型时,可能会出现数据类型不一致的情况。
在这种情况下,可以使用 transform
参数将杂项数据转换为适合的目标主题模型。
请参阅以下代码了解更多详情:
::
from tomotopy import DMRModel
from tomotopy.utils import Corpus
corpus = Corpus()
corpus.add_doc("a b c d e".split(), a_data=1)
corpus.add_doc("e f g h i".split(), a_data=2)
corpus.add_doc("i j k l m".split(), a_data=3)
model = DMRModel(k=10)
model.add_corpus(corpus)
# 您将失去语料库的 `a_data` 字段,
# 而 `DMRModel` 所需的 `metadata` 被填充为默认值,空字符串。
assert model.docs[0].metadata == ''
assert model.docs[1].metadata == ''
assert model.docs[2].metadata == ''
def transform_a_data_to_metadata(misc: dict):
return {'metadata': str(misc['a_data'])}
# 此函数将 `a_data` 转换为 `metadata`
model = DMRModel(k=10)
model.add_corpus(corpus, transform=transform_a_data_to_metadata)
# 现在模型中的文档有了由 `a_data` 字段生成的非默认 `metadata`。
assert model.docs[0].metadata == '1'
assert model.docs[1].metadata == '2'
assert model.docs[2].metadata == '3'
并行抽样算法
自0.5.0版本以来,tomotopy
允许您选择并行算法。
0.4.2之前版本中提供的算法是 COPY_MERGE
,它适用于所有主题模型。
0.5.0版本推出的新算法 PARTITION
,通常使训练速度更快且内存效率更高,但并非适用于所有主题模型。
下图显示了基于主题数量和工作线程数量的两种算法之间的速度差异。
.. image:: https://bab2min.github.io/tomotopy/images/algo_comp.png 性能变化
版本性能
版本性能变化显示在以下图表中。 测量了运行LDA模型训练1000次迭代所需的时间。 (文档:11314,词汇:60382,单词:2364724,Intel Xeon Gold 5120 @2.2GHz)
.. image:: https://bab2min.github.io/tomotopy/images/lda-perf-t1.png
.. image:: https://bab2min.github.io/tomotopy/images/lda-perf-t4.png
.. image:: https://bab2min.github.io/tomotopy/images/lda-perf-t8.png
使用单词先验固定主题
自版本0.6.0起,新增了方法 tomotopy.LDAModel.set_word_prior
。它允许你对每个主题的单词先验进行控制。
例如,我们可以通过以下代码将单词'church'的权重在主题0上设置为1.0,而在其他主题上设置为0.1。
这意味着单词'church'被分配到主题0的概率比分配到其他主题的概率高10倍。
因此,大部分的'church'被分配到主题0,所以主题0包含了很多与'church'相关的单词。
这允许将某些主题固定到特定的主题编号。
::
import tomotopy as tp
mdl = tp.LDAModel(k=20)
# 将文档添加到 `mdl`
# 设置单词先验
mdl.set_word_prior('church', [1.0 如果 k == 0 否则 0.1 对于 k 在 范围(20)])
详细信息请参见 example.py
中的 word_prior_example
。
示例
你可以在 https://github.com/bab2min/tomotopy/blob/main/examples/ 找到tomotopy的示例Python代码。
你也可以从 https://drive.google.com/file/d/18OpNijd4iwPyYZ2O7pQoPyeTAKEXa71J/view 获取示例代码中使用的数据文件。
许可证
tomotopy
根据 MIT 许可证条款授权,
这意味着你可以将其用于任何合理的目的,并且完全拥有所有生成的文档的所有权。
历史
-
0.13.0 (2024-08-05)
- 新特性
- 主要特性:主题模型查看器
tomotopy.viewer.open_viewer()
现在已准备就绪。 - 添加了
tomotopy.LDAModel.get_hash()
。你可以获取模型的128位哈希值。 - 为
tomotopy.utils.SimpleTokenizer
添加了参数ngram_list
。
- 主要特性:主题模型查看器
- Bug 修复
- 修复了在调用
Corpus.concat_ngrams
后不一致的spans
错误。 - 优化了
tomotopy.LDAModel.load()
和tomotopy.LDAModel.save()
的瓶颈,速度提高了10倍以上。
- 修复了在调用
- 新特性
-
0.12.7 (2023-12-19)
- 新特性
- 添加了主题模型查看器
tomotopy.viewer.open_viewer()
- 优化了
tomotopy.utils.Corpus.process()
的性能
- 添加了主题模型查看器
- Bug 修复
- 现在
Document.span
返回的范围以字符单位而不是字节单位。
- 现在
- 新特性
-
0.12.6 (2023-12-11)
- 新特性
- 为
tomotopy.LDAModel.train
和tomotopy.LDAModel.set_word_prior
添加了一些方便的功能。 - 现在
LDAModel.train
有新的参数callback
,callback_interval
和show_progres
以监控训练进度。 - 现在
LDAModel.set_word_prior
可以接受Dict[int, float]
类型作为其参数prior
。
- 为
- 新特性
-
0.12.5 (2023-08-03)
- 新特性
- 添加了对Linux ARM64架构的支持。
- 新特性
-
0.12.4 (2023-01-22)
- 新特性
- 添加了对macOS ARM64架构的支持。
- Bug 修复
- 修复了
tomotopy.Document.get_sub_topic_dist()
抛出错误参数异常的问题。 - 修复了导致某些时候崩溃的异常问题。
- 修复了
- 新特性
-
0.12.3 (2022-07-19)
- 新特性
- 现在使用
tomotopy.LDAModel.add_doc()
插入空文档会忽略它而不是抛出异常。如果新添加的参数ignore_empty_words
设置为False,则和之前一样会抛出异常。 - 添加了
tomotopy.HDPModel.purge_dead_topics()
方法以从模型中移除未存活的主题。
- 现在使用
- Bug 修复
- 修复了在
tomotopy.SLDAModel
中预防设置用户自定义参数nuSq
的问题 (由 @jucendrero 提供)。 - 修复了
tomotopy.utils.Coherence
无法对tomotopy.DTModel
工作的问题。 - 修复了在
train()
之前调用make_dic()
经常导致崩溃的问题。 - 解决了即使种子已固定,
tomotopy.DMRModel
和tomotopy.GDMRModel
的结果不同的问题。 - 改进了
tomotopy.DMRModel
和tomotopy.GDMRModel
的参数优化过程。 - 修复了在调用
tomotopy.PTModel.copy()
时有时会崩溃的问题。
- 修复了在
- 新特性
-
0.12.2 (2021-09-06)
- 修复了调用带有
min_cf > 0
,min_df > 0
或rm_top > 0
参数的tomotopy.HDPModel.convert_to_lda
导致崩溃的问题。 - 为
tomotopy.Document.get_topics
和tomotopy.Document.get_topic_dist
添加了新的参数from_pseudo_doc
。 该参数仅对PTModel
的文档有效,它可以控制计算主题分布的来源。 - 修改了
tomotopy.PTModel
的参数p
的默认值。新默认值为k * 10
。 - 使用
make_doc
生成的文档而不调用infer
不再导致崩溃,而是仅打印警告消息。 - 修复了内置 C++ 代码在 clang c++17 环境中不能编译的问题。
- 修复了调用带有
-
0.12.1 (2021-06-20)
- 修复了
tomotopy.LDAModel.set_word_prior()
导致崩溃的问题。 - 现在
tomotopy.LDAModel.perplexity
和tomotopy.LDAModel.ll_per_word
在TermWeight
不是ONE
时返回准确值。 - 添加了
tomotopy.LDAModel.used_vocab_weighted_freq
,它返回经过词权重处理的频率。 - 现在
tomotopy.LDAModel.summary()
显示的不仅是单词的熵,还有经过词权重处理的单词的熵。
- 修复了
-
0.12.0 (2021-04-26)
- 现在
tomotopy.DMRModel
和tomotopy.GDMRModel
支持多值元数据(参见 https://github.com/bab2min/tomotopy/blob/main/examples/dmr_multi_label.py ) - 提高了
tomotopy.GDMRModel
的性能。 - 为所有主题模型添加了
copy()
方法以做深复制。 - 修复了被排除训练(通过
min_cf
,min_df
)的单词拥有不正确的主题ID的问题。现在所有排除的单词的主题ID为-1
。 - 现在所有
tomotopy
生成的异常和警告都遵循标准的Python类型。 - 提升了编译要求到C++14。
- 现在
-
0.11.1 (2021-03-28)
- 修复了非对称alpha值的关键错误。由于这个错误,版本0.11.0已经从发布中移除。
-
0.11.0 (2021-03-26) (已移除)
- 新增了一个新的主题模型
tomotopy.PTModel
针对短文本。 - 修复了
tomotopy.HDPModel.infer
有时导致分段错误的问题。 - 修复了numpy API版本不匹配的问题。
- 现在支持非对称的文档-主题先验。
- 支持将主题模型序列化成内存中的
bytes
。 - 为
get_topic_dist()
,get_topic_word_dist()
和get_sub_topic_dist()
添加了参数normalize
来控制结果的规范化。 - 现在
tomotopy.DMRModel.lambdas
和tomotopy.DMRModel.alpha
返回正确的值。 - 为
tomotopy.GDMRModel
添加了分类元数据支持(参见 https://github.com/bab2min/tomotopy/blob/main/examples/gdmr_both_categorical_and_numerical.py )。 - 不再支持Python3.5。
- 新增了一个新的主题模型
-
0.10.2 (2021-02-16)
- 修复了
tomotopy.CTModel.train
在大K值情况下失败的问题。 - 修复了
tomotopy.utils.Corpus
丢失uid
值的问题。
- 修复了
-
0.10.1 (2021-02-14)
- 修复了
tomotopy.utils.Corpus.extract_ngrams
在空输入情况下崩溃的问题。 - 修复了
tomotopy.LDAModel.infer
在有效输入下抛出异常的问题。 - 修复了
tomotopy.HLDAModel.infer
生成错误的tomotopy.Document.path
的问题。 - 由于新增了
freeze_topics
参数,用于tomotopy.HLDAModel.train
,你可以控制在训练时是否创建新主题。
- 修复了
-
0.10.0 (2020-12-19)
tomotopy.utils.Corpus
和tomotopy.LDAModel.docs
的界面统一了。现在你可以以相同的方式访问语料库中的文档。- 改进了
tomotopy.utils.Corpus
的__getitem__
。不仅仅是支持按int索引,还支持通过Iterable[int]索引和切片。还支持通过uid索引。 - 新增了
tomotopy.utils.Corpus.extract_ngrams
和tomotopy.utils.Corpus.concat_ngrams
方法。它们使用PMI提取n-gram搭配并将其连接成一个单字。 - 新方法
tomotopy.LDAModel.add_corpus
被添加,且tomotopy.LDAModel.infer
可以接收语料库作为输入。 - 新模块
tomotopy.coherence
添加了。它提供了计算模型一致性的方法。 - 为
tomotopy.label.FoRelevance
添加了window_size
参数。 - 修复了在训练
tomotopy.HDPModel
时经常发生的NaN问题。 - 现在支持Python3.9。
- 移除了对py-cpuinfo的依赖,并改进了模块的初始化。
-
0.9.1 (2020-08-08)
- 修复了版本0.9.0的内存泄漏。
- 修复了
tomotopy.CTModel.summary()
。
-
0.9.0 (2020-08-04)
- 添加了
tomotopy.LDAModel.summary()
方法,它打印模型的易读摘要。 - 包的随机数生成器已被替换为
EigenRand
_。它加快了随机数生成并解决了平台之间的结果差异。 - 由于以上原因,即使
seed
相同,模型训练结果可能与0.9.0之前的版本有所不同。 - 修复了
tomotopy.HDPModel
中的训练错误。 tomotopy.DMRModel.alpha
现在显示通过元数据的每文档主题分布的Dirichlet先验。- 修改了
tomotopy.DTModel.get_count_by_topics()
返回一个二维ndarray
。 - 修改了
tomotopy.DTModel.alpha
返回与tomotopy.DTModel.get_alpha()
相同的值。 - 修复了不能获取
tomotopy.GDMRModel
文档的metadata
值的问题。 tomotopy.HLDAModel.alpha
现在显示每文档深度分布的Dirichlet先验。- 添加了
tomotopy.LDAModel.global_step
。 - 现在
tomotopy.MGLDAModel.get_count_by_topics()
返回全球主题和本地主题的单词数。 - 添加了
tomotopy.PAModel.alpha
,tomotopy.PAModel.subalpha
, 和tomotopy.PAModel.get_count_by_super_topic()
。
- 添加了
.. _EigenRand: https://github.com/bab2min/EigenRand
-
0.8.2 (2020-07-14)
- 添加了新属性
tomotopy.DTModel.num_timepoints
和tomotopy.DTModel.num_docs_by_timepoint
。 - 修复了使得不同平台下结果不同的bug,即使
seeds
是相同的。 由于此修复,现在32位上的tomotopy
产生的训练结果与早期版本不同。
- 添加了新属性
-
0.8.1 (2020-06-08)
- 修复了
tomotopy.LDAModel.used_vocabs
返回不正确值的bug。 - 现在
tomotopy.CTModel.prior_cov
返回形状为[k, k]
的协方差矩阵。 - 现在
tomotopy.CTModel.get_correlations
在没有参数的情况下返回形状为[k, k]
的相关矩阵。
- 修复了
-
0.8.0 (2020-06-06)
- 由于在tomotopy中引入了NumPy,tomotopy的许多方法和属性现在返回的不是
list
,而是numpy.ndarray
。 - Tomotopy现在有一个新的依赖
NumPy >= 1.10.0
。 - 修复了
tomotopy.HDPModel.infer
的错误估计。 - 添加了关于将HDPModel转换为LDAModel的新方法。
- 在主题模型中添加了新属性
tomotopy.LDAModel.used_vocabs
,tomotopy.LDAModel.used_vocab_freq
和tomotopy.LDAModel.used_vocab_df
。 - 新增了g-DMR主题模型(
tomotopy.GDMRModel
)。 - 修复了在macOS上初始化
tomotopy.label.FoRelevance
时出现的错误。 - 修复了在没有
raw
参数的情况下使用tomotopy.utils.Corpus
时出现的错误。
- 由于在tomotopy中引入了NumPy,tomotopy的许多方法和属性现在返回的不是
-
0.7.1 (2020-05-08)
- 为
tomotopy.HLDAModel
添加了tomotopy.Document.path
。 - 修复了
tomotopy.label.PMIExtractor
中的内存损坏bug。 - 修复了gcc 7中的编译错误。
- 为
-
0.7.0 (2020-04-18)
- 为该包添加了
tomotopy.DTModel
。 - 修复了
tomotopy.utils.Corpus.save
中的bug。 - 在Document类中添加了新方法
tomotopy.Document.get_count_vector
. - 现在Linux发行版使用manylinux2010,并应用了额外优化。
- 为该包添加了
-
0.6.2 (2020-03-28)
- 修复了与
save
和load
相关的关键bug。版本0.6.0和0.6.1已从发布中移除。
- 修复了与
-
0.6.1 (2020-03-22) (已移除)
- 修复了模块加载相关的bug。
-
0.6.0 (2020-03-22) (已删除)
tomotopy.utils.Corpus
类被添加,该类可以轻松管理多个文档。- 新增
tomotopy.LDAModel.set_word_prior
方法,用于控制主题模型的词-主题先验。 - 所有主题模型的 init 添加了一个新参数
min_df
,该参数用于基于文档频率过滤词语。 - 添加了
tomotopy.label
子模块,关于主题标签。目前,仅提供tomotopy.label.FoRelevance
。
-
0.5.2 (2020-03-01)
- 修复了
tomotopy.LLDAModel.add_doc
中的段错误问题。 - 修复了
tomotopy.HDPModel
的infer
有时会导致程序崩溃的错误。 - 修复了使用
ps=tomotopy.ParallelScheme.PARTITION
进行tomotopy.LDAModel.infer
时崩溃的问题。
- 修复了
-
0.5.1 (2020-01-11)
- 修复了
tomotopy.SLDAModel.make_doc
不支持y
缺失值的错误。 - 现在
tomotopy.SLDAModel
完全支持响应变量y
的缺失值。带缺失值 (NaN) 的文档会被纳入主题建模,但在响应变量回归中被排除。
- 修复了
-
0.5.0 (2019-12-30)
- 现在
tomotopy.PAModel.infer
返回主题分布和子主题分布。 - 在
tomotopy.Document
中添加了新方法 get_sub_topics 和 get_sub_topic_dist。(为 PAModel 服务) - 在
tomotopy.LDAModel.train
和tomotopy.LDAModel.infer
方法中添加了新参数parallel
。可以通过更改该参数来选择并行算法。 - 新算法
tomotopy.ParallelScheme.PARTITION
被添加。当工人数目较多或主题数目或词汇量大时效果更佳。 - 修复了在
min_cf
< 2 时rm_top
不起作用的错误。
- 现在
-
0.4.2 (2019-11-30)
- 修复了
tomotopy.LLDAModel
和tomotopy.PLDAModel
的错误主题分配。 - 实现了
tomotopy.Document
和tomotopy.Dictionary
的可读 repr。
- 修复了
-
0.4.1 (2019-11-27)
- 修复了
tomotopy.PLDAModel
初始化函数中的错误。
- 修复了
-
0.4.0 (2019-11-18)
- 包中添加了新模型
tomotopy.PLDAModel
和tomotopy.HLDAModel
。
- 包中添加了新模型
-
0.3.1 (2019-11-05)
- 修复了
get_topic_dist()
在设置min_cf
或rm_top
时返回不正确值的问题。 - 修复了
tomotopy.MGLDAModel
文档中get_topic_dist()
的返回值以包含本地主题。 - 提升了使用
tw=ONE
时的估算速度。
- 修复了
-
0.3.0 (2019-10-06)
- 包中添加了新模型
tomotopy.LLDAModel
。 - 修复了
HDPModel
的崩溃问题。 - 由于实现了
HDPModel
超参数估算,其结果可能与以前的版本不同。 如果想关闭HDPModel
的超参数估算,请将optim_interval
设为零。
- 包中添加了新模型
-
0.2.0 (2019-08-18)
- 包中添加了新模型
tomotopy.CTModel
和tomotopy.SLDAModel
。 - 为所有主题模型添加了新参数选项
rm_top
。 - 修复了
PAModel
和HPAModel
的save
和load
方法中的问题。 - 修复了加载
HDPModel
时偶尔发生的崩溃问题。 - 修复了在
min_cf
> 0 时ll_per_word
计算错误的问题。
- 包中添加了新模型
-
0.1.6 (2019-08-09)
- 修复了 macOS 环境下使用 clang 编译的错误。
-
0.1.4 (2019-08-05)
- 修复了
add_doc
接受空列表作为输入时的问题。 - 修复了
tomotopy.PAModel.get_topic_words
无法提取子主题词分布的问题。
- 修复了
-
0.1.3 (2019-05-19)
- 为所有主题模型添加了参数
min_cf
和停止词移除功能。
- 为所有主题模型添加了参数
-
0.1.0 (2019-05-12)
- tomotopy 的第一个版本
其他语言绑定
捆绑库及其许可证
-
Eigen: 本应用程序使用 Eigen 的 MPL2 许可证功能,一个用于线性代数的 C++ 模板库。 可以在 https://www.mozilla.org/en-US/MPL/2.0/ 获得 MPL2 许可证的副本。 可以在 http://eigen.tuxfamily.org/ 获得 Eigen 库的源代码。
-
EigenRand:
MIT License <licenses_bundled/EigenRand>
_ -
Mapbox Variant:
BSD License <licenses_bundled/MapboxVariant>
_
引用
::
@software{minchul_lee_2022_6868418,
author = {Minchul Lee},
title = {bab2min/tomotopy: 0.12.3},
month = jul,
year = 2022,
publisher = {Zenodo},
version = {v0.12.3},
doi = {10.5281/zenodo.6868418},
url = {https://doi.org/10.5281/zenodo.6868418}
}