重磅干货!如何使用Stata软件检测文章抄袭

摘要:本次介绍lsemantica命令,它可以在Stata中实现潜在语义分析。潜在语义分析是一种用于单词和文本相似度比较的机器学习算法,lsemantica提供了用于潜在语义分析的简单命令以及用于文本相似性比较的补充命令。

这是社论前沿第S1468次推送

微信号:shelunqianyan

潜在语义分析 

两个文本文档的语义相似性是一个非常有用的度量。例如,知道两个文档具有相似的内容或含义可以帮助识别同一作者的文档,测量信息的传播,或检测抄袭。

当试图识别具有相似含义的文档时,存在两个主要问题。首先,同一个词在不同的上下文中可以有不同的含义。第二,不同的单词在其他上下文中可以有相同的含义。因此,仅使用文档中的单词作为相似性度量是不可靠的。对于几百个文档来说,阅读和手工编码文档已经成为禁忌。

潜在语义分析(LSA)通过为单词和文本提供可靠的语义相似性度量,为这一问题提供了一种解决方案。LSA是由Deerwester等人开发的用于满足自动信息检索任务。在搜索查询中,理解单词的关系和含义很重要,因为仅仅使用查询术语通常会导致不满意的搜索结果。

LSA通过考虑单词的关系和潜在的多重含义来改进结果。正是这个属性使LSA适用于各种不同的任务,包括:

1.单词的相似性

2.文本的相似性

3.计算机引导的摘要写作

4.自动论文评分

5.评估语篇连贯性

对于所有这些应用程序,LSA通过使用截断奇异值分解推导出单词和文档之间的隐藏语义联系。同样,截断奇异值分解使LSA能够通过分解“语义空间”来“学习”单词之间的关系。这一过程使LSA能够准确地判断文本的含义。LSA使用单词共现,而LSA可以推断出单词之间更深层次的关系。

lsemantica命令,为在Stata中使用LSA提供了一个解决方案。lsemantica使用lsemantica_ cosine命令进一步简化了Stata中的文本相似性比较。这样,lsemantica进一步改进了Stata的文本分析能力。

Stata已经允许使用strdist命令计算Levenshtein编辑距离,并且txttool命令有助于文本数据的清理和标记化。此外,ldagibbs命令允许在Stata中运行潜在Dirichlet分配。虽然ldagibbs可以按相似的主题将文档分组在一起,但如果人们主要对文档的相似程度感兴趣,则lsemantica更可取。

Stata软件操作 

对于lsematica,用户想要用于LSA的每个文档都应该是数据集中的一个观察值。如果文档由数千个单词组成,则用户可以将文档拆分为较小的部分,例如段落,以单独处理每个部分。在任何情况下,文本字符串只应使用一个变量。此外,应从字符串中删除非字母数字字符。

lsemantica命令是通过指定包含文本的变量来启动的。有一个选项可以选择截断奇异值分解的分量数量。lsemantica的选项还允许从文本字符串中删除停止词和短词。txttool命令提供了更高级的文本清理选项。lsemantica还提供了两个选项来减少词汇表的大小。在截断奇异值分解由于词汇表的大小而需要很长时间的情况下,这些选项非常有用。

1.命令格式

500

2.选项解读

components(Integer)指定语义空间应该由lsemantica减少到的组件的数量。组件的数量通常基于词汇表的大小来选择。默认值为components(300)。

tfidf指定在应用截断奇异值分解之前是否应该使用tfidf重新加权。在大多数情况下,tfidf重新加权将改善结果。

min_char(整数)允许从文本中删除短词。字符少于最小字符(整数)的单词将从LSA中排除。默认值为min_char(0)。

stopwords(String)指定要从lsemantica中排除的单词列表。通常,频繁出现的单词如“我”、“你”等被从文本中删除,因为这些单词对文档的意义贡献甚微。不同语言的预定义停词列表可在线获得。

min_freq(整数)允许删除出现在较少文档中的单词。出现在少于min_freq(整数)的文档中的单词将从LSA中排除。默认值为min_freq(0)。

max_freq(real)允许删除文档中频繁出现的单词。出现在超过max_freq(real)文档的共享中的单词将从LSA中排除。默认值为max_freq(1)。

