1 引言
在目前的工作中,使用了三种主题模拟技术:(1) LDA(LDA Topic Modeling(主题建模): 以Rocscience 2021用户会议为例); (2) BERTopic(BERTopic(V0.9.0)主题模拟技术); 以及(3)Top2Vec(GeotechSet数据集主题模拟(Topic Modeling); 主题模拟的艺术(The Art of Topic Modeling)---以Step-Path Failure为例). 第一种技术由于性能较差逐渐被淘汰,因此着重点主要放在第二种和第三种技术上,这两种技术的共同点是利用了BERT模型。本文讨论了昨天对Top2Vec-Topic-Modeling代码的一些改进以及应用时的注意事项,这些改进增强了程序的移植性,计算结果的精确性和均衡性以及后处理的便利性。
2 改进要点
2.1 自动化CPU的核心数
尽管Torch提供了GPU的计算能力,但是在目前Top2Vec的训练过程中仍然使用的是CPU。在大规模的数值计算中都使用了多线程运算,包括FLAC3D和3DEC,参看《FLAC3D 7.0 新特性简介(P1)---速度提升》和《确定性模式(model deterministic on)》。workers用来设定训练模型时要使用的工作线程的数量,虽然我们没有定量地测试过workers数量对运行速度的影响,但总的来说,较大的数量将导致更快的训练。使用下面的代码最大化地使用CPU的core,这样在不同机器运行代码时就不必手工改写数字了。目前我的计算机CPU的核心数是16.
import multiprocessing
workers = multiprocessing.cpu_count()
2.2 同时运行多个模型
Top2Vec(V1.0.26)不像BERTopic一样,可以任意选择预训练模型,目前它只内置了四种模型可供选择,默认的模型是Gensim的Doc2Vec, 参看 (语义相似模型(Doc2Vec)在双语教学中的应用; Doc2Vec Model---段落相似性查询)。另外三种模型是:
universal-sentence-encoder (USE)
universal-sentence-encoder-multilingual (USEM)
distiluse-base-multilingual-cased (DBMC)
USE和USEM依赖于Tensorflow,由于库冲突的原因没有安装Tensorflow;DBMC依赖于sentence-transforers模型, 因此目前只使用Doc2Vec和DBMC两个模型。Top2Vec原作者对各种模型的应用范围给出了如下建议:对于大型数据集和具有非常独特词汇的数据集,Doc2Vec可以产生更好的结果。这将从头开始训练一个Doc2Vec 模型。这种方法是不分语言的。但是多种语言不会对应起来;使用USE运行速度会很快,因为它已经包含了预训练好的高效模型,这个模型建议用于较小的数据集。对于英语或多语言模型的大型数据集,建议使用USEM模型; 对于多语言数据集和USEM未覆盖的语言,建议使用DBMC模型,不过DBMC的运行速度比DBMC的运行速度要慢很多。在目前我们自己数据集的测试中,发现DBMC得出的结果比Doc2Vec的结果好,不过Doc2Vec仍然可以得出一些DBMC没有的结果,因此把这两个模型联合在一起,同时运行。
2.3 产生bigram
默认的Top2Vec只能产生单个词汇,在实际项目中,生成bigram更有意义(使用Trigram获取文档的中心思想)。因此在代码中使用Phraser做了改进。这个改进对Doc2Vec和DBMC都适用, 代码中所有涉及词汇的部分假如有的化都以短语出现。下面的词云显示得出的结果不再是单个词汇而是短语。
from gensim.models.phrases import Phraser
本主题Top 5词汇:
fracture rock
rock bridges
rock fall
unfractured rock
rock fall
本主题Top 5词汇:
rock mechanics
fractured rock
unfractured rock
intact rock
jointed rock
本主题Top 5词汇:
rock mass
fractured rock
rock mechanics
intact rock
jointed rock
2.4 Stopwords
尽管Top2Vec声称不需要进行stemming/lemmatization等分词操作,但在实际应用过程中发现在进行词汇相似性(Similar Keywords)运行时它没有去掉stopwords, 以前使用手动方法处理,这个方法既笨拙又麻烦,因此引入了cleanDoc子程序过滤掉无意义的stopwords,改进后的代码,例如"rock bridge"的Top 5相似词汇得出的结果如下:
fractured rock
rock bridges
unfractured rock
rock fall
rock slopes
2.5 保存成文件
由于我们同时运行Doc2Vec和DBMC两个模型(以后还要加入USE模型),代码产生出大量结果,事实上,这些结果已经产生出新的文档,因此把这些结果直接保存成文件便于进行后处理分析。