biterm主题模型

biterm的Python项目详细描述


Biterm主题模型

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

只需通过以下方式安装:

pip install biterm

加载一些短文本并通过sklearn对其进行矢量化。

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

从课文中获取词汇和位。

frombiterm.utilityimportvec_to_bitermsvocab=np.array(vec.get_feature_names())biterms=vec_to_biterms(X)

创建一个btm并通过位来训练它。

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

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

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

pyLDAvis Visualization

推断是用吉布斯抽样做的,而且不是很快。该实现不用于生产。 但如果你必须对很多文本进行分类,你可以尝试使用在线学习。使用cython版本可以稍微加快性能。

importnumpyasnpimportpyLDAvisfrombiterm.cbtmimportoBTMfromsklearn.feature_extraction.textimportCountVectorizerfrombiterm.utilityimportvec_to_biterms,topic_summuary# helper functionsif__name__=="__main__":texts=open('./data/reuters.titles').read().splitlines()# vectorize textsvec=CountVectorizer(stop_words='english')X=vec.fit_transform(texts).toarray()# get vocabularyvocab=np.array(vec.get_feature_names())# get bitermsbiterms=vec_to_biterms(X)# create btmbtm=oBTM(num_topics=20,V=vocab)print("\n\n Train Online BTM ..")foriinrange(0,len(biterms),100):# prozess chunk of 200 textsbiterms_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 ..")foriinrange(len(texts)):print("{} (topic: {})".format(texts[i],topics[i].argmax()))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