name_new_var(string)指定lsemantica创建的输出变量的名称。这些变量包含每个文档的组件。用户应确保名称new_var(string)在数据集中是唯一的。默认情况下,变量的名称是component,因此新变量的名称将是component_1—component C,其中C是组件的数量。

Mat_save指定是否应保存单词成分矩阵。这个矩阵描述了单词之间的语义关系。默认情况下,不会保存矩阵。

path(string)设置保存单词分量矩阵的路径。

3.结果输出

lsemantica生成C个新变量,这些变量是由截断奇异值分解生成的分量。如前几节所述,这些组件捕获文档的语义关系,并允许计算文档之间的相似性。

基于LSA的文档相似度通常通过每个文档的分量向量的余弦相似度来度量。余弦相似性是相关系数的非中心形式。对于高度相似的文档,余弦相似度是1,对于完全不相似的文档,余弦相似度是−1。当使用LSA时,余弦相似度通常位于单位区间内。只有对于高度不同的文档,余弦相似性才是负的。

lsemantica还提供了lsemantica_cosine命令,以便于分析余弦相似性。Lsemantica_cosine计算所有文档的余弦相似度,并将其存储在Mata.3中。此外,lsemantica_cosine可以提供余弦相似度的汇总统计,并找到高度相似的文档。


示例分析 

示例数据集包含1980至2016年间在经济期刊上发表的41,349篇文章的标题。加载数据后,将从标题字符串中删除非字母数字字符,以便为LSA做准备。

500

(温馨提示:点击查看大图)

只需调用lsemantica命令就可以启动LSA。

首先,lsemantica准备文档并生成文档术语矩阵。lsemantica还从数据中删除少于4个字符的单词和出现在少于10个文档或超过一半的所有文档中的单词。此外,从数据中删除停止词。然后使用TFIDF重新加权得到的文档术语矩阵。

每次处理10%的词汇表时,该命令都会报告。

500

(温馨提示:点击查看大图)

如果文档在文本清理后没有留下任何单词,lsemantica将从数据中删除这些观察结果,因为它们干扰了截断的奇异值分解。lsemantica报告哪些文档已从数据中删除,以及词汇表的大小。在本例中,删除了167个文档。删除文档主要是由于选项min_freq(10)发挥作用。

接下来,lsemantica计算截断奇异值分解,这是计算密集型的,可能需要一些时间。在某些情况下,Stata在此过程中变得无响应。截断奇异值分解所需的时间随着文档术语矩阵的大小而增加,从而随着文档的数量和词汇表的大小而增加。

在lsemantica完成运行后,可以通过使用lsemantica_cosine命令计算组成向量之间的余弦相似度来开始分析文档的相似性。由于维度的原因,生成的余弦相似性矩阵存储在Mata中。如果需要,可以在lsemantica_cosine命令后使用getmata(cosin*)=cosine_sim从Mata检索完整的余弦相似性矩阵。Lsemantica_cosine还允许计算与其他文章标题的平均相似度以及最大和最小相似度。

500

500

此外,lsemantica余弦可以为数据中的每一篇文章找到最相似的文章。在本例中,计算了10篇最相似的文章。之后,列出了数据中第一篇文章的五个最相似的文章标题。人们可以看到,在所有讨论劳动力供应问题的文章中,LSA准确地识别了高度相似的文章。

最后,lsemantica可以比较语义关系和词语的相似性。使用lsemantica_word_comp,可以导入lsemantica存储的单词成分矩阵。同样,lsemantica_cosine可以用于计算数据中单词之间的余弦,并找到最相似的单词。这个例子表明lsemantica识别出“劳动”、“力量”、“分段”、“分工”、“摩擦”和“垄断”这几个词彼此相关。

500

500

结 语

LSA已经被证明是一种通用的文本分析算法。lsemantica将LSA引入Stata,并可以帮助研究人员使用lsemantica_cosine命令更准确地度量文本文档的相似性。因此,lsemantica开辟了在Stata中分析文本数据的新方法。尽管以上示例是基于英文文章展开的操作,但同样对中文文章的相关操作也具有一定的适用性和启发性。

全部专栏