1. 引言
在当今迅速发展的信息时代,信息超载已成为常态,如何快速准确地识别目标领域文献研究热点及演化趋势成为了当前亟需解决的问题。主题识别及演化分析是发现及跟踪文本数据中主题的一种常用文本信息挖掘方法,可以揭示主题的深层含义和发展趋势,在信息检索、知识管理等领域具有广泛的应用。
主题识别及演化分析的方法从技术角度主要分为基于文献计量学和基于自然语言处理(Natural Language Processing, NLP)两类方法。基于文献计量学的主题识别及演化方法主要通过分析文献中的关键词、作者、机构、引文等外部信息来揭示研究领域的主题及演化趋势,往往没有考虑到文档中的潜在的语义和语境信息。为了解决这种缺陷,一些学者开始运用基于自然语言处理的主题识别及演化方法对文档进行语义层面的主题挖掘和识别,从而发现和跟踪主题全局语义的变化。随着科学技术的快速发展,以自然语言处理技术为基础的主题识别及演化研究涌现出了众多优秀的理论与实践成果,LDA (Latent Dirichlet Allocation,隐含狄利克雷分布)模型就是其中最受欢迎的主题建模方法之一,具有广泛的适用性与高度的灵活性,它可以从海量的文档集合识别出文档及其词语的潜在语义信息和主题结构,在文本挖掘及自然语言处理等领域表现出了很好的应用效果。
2. 相关研究
主题识别及演化分析通过运用文献计量学或自然语言处理等方法,对一个领域中的主题进行识别和跟踪,并以可视化的方式对其发展趋势进行动态分析。主题识别及演化分析的实际应用遍及多个领域,如舆情监测[1]、社交媒体分析[2]、医疗健康[3]、商业智能[4]和政府决策[5]等,其演进历程包括了文献计量分析阶段、机器学习分析阶段、深度学习分析阶段等。
文献计量学方法是一种简单易用的主题识别方法,它通常基于词频、共现关系或共引分析识别文档中的主题[6],其中,社会网络分析在揭示主题之间的关系方面备受青睐,邢晓昭等[7]基于文本挖掘及社会网络分析的方法,提出了基于主题演化的颠覆性技术识别技术;Reza Vahidzadeh等[8]基于社会网络分析探究区域产业共生(RIS)研究领域中技术和非技术两个方面的主要主题和研究发展趋势。虽然基于文献计量学的主题识别方法忽视了文本数据中的潜在的语义信息,但这些基于文献计量学识别目标领域主题的研究为后续学者进一步优化主题识别及演化方法提供了重要的理论和技术支撑。
近年来,基于机器学习的主题模型方法进行主题识别和演化分析[9]-[11]得到了学者的广泛关注。其中,概率图模型是基于机器学习的主题识别及演化分析中广泛使用的一类主题模型,学术界常用的概率图模型有潜在语义分析(Latent Semantic Analysis, LSA) [12]、潜在狄利克雷分布(Latent Dirichlet Allocation, LDA) [13]和动态主题模型(Dynamic Topic Model, DTM) [14]等,这些模型通过对文档、主题以及词汇之间的关系联合建模来学习模型的概率分布参数,并以模型的输出结果为基础探究目标领域存在的主题及其演化趋势,在捕捉文本信息中的语义信息方面更有效[15]。
1988年,Susan等人[12]提出了LSA模型,LSA模型是一种基于奇异值分解(SVD)来获取文档潜在语义及主题结构的模型,它不能提供概率解释,且对新文档的处理不够理想,学者们开始尝试将概率图模型引入到主题模型中,提出了PLSA模型。PLSA [16]的模型假设是每个文档都是以一定的概率包含混合主题,每个主题又以一定的概率包含语料库中的某些单词,这种基于概率图的模型提供了更好的主题解释,但是容易出现过拟合的风险。为此,Blei等在前面学者研究的基础上[13]提出了LDA模型,他们从文档–主题分布和主题–词分布两个方面联合建模来识别目标领域文本中的潜在主题,并且还在估计文档的主题分布以及主题的词语分布时引入了狄利克雷先验,这些改进使得LDA模型可以更好地处理新的文本数据,满足了学者对于主题模型泛化能力的更高需求。2015年Cao等[17]提出的基于前馈神经网络的主题模型(Neural Topic Model, NTM)进一步推动了主题识别及演化分析中技术和方法的创新。
综上所述,目前学术界关于主题识别及演化分析的相关研究主要是利用基于文献计量学的词频分析、基于机器学习的主题模型等方法,尽管这些方法相对简单直观,但往往会忽略文本中深层次的语义信息。例如,传统LDA模型的文档特征提取往往依赖于关键词提取和词频统计,通过词频统计将单词表示为运算复杂的高维稀疏向量,这会导致模型无法提取出文档中隐含的语义信息。Word2Vec模型是一种基于神经网络模型的词向量学习方法,它可以将文本训练成向量空间中低维稠密的向量来捕捉文本中的深层语义联系,在一定程度上可以弥补传统LDA模型在文本特征提取方面的不足。因此,本文将在已有研究的基础上,结合TF-IDF算法、Word2Vec模型优化基于LDA主题模型进行主题识别分析中存在的不足,并提出基于主题语义变化的方法划分时间窗口,以减少主题演化过程中时间窗口划分的主观性。
3. 基于改进LDA模型的主题识别及演化优化模型
3.1. 主题识别
本文选择LDA模型对从WOS核心数据库收集到的目标领域文献进行主题识别与演化分析,旨在通过主题建模有效提取并归纳文献集中的关键主题,进而跟踪这些主题随时间的演变规律,为目标领域的研究者和管理者提供有价值的信息。LDA主题建模通常包括文本特征提取、模型参数确定、模型训练三个步骤。
3.1.1. 文本特征提取
传统的LDA模型将文档表示为基于词频统计的向量,忽略了常见词汇对主题建模结果的影响。为了改进传统LDA模型在文本特征提取方面的不足,本文使用TF-IDF算法计算每个文档中的各个单词的权重,并将加权后的词汇作为LDA模型的输入。这种方法可以使模型在识别主题时更关注于高权重的词,减少常见词汇的干扰,更好地捕捉到文档的主题结构。
TF-IDF算法即TF*IDF,其中TF (Term Frequency,词频)表单词在文档中出现的频率,用公式表示
为:
,
表示第j篇文档中单词i出现的次数。IDF (Inverse Document Frequency,逆向文件频率)表示单词的特殊性,用总文档数目除以包含该单词的文档数目计算:
,|D|表示语料库中的文档总数。
3.1.2. LDA模型
LDA是一个三层贝叶斯模型,如图1所示,它用主题上的概率分布表示每个文档,其中每个主题都表示为单词上的概率分布。LDA模型假设一篇文档中的每个词是通过以一定概率选择某个主题,并从该主题中以一定概率选择某个词语的过程得到的,其中文档的主题分布和主题的单词分布分别取决于由α和β参数决定的Dirichlet先验分布。
Figure 1. LDA three layer Bayesian structure diagram
图1. LDA三层贝叶斯结构图
LDA模型现在已被广泛用于发现文档集合中的潜在主题,其原理如图2所示。LDA模型假设在M篇文档中,每篇文档中由K个主题组成,每个主题下的N个词语wmn构成这篇文档;每篇文档在主题上服从多项式分布,每个主题在单词上服从多项式分布;每篇文档主题多项式分布的先验分布是参数为α的狄利克雷分布,每个主题词汇多项式分布的先验分布是参数为β的狄利克雷分布。
Figure 2. LDA model diagram
图2. LDA模型图
3.1.3. LDA模型参数设置
本文利用Python的Gensim库训练LDA模型。首先需要确定3个超参数α、β、k,超参数α、β分别代表文档–主题分布和主题–词分布的狄利克雷分布先验参数,控制每个文档中主题的多样性程度以及每个主题中词语的多样性程度。α、β一般选取Gensim包中LDA模型的默认值[18]。对于最优主题数k的确定,常用的方法有四种:根据困惑度确定[19];根据一致性分数确定[20];根据文本聚类方法确定[21];根据主题分布可视化及人工评估确定[22]。
困惑度表示文档d从属的主题的不确定性[23],用于评估语言模型的性能。当困惑度达到最小或处于转折点处时,主题模型的泛化能力强,但当主题个数过多时,模型的困惑度会急剧降低,出现模型过拟合的现象。困惑度计算公式如式(1)所示。
(1)
其中,M是软件开源领域的文档总数,
为文档d的生成概率,
为文档d包含的单词总数。
的计算方式为其文档中每个词汇生成概率之积,如式(2)所示。
(2)
困惑度指标衡量的是模型生成未知数据的似然性,即使困惑度较低,主题之间也可能缺乏清晰的界限。结合主题相似度可以生成更具清晰界限的主题,识别出更为泛化的主题结构。主题相似度通常通过计算主题向量间的余弦相似度来度量,余弦相似度的计算公式如下:
(3)
主题之间的平均相似度较低,意味着主题之间的区分度较高,每个主题都具有较为独特的特征[24]。
本文采用困惑度指标结合主题之间的平均相似度来确定主题数目的大小,将主题数量限制在2~20之间,依次计算各个主题数量的困惑度和主题平均相似度,绘制困惑度以及主题平均相似度随主题数量变化的折线图。当困惑度和主题平均相似度达到最小或转折点时,可以得到最优主题数量。
综上,将文本特征提取得到的文档特征向量输入到LDA主题模型中,确定好模型的超参数,即可得到目标领域文献的主题–词汇分布以及文档–主题分布。选择每个主题下概率排名前十的词汇作为该主题下的关键词,结合目标领域的相关知识及专家意见,通过分析整理最终得到目标领域的主题。
3.2. 主题演化
本文结合LDA主题模型和Word2Vec模型的优点共同学习单词、主题和文档向量,从而更准确地实现主题演化研究。具体步骤包括词向量训练、时间窗口划分、主题强度演化和主题内容演化。
3.2.1. 词向量训练
Tomas Mikolov等提出的Word2Vec模型[25]是用于生成词向量的高效模型,它可以从大量文本中捕捉单词间的语义关系,该模型的两种主要实现方式为连续词袋模型(CBOW)和Skip-gram模型,如图3所示,前者根据上下文来预测目标词,常用于在小规模数据集中学习频繁的词汇;后者根据目标单词来预测上下文,用于学习罕见词汇,能够很好地处理低频率的单词,常用于大规模数据集[26]。
本文综合考虑了上下文窗口大小、词向量维度,利用CBOW模型训练得到单词的词向量,通过迭代训练的方式获取更好地参数设置,捕捉词汇的语义关系,并利用LDA模型得到的主题–词分布,将主题向量表示为主题词向量的概率加权和,用于计算主题相似度,计算公式如式(4)所示。
(4)
其中,
表示第K个主题的主题向量,
表示该主题下第i个单词的概率,
表示该主题下第i个单词的词向量。
Figure 3. CBOW model and Skip-gram model
图3. CBOW模型和Skip-gram模型
3.2.2. 基于主题语义变化划分时间窗口
目前主题演化研究文献中对于时间窗口的划分往往采用固定时间窗口或生命周期理论的方法,容易受到研究者自身经验和主观因素的影响。本文提出一种基于主题语义距离变化的客观方法划分时间窗口,具体实现步骤包括:初步划分时间窗口、计算相邻时间窗口主题间的相似度矩阵、计算相邻矩阵之间的弗罗贝尼乌斯距离、确定时间窗口分界点。
本文阶段滑动时间窗口初步划分时间窗口,绘制各个时间窗口的困惑度曲线,找到平均最优主题数目n,将各时间窗口的主题数量统一确定为n并训练LDA主题模型,使得所有相邻时间窗口的主题相似度矩阵大小相同,便于计算矩阵距离。根据LDA模型的输出结果计算各个时间窗口的主题向量,命名为Topic1~Topicn,主题名称及主题向量的对应关系用字典Dt = {Topic1:Vt1, Topic2:Vt2, ..., Topicn:Vtn}表示,此时的原始主题列表表示为L = [D1, D2, D3, ..., Dt]。
为了确保相邻相似度矩阵之间的弗罗贝尼乌斯距离能够衡量相近主题的语义变化,需要以第一个时间窗口的主题向量字典为基准,迭代调整后续时间窗口主题向量字典的键值对对应关系,使得相邻时间窗口具有相同键的主题向量余弦相似度尽可能高。调整后的主题名称及主题向量的对应关系用字典Nt = {
,
, ...,
}表示,主题列表表示为Lnew = [N1,],其中,D1 = N1。
定义计算相邻时间窗口两两主题之间余弦相似度的函数为compute_similarity_matrix,保持第一个时间窗口的主题向量字典不变,计算主题向量N1与主题向量D2的余弦相似度矩阵R1作为代价矩阵,利用匈牙利算法调整第二个时间窗口主题向量字典D2的键值对对应关系,将调整后的主题向量字典N2追加到列表Lnew中。然后计算N2与D3的余弦相似度矩阵R2作为代价矩阵,将调整后时间窗口3的主题向量字典N3追加到列表Lnew中,依次迭代计算,最终得到调整后的主题向量列表Lnew = [N1, N2, N3, ..., Nt]。
Figure 4. Cosine similarity matrix of adjacent time window topic vectors
图4. 相邻时间窗口主题向量余弦相似度矩阵
计算Lnew中相邻时间窗口主题向量的余弦相似度矩阵Mt,Mt的形式如图4所示,进而计算相邻余弦相似度矩阵Mt,Mt+1的弗罗贝尼乌斯距离St,以量化相邻时间窗口主题的语义含义变化程度。弗罗贝尼乌斯距离值越大,说明主题语义含义变化越大。公式(5)展示了弗罗贝尼乌斯距离的计算公式:
(5)
其中
和
分别表示矩阵A、B中的元素。
综合考虑每个时间窗口的发文数量[27]与弗罗贝尼乌斯距离,本文选择弗罗贝尼乌斯距离最大的两个时间点将文献划分为三个时间窗口,探究主题演化路径。
3.2.3. 主题强度演化
本文利用LDA主题建模后得到的文档–主题矩阵计算每一年各个主题的主题强度,主题强度计算公式为:
(6)
其中
表示t年份第K个主题的主题强度,M表示t年份所有文档总数。
表示第d篇文档上第k个主题的概率值。
根据式(6)计算可得到每年各个主题的主题强度,绘制每个主题的主题强度与年份的散点图,直观地展示不同年份下各主题的强度分布,并采用线性回归模型拟合各个主题的主题强度时间序列,将线性回归得到的趋势线与散点图绘制在同一个图上,以便观察和预测主题强度的变化趋势。
3.2.4. 主题内容演化
基于3.2.2提出的方法将数据预处理后的文档划分到不同的时间窗口,训练个时间窗口文档集的LDA模型,得到相应的主题–词汇分布矩阵,由此对各时间窗口的主题进行归纳,绘制出各个主题名称及其排名前十的主题词的表格,以便直观地比较不同主题之间的差异和联系,主题演化的技术路线如图5所示。
Figure 5. Theme evolution technology roadmap
图5. 主题演化技术路线图
基于第3.2.1小节提出的主题向量计算方式,利用式(4)计算得到各时间窗口下主题的向量表示。按照式(3)中的余弦相似度算法对相邻时间窗口目标领域的主题进行相似度计算,可以得到不同主题之间的相似度,若相邻时间窗口两主题之间的相似度大于规定的阈值,则可判定两主题之间存在演化关系。
4. 实例分析
4.1. 软件开源领域数据收集与预处理
本文选择Web of Science数据库(以下简称WOS)作为数据的来源,检索时间为2024年2月1日,时间范围为2001年至2024年1月1日,文献类型分别选择“Article”,以排除会议、报纸等文献。以TS = ("open source software" OR "free software" OR "libre software")作为主题词进行检索,初步筛选得到论文2460篇,通过逐一阅读论文标题和摘要部分排除研究方向开源软件应用与技术问题等与本论文研究无关的文献,最终得到867篇文献的题录信息,题录信息包括题目、关键词、关键词扩展、摘要、期刊来源、出版年份、作者等信息。调用NLTK工具包在进行数据预处理,主要工作如下:
1) 调用string库中的punctuation模块,剔除标点符号等特殊符号以及无关紧要的数字;
2) 阅读软件开源领域相关资料,同时咨询软件开源领域专家学者,构建软件开源领域缩写词表、停用词表、同义词表以及专有名词词典,并在训练模型过程中持续扩充停用词表、同义词表和专有名词词典,不断优化分词结果;
3) 根据软件开源领域缩写词表将缩写还原成完整形式,合并同一概念的不同形式;
4) 调用NLTK库corpus模块的英文停用词表,并以构建的软件开源领域停用词表作为补充,完成软件开源领域数据集的停用词去除;
5) 根据软件开源领域同义词表和专有名词词典,合并同义词并保留软件开源领域专用短语搭配;
6) 调用NLTK库中的WordNetLemmatizer方法将单词进行词形还原;
7) 调用NLTK库中的pos_tag方法标记词性,去除形容词、副词等没有意义的单词;
8) 将软件开源领域词汇转换为小写形式,删除词频小于5的单词。
4.2. 软件开源领域文献主题识别分析
以主题数量为横坐标,困惑度或主题相似度为纵坐标,分别绘制二者随主题数量变化的折线图。从图6中可以看出,当主题数量为6时困惑度最小,此时主题平均相似度达到最低点,因此本文选定开源软件研究领域的主题数量为6。
Figure 6. Change of number of topics-perplexity/similarity
图6. 主题数量–困惑度/相似度变化情况
基于3.1提出的方法训练LDA模型,根据得出的“主题–词”分布对主题进行标识,参考排名前十的高频词汇判断主题内容,结合权威期刊综述文献以及专家意见,最终主题标识的结果如表1所示。
Table 1. LDA theme modeling results
表1. LDA主题建模结果
Topic1 (开发协作) |
Topic2 (开源治理) |
Topic3 (商业模式) |
developer |
0.006984049 |
motivation |
0.014077323 |
smell |
0.012937002 |
project |
0.006919028 |
innovation |
0.010305673 |
business model |
0.012003655 |
development |
0.006712013 |
government |
0.009400791 |
student |
0.009728886 |
code |
0.006646663 |
participation |
0.008959397 |
network |
0.00878664 |
system |
0.006535601 |
community |
0.008803301 |
venture |
0.008573762 |
license |
0.006229119 |
effect |
0.008549321 |
evaluation |
0.008011401 |
process |
0.00619903 |
adoption |
0.008475851 |
transfer |
0.006892957 |
collaboration |
0.005345278 |
project |
0.008291724 |
value creation |
0.006802354 |
quality |
0.005281016 |
success |
0.008287458 |
criterion |
0.006710543 |
government |
0.005242566 |
knowledge |
0.007649915 |
commercialization |
0.006567908 |
Topic4 (市场竞争) |
Topic5 (代码维护) |
Topic6 (开源生态) |
clone |
0.052502617 |
bug |
0.047046203 |
review |
0.010549062 |
competition |
0.045073349 |
prediction |
0.036192253 |
ecosystem |
0.009173433 |
firm |
0.041295994 |
metric |
0.026539762 |
comment |
0.009135757 |
spillover |
0.031901479 |
report |
0.026448287 |
peer |
0.008386368 |
market |
0.031578086 |
defect |
0.025672438 |
woman |
0.008381981 |
externality |
0.020602046 |
fix |
0.024300259 |
programmer |
0.008075175 |
maintainability |
0.019209955 |
usability |
0.023992464 |
detection |
0.008074087 |
debt |
0.018591242 |
maintenance |
0.023209471 |
request |
0.008043036 |
patent |
0.01833836 |
machine |
0.023031447 |
sponsor |
0.007953731 |
effect |
0.017813744 |
predict |
0.018434579 |
ideology |
0.007678234 |
依据表1每个主题下的高概率单词,总结归纳最符合当前主题下高概率单词的主题名称。主题1的词汇反映了软件开源领域中开发流程和合作方面的内容,标注为“开发协作”。协作模式较早受到研究者的关注,Raymond的《大教堂与集市》系统性地解释了开源软件开发者的协作模式,提出与大多数商业软件采用大教堂的开发模式相比,以Linux为代表的开源软件使用集市的开发模式[28],开发人员彼此协作互动形成不断演化的开发者社交网络[29]。
主题2的高频词汇表明该主题关注软件开源领域中的创新动力、政府支持以及社区参与的重要性,标注为“开源治理”。开源社区等虚拟社区的组织治理方式与传统组织不同,开源项目所有者必须求助于其他治理机制,而不是那些向开发人员付费的公司所提供的治理机制[30]。早期开发者动机研究是开源治理研究的重要组成部分,很多学者针对Lerner和Tirole提出的问题“为什么成千上万的顶尖软件开发人员会免费为创建公共产品做出贡献?”展开研究。Hars A等揭示了参与动机的内在因素和外在因素两个方面[31]。Shaul Oreg和Oded Nov根据工具性的高、中、低三个等级将内在动机和外在动机进一步分成三类[32]。von Krogh等扩展了对个人动机的假设,将短期奖励之外的长期、有价值的追求纳入其中[33]。Moqri M等则证实了开发人员参与开源项目相关的货币激励[34]。
主题3涉及到社交网络在开源软件领域中的影响以及商业化进程,标注为“商业模式”。开发者可以在社交网络上讨论技术问题,分享代码,从而提高项目的知名度和影响力,更好地帮助企业创造价值,实现商业化。研究者关于商业模式的研究包括选择不同商业模式的因素[35]、如何设计商业模式[36]以及系统地对商业模式的种类进行总结等[37],商业模式的选择和设计影响着开源项目的成功。
主题4的词汇反映了在市场竞争和专利在开源软件领域中的重要性,标注为“市场竞争”。开源软件吸引了许多企业参与到开源项目的竞争中。企业参与开源软件领域的活动能够获得最新的技术发展动态[38],与其他开发者共享经验和知识,推动技术创新;可以减少开发成本,提升其品牌知名度和声誉。企业可以提供相关的技术支持和培训服务,培养一个由同行生产者组成的开源社区,并通过鼓励员工向开源项目贡献代码、组织和赞助相关的活动等来为开源项目的发展做出贡献[39]。
主题5关注缺陷预测、提高可用性和降低维护成本在开源软件领域中的重要性,因此被标注为“代码维护”。研究者通过分析历史数据或采用机器学习等技术来预测软件中可能存在的缺陷[40],优化代码结构,可以提高软件的可靠性和可维护性,从而促进开源项目的健康发展[41]。
主题6涉及代码审查、生态系统等方面,同时也关注女性开发者的参与,反映了代码审查和生态系统在开源软件领域中的重要性,因此被标注为“开源生态”。代码审查指的是通过同行开发者的审查来提高代码质量和项目的可靠性[42],有效的代码审查及开发者注释可以加速代码的迭代改进,提高开源项目的整体健康度[43]。女性和程序员等词汇反映了开源生态中对于多样性和包容性的关注,研究,尽管女性能够胜任贡献代码的工作,但她们仍然受到偏见的影响[44]。鼓励不同背景的人参与项目可以带来更具创新性的想法及丰富的视角[45],也有利于构建健康的开源生态系统。
4.3. 软件开源领域文献主题演化分析
4.3.1. 软件开源领域文献主题强度演化分析
根据式(6)计算得到每年各个主题的主题强度,使用线性回归模型拟合各个主题的主题强度时间序列,进行主题强度的演化分析,依照先前学者将主题强度的演化分为上升型、下降型和稳定型[46],图7展示了六个主题的演化趋势。
根据图7可以观察到主题2 (开源治理)、主题5 (代码维护)和主题6 (开源生态)呈现出上升的趋势,是上升型主题。随着软件开源生产模式在商业和社会中的重要性日益增强,如何有效地管理和发展开源项目、保证代码质量的可靠性已成为关键的研究主题。同时,多样性和包容性作为当前社会发展的重要议题,在软件开源领域也受到了重视。因此,构建一个多元及协作的生态环境在全球开源社区迅速壮大的背景下愈发重要。主题3 (商业模式)是稳定型主题,研究者对于主题3的研究处于相对稳定的状态。开源软件的商业化是一个长期趋势,涉及价值创造、商业模式创新、市场策略等方面。由于开源软件已经在许多行业和领域中得到广泛应用,学术界对于如何在开源软件项目中创造商业价值、构建可持续的商业模式方面的研究持续保持在一个相对稳定的水平。主题1 (开发协作)和主题4 (市场竞争)是下降型主题,研究热度逐渐减少。随着开源软件社区的不断发展和成熟,越来越多的研究开始涉及开源软件的商业化、治理问题、安全性等更加深入的话题,对于开发协作的研究有所减少。市场竞争主题的减少反映了市场环境和软件开源商业模式的稳定。开源软件在全球范围内的普及使其在市场中的地位已经较为明确,企业之间的竞争策略、市场的溢出效应以及专利等问题有了较成熟的理解和应对策略。
Figure 7. Trend chart of theme intensity evolution
图7. 主题强度演化趋势图
4.3.2. 软件开源领域文献主题内容演化分析
基于软件开源领域文献预处理后的分词结果,将词向量维度设置为100,即每个词汇被映射到100维的向量空间中。采用CBOW模型及负采样优化方法训练模型,最终得到软件开源领域数据集1617个词汇的向量表示,为主题向量计算提供基础。
依据3.3.2提出方法,首先以五年为滑动时间窗口初步划分时间窗口,训练各时间窗口主题数量为10的LDA模型,得到相邻相似度矩阵之间的弗罗贝尼乌斯距离计算结果为:[0.8526722, 0.6492604, 0.7588058, 0.6921405, 0.7447708, 0.8579018, 0.696387, 0.9401726, 1.1266683, 1.4238896, 1.2708953, 0.9411309, 1.1315013, 1.2446064, 0.8223505, 0.9021653, 1.379747]。由结果可以看出第10个相似度矩阵与第11个相似度矩阵之间的弗罗贝尼乌斯距离最大,即2010~2014时间窗口与2011~2015时间窗口的相似度矩阵和2011~2015时间窗口与2012~2016时间窗口的相似度矩阵具有最大的弗罗贝尼乌斯距离,主题含义在2011年后出现了较大变化,因此将2011年作为第一个分界点,同理将2018年作为第二个分界点。最终本文划分为三个时间窗口:2001年~2011年;2012年~2018年;2019年~2023年。根据3.2.2中LDA模型主题数量选择的方法,分别设置三个时间窗口的主题数量为5,5,6。
结合三个时间窗口的文献–主题分布和主题–词分布,绘制出各个主题名称及其排名前十的主题词的表格,如表2所示。
Table 2. Summary of themes for each time window
表2. 各时间窗口主题归纳
时间窗 |
主题名称 |
主题词 |
2001~2011 |
开源协议 |
license, sector, attract, preference, infrastructure, seek, program, industry, ideology, sustainability |
贡献动机 |
license, motivation, altruism, commitment, contributor, identity, reward, assumption, package, personality |
产品竞争 |
product, competition, platform, factor, network, framework, standard, market, externality, consumer |
自由软件 |
libre, learn, gift, mechanism, value, adopter, indicate, mozilla, knowledge creation, establish |
社区治理 |
project, firm, government, development, developer, innovation, community, system, process, knowledge |
2012~2018 |
商业竞争 |
license, clone, cost, growth, business model, follow, competition, policy, release, customer |
生态演变 |
venture, evolution, identity, infrastructure, spillover, problem, cause, ecosystem, health, enterprise |
社区贡献 |
project, government, developer, motivation, network, community, knowledge, development, contribution, contributor |
代码贡献 |
change, student, fork, popularity, month, committer, triaging, automate, allocation, text |
企业创新 |
firm, acceptance, innovation, intention, sponsor, capture, capital, capacity, value, ownership |
2019~2023 |
社区协作 |
project, community, developer, government, ecosystem, development, network, system, collaboration, code |
代码风险 |
smell, risk, resilience, image, code review, mentor, hardware, life, competence, tool |
许可竞争 |
license, competition, vendor, copyright, capital, application, decision, speed, compliance, investment |
贡献互动 |
contributor, platform, newcomer, innovation, package, contribution, interaction, discussion, firm, resource |
性别差异 |
usability, woman, gender, barrier, adoption, technique, volunteer, process, criterion, space |
漏洞维护 |
report, bug, vulnerability, fix, prediction, security, file, maintenance, student, machine |
根据式(4)计算各主题的向量表示,并对相邻时间窗口软件开源领域的主题进行相似度计算,可以得到主题之间的相似度,如图8所示。
(a) (b)
Figure 8. Topic similarity heat map
图8. 主题相似度热度图
本文将相似度阈值设为相邻时间窗口主题相似度的平均值,过滤掉相似度较低的主题对,以便通过桑基图清晰地呈现主题路径演化。
Figure 9. Topic evolution Sankey diagram
图9. 主题演化桑基图
结合图8和图9可以归纳出三条重要的演化路径。第一条演化路径历经主题
(开源协议)、
(商业竞争)、
(许可竞争)。开源协议定义了用户使用、修改和分发软件的权利,并推动了商业竞争的研究,企业可以通过对开源协议设置特定的条款来维护自身利益。随着商业竞争变得更加激烈,企业开始寻求更加灵活或者限制性更强的许可证来保护自己的利益,进一步促进许可竞争的研究。
第二条演化路径历经主题
(自由软件)、
(生态演变)、
(社区协作)。自由软件理念的推广和接受度的增加使得开源生态系统的快速扩张,促进了开源生态系统的研究。随着开源生态系统的发展,开源社区变得更加复杂和多元化,社区协作工具和实践也在不断进步。这些工具和实践的支持使得分布式团队能够跨越地理和文化的界限,更有效地合作。
第三条演化路径历经主题
(社区治理)、
(社区贡献)、
(贡献互动)。有效的社区治理机制能够为开源项目的贡献者提供一个清晰、公平和透明的环境,激励了贡献者持续参与项目,为开源社区做出贡献,使得研究者对贡献行为的研究增加。随着开源文化的普及,越来越多的新成员加入开源项目,为开源社区带来新的观点和能力,并需要社区的支持和指导,促进了关于社区内的互动和讨论的研究。
5. 结语
本文采用包括TF-IDF算法、Word2Vec模型在内的多种技术手段改进传统基于LDA模型进行主题识别与演化分析中存在的不足。在特征提取阶段,借助TF-IDF算法优化LDA模型的语料输入,克服传统LDA模型在构建语料库时忽略领域常见词汇影响的缺陷,以削弱常用词汇对主题生成过程的干扰,提升主题模型的准确度。在主题识别与演化分析阶段,将经过预处理的文献数据按照基于语义变化划分时间窗口的方法分配到不同的时间窗口中,独立训练各个时段的LDA主题模型,利用Word2Vec模型训练的词向量来计算主题向量,赋予主题语义层面的表述,并进行主题演化分析。最后以软件开源领域为例进行实证研究,研究结果表明,本文提出的基于LDA模型进行主题识别和演化优化方法能够挖掘出软件开源领域文献的主要研究主题及主题演化路径,实证分析结果如下。
1) 从主题识别结果来看,软件开源领域的研究主要覆盖了开发协作、开源治理、商业模式、市场竞争、代码维护、开源生态六个方面的主题。
2) 从主题强度演化趋势上看,研究者对开源治理、代码维护、开源生态三个主题的研究呈现上升趋势,对商业模式主题的研究强度相对稳定,而对开发协作和市场竞争的研究热度下降。
3) 从主题内容演化趋势上看,存在三条重要的演化路径:
(开源协议)→
(商业竞争)→
(许可竞争);
(自由软件)→
(生态演变)→
(社区协作);
(社区治理)→
(社区贡献)→
(贡献互动)。三条路径揭示了软件开源领域内不同元素之间的相互作用和影响,以及这些相互作用如何共同塑造了软件开源领域的发展轨迹。软件开源研究领域主题的演化与开源生态的演化具有一致性,即呈现从最初简单的个人维度关注开源动机的自发性和自治性,逐渐向复杂组织维度的企业参与和政府宏观治理演变的发展规律。
本文研究尚有一些不足之处:一是数据收集只选择WOS核心数据库中的文献作为数据来源,未广泛结合其他数据源综合分析。二是在LDA模型最优主题数量选择上仍然需要继续探索自动化确定主题个数的方法,减少主题数量选择的主观性。未来研究将融合其他自然语言处理技术进一步优化基于LDA模型的主题识别及演化模型,并拓展实证研究的数据源,提高模型的泛化能力。