Skip to main content

双项主题模型

项目描述

双项主题模型

这是一个很棒的 Biterm 主题模型的简单 Python 实现。该模型在短文本分类中是准确的。它显式地对整个语料库中的单词共现模式进行建模,以解决文档级别的稀疏单词共现问题。

只需通过以下方式安装:

pip install biterm

加载一些短文本并通过 sklearn 将它们矢量化。

    from sklearn.feature_extraction.text import CountVectorizer

    texts = open('./data/reuters.titles').read().splitlines()[:50]
    vec = CountVectorizer(stop_words='english')
    X = vec.fit_transform(texts).toarray()

从文本中获取词汇和双术语。

    from biterm.utility import vec_to_biterms

    vocab = np.array(vec.get_feature_names())
    biterms = vec_to_biterms(X)

创建一个 BTM 并传递 bitterms 来训练它。

    from biterm.cbtm import oBTM

    btm = oBTM(num_topics=20, V=vocab)
    topics = btm.fit_transform(biterms, iterations=100)

使用 pyLDAvis 保存主题图并探索结果!(另见simple_btml.py

    from biterm.btm import oBTM

    btm = oBTM(num_topics=20, V=vocab)
    topics = btm.fit_transform(biterms, iterations=100)

pyLDAvis 可视化

推理是通过 Gibbs Sampling 完成的,而且速度不是很快。该实现不适用于生产。但是,如果您必须对大量文本进行分类,您可以尝试使用在线学习。使用 Cython 版本可以稍微提高性能。

import numpy as np
import pyLDAvis
from biterm.cbtm import oBTM 
from sklearn.feature_extraction.text import CountVectorizer
from biterm.utility import vec_to_biterms, topic_summuary # helper functions

if __name__ == "__main__":

    texts = open('./data/reuters.titles').read().splitlines()

    # vectorize texts
    vec = CountVectorizer(stop_words='english')
    X = vec.fit_transform(texts).toarray()

    # get vocabulary
    vocab = np.array(vec.get_feature_names())

    # get biterms
    biterms = vec_to_biterms(X)

    # create btm
    btm = oBTM(num_topics=20, V=vocab)

    print("\n\n Train Online BTM ..")
    for i in range(0, len(biterms), 100): # prozess chunk of 200 texts
        biterms_chunk = biterms[i:i + 100]
        btm.fit(biterms_chunk, iterations=50)
    topics = btm.transform(biterms)

    print("\n\n Visualize Topics ..")
    vis = pyLDAvis.prepare(btm.phi_wz.T, topics, np.count_nonzero(X, axis=1), vocab, np.sum(X, axis=0))
    pyLDAvis.save_html(vis, './vis/online_btm.html')

    print("\n\n Topic coherence ..")
    topic_summuary(btm.phi_wz.T, X, vocab, 10)

    print("\n\n Texts & Topics ..")
    for i in range(len(texts)):
        print("{} (topic: {})".format(texts[i], topics[i].argmax()))

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

biterm-0.1.5.tar.gz (79.7 kB 查看哈希

已上传 source

内置分布

biterm-0.1.5-cp36-cp36m-macosx_10_7_x86_64.whl (62.3 kB 查看哈希

已上传 cp36