概述

Chung-hong Chan公司1

验证测试称为“乌龙测试”(用于读取茶叶)。这个包提供了几个函数来生成不同类型的oolong测试。

功能 目的
wi() 使用验证主题模型单词入侵测试(Chang等人,2008)
ti() 使用验证主题模型主题入侵测试(Chang等人,2008;在Ying等人,2021中称为“T8WSI”)
威迪() 使用验证主题模型单词入侵测试主题入侵测试
wsi() 使用验证主题模型词集入侵测试(Ying等人,2021)
gs() 乌龙试验创造金本位(见Song等人,2020)

所有这些测试也可以使用函数生成创建_乌龙。从版本0.3.20起,不再建议使用。

安装

由于软件包不断变化,我们建议使用github:

#install.packages(“devtools”)
开发工具::安装github(“chainsawriot/乌龙”)

您还可以从CRAN安装“稳定”(但稍旧)版本:

安装.包(“乌龙”)

验证主题模型

单词入侵测试

摘要_种子数据是用数据训练的主题模型示例摘要使用播种的lda包裹。目前,此包支持来自stm公司,来自的扭曲LDA模型文本2vec,LDA/CTM模型来自主题模型,Biterm主题模型来自BTM公司,来自的关键字辅助主题模型密钥ATM和种子LDA模型种子dlda。虽然不是严格意义上的主题模型,但Naive Bayes模型来自quanteda.text模型也支持。请参阅上的部分朴素的贝叶斯了解更多信息。

图书馆(乌龙)
图书馆(种子dlda)
#>正在加载所需的包:proxyC
#>
#>正在附加包:“proxyC”
#>以下对象已从“package:stats”中屏蔽:
#>
#>距离
#>
#>正在附加包:“seeddlda”
#>以下对象已从“package:stats”中屏蔽:
#>
#>条款
图书馆(定量分析)
图书馆(dplyr)
#>
#>正在附加包:“dplyr”
#>以下对象从“package:stats”中屏蔽:
#>
#>过滤器,滞后
#>以下对象从“package:base”中屏蔽:
#>
#>相交,setdiff,setequal,并集
摘要_种子数据
#>
#>致电:
#>lda(x=x,k=k,label=label,max_iter=max_iter,alpha=alpha,
#>beta=beta,seeds=seeds,words=NULL,verbose=verbose)
#>
#>10个主题;2500份文件;3908个功能。

要使用单词入侵测试创建oolong测试,请使用函数wi公司。建议提供将要进行测试的编码器的用户id。

oolong_测试<- wi公司(摘要_种子数据,用户ID= “哈德利”)
oolong_测试
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息WSI公司
#> 哈德利
#> WI:k=10,编码为0。
#>
#>——方法——
#>
#>•<$do_word_intrussion_test()>:进行单词入侵测试
#>•<$lock()>:完成并查看结果

按照说明,使用该方法$do_word_instruction_test()开始编码。

oolong_测试$do_word_intrusion测试()

您可以通过单击“退出”按钮暂停测试。您的进度将记录在对象中。如果你想保存进度,只需保存对象(例如saveRDS(oolong_test,“oolong_test.RDS”)). 要恢复测试,请再次启动测试。

编码完成后(所有项目都已编码),您需要按“退出”按钮退出编码界面,然后锁定测试。然后,您可以通过打印乌龙测试来查看模型精度。

oolong_测试$()
乌龙(_T)
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息WSI公司
#> 哈德利
#> WI:k=10,编码10。
#>
#>——结果:——
#>
#> 90%精度

字集入侵测试

词集入侵测试是词入侵测试的一种变体(Ying等人,2021),其中一个主题的顶级术语生成的多个词集与另一个主题类似生成的一个入侵词集并列。在Ying等人中,这个测试被称为“R4WSI”,因为显示了4个单词集。默认情况下,oolong也会生成R4WSI。然而,也可以通过设置参数来生成R(N)WSIn_correct_ws(_n)至N-1。

乌龙(_T)<- 无线传感器网络(摘要_种子数据,用户ID= “加勒特”)
oolong_测试
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 无线技术信息WSI公司
#> 加勒特
#> WSI:n=10,编码为0。
#>
#>——方法——
#>
#>•<$do_word_set_intrusion_test()>:进行字集入侵测试
#>•<$lock()>:完成并查看结果

使用该方法$do_word_set_instruction_test()开始编码。

oolong_测试$do_word_set入侵测试()
oolong_测试$()
oolong_测试
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息WSI公司
#> 加勒特
#> WSI:n=10,编码10。
#>
#>——结果:——
#>
#> 90%精度(WSI)

主题入侵测试

例如,摘要_种子数据是用语料库生成的摘要$text

图书馆(颤抖)
摘要
#>#A桥:2500×1
#>文本
#><氯>
#>1本研究探讨了医疗旅游度假的益处和风险…
#>2本文提出了随着股票交易的转移…
#>3本研究的目的是评估视觉逼真度对…
#>4在众多与大学生相关的健康问题中,过度消费是导致大学生健康问题的主要原因…
#>5在ICA 50周年纪念大会上发表的这篇演讲呼吁…
#>6互联网经常被用来联系男男性接触者(MSM)…
#>7本文认为,描述互联网革命的文献是…
#>8本研究以巴德·古道尔(Bud Goodall)的在线健康叙事为例…
#>9信息技术和新媒体允许收集和共享人员…
#>10通过对1762名12-17岁青少年的全国电话调查…
#> # 还有2490行

使用用于训练主题模型的语料库创建oolong测试对象将生成主题入侵测试用例。

oolong_测试<- (摘要_种子数据集,摘要$文本,用户ID= “朱莉娅”)
oolong_测试
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息WSI公司
#> 朱莉娅
#> TI:n=25,编码为0。
#>
#>——方法——
#>
#>•<$do_topic_intrusion_test()>:进行主题入侵测试
#>•<$lock()>:完成并查看结果

类似地,使用$do_topic_intrusion测试要对测试用例进行编码,请使用$锁定()然后可以通过打印oolong测试来查看TLO(主题日志赔率)值。

oolong_测试$do_topic_inrusion测试()
oolong_测试$()
oolong_测试
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息WSI公司
#> 朱莉娅
#> TI:n=25,25编码。
#>
#>——结果:——
#>
#> TLO:-0.187

建议的工作流

如果涉及多个编码器,则测试更有意义。建议的工作流是创建测试,然后克隆oolong对象。请多名编码人员进行测试,然后总结结果。

预处理并创建文档特征矩阵

代币(摘要$文本,删除_取消= 真的,删除符号= 真的,删除_编号= 真的,删除url= 真的,spilit_hyphens(连字符)= 真的)%>% 标记词干%>% 标记_删除(权宜之计(“en”(英语)))%>% 数据流管理(托洛尔= 真的)%>% dfm微调(最小docfreq= ,最大docfreq= 500)%>% dfm选择(最小字符= ,图案= “^[a-zA-Z]+$”,值类型= “正则表达式”) -> 摘要_dfm

训练主题模型。

要求(种子dlda)
摘要_种子数据<- 文本模型种子lda(x个=摘要_dfm,字典= 词典(摘要_字典),种子= 46709394,冗长的= 真的)

创建新的乌龙对象。

乌龙_测试_水1<- 维蒂(摘要_种子数据集,摘要$文本,用户ID= “一辉”)

克隆其他评分员使用的oolong对象。

乌龙茶2<- 克隆(_O)(oolong_test_rater1,用户ID= “珍妮”)

请不同的编码人员对每个对象进行编码,然后锁定该对象。

##让一辉做测试。
乌龙_测试_水1$do_word_intrusion测试()
乌龙_测试_水1$do_topic_inrusion测试()
乌龙_测试_水1$()

##让珍妮做测试。
乌龙_测试_水2$do_word_intrusion_test(堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆)()
乌龙_测试_水2$do_topic_inrusion测试()
乌龙_测试_水2$()

获取两个对象的摘要。

summarize_olong(oolong_test_rater1,oolong_test_rater 2)
#>
#>——总结(主题模型):──────────────────────────────────────────────────────
#>
#>——文字入侵测试——
#>
#> 平均模型精度:0.25
#> 模型精度分位数:0.2、0.225、0.25、0.275、0.3
#> 模型精度的P值
#>(H0:模型精度不优于随机猜测):0.3656
#> 克里芬多夫阿尔法:0.747
#> K精度:
#> 0, 0.5, 1, 0, 0, 0, 0, 0, 0, 1
#>
#>——主题入侵测试——
#>
#> 平均TLO:-1.5
#> TLO中位数:-1.12
#> TLO分位数:-4.71、-2.83、-1.12、0、0
#> 中值TLO的P值
#>(H0:TLO中值不比随机猜测好):0.114

关于p值

模型精度(MP)测试是基于每个评分者的单尾单样本二项式测试。在多比率情况下,使用费希尔方法(也称为费希尔综合测试)组合所有评分员的p值。

H0:MP不优于1/(n_top_terms+1)

H1:MP优于1/(n_top_terms+1)

TLO中值的测试基于排列测试。

H0:平均TLO并不比随机猜测好。

H1:中值TLO优于随机猜测。

必须注意的是,这两个统计测试正在测试熊的最小值。一项重要的测试表明,主题模型可以使评分者比随机猜测表现更好。这并不是一个良好的主题可解释性的迹象。此外,应使用非常保守的显著水平,例如\(α<0.001).

关于Biterm主题模型

请参阅BTM的小插曲。

关于Naive Bayes

朴素贝叶斯模型是一种有监督的机器学习模型。此软件包支持使用quanteda.text模型.

假设新闻组nb是一个朴素的贝叶斯模型,它基于经典的[20新闻组]数据集的子集进行训练。

代币(新闻组5$文本,删除_取消= 真的,删除符号= 真的,删除_编号= 真的,删除url= 真的,spilit_hyphens(连字符)= 真的)%>% 标记词干%>% 标记_删除(权宜之计(“en”(英语)))%>% 数据流管理(托洛尔= 真的)%>% dfm微调(最小频率(_T)= ,最大docfreq= 0.06,文档格式类型= “道具”) -> 新闻组_格式
文档变量(新闻组_格式,“组”) <- 新闻组5$标题
新闻组nb<- 文本模型_nb(新闻组_格式,文档变量(新闻组_格式,“组”),分配= “伯努利”)

您仍然可以生成单词入侵和单词集入侵测试。

wi公司(新闻组nb)
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息无线传感器
#> WI:k=20,编码为0。
#>
#>——方法——
#>
#>•<$do_word_intrussion_test()>:进行单词入侵测试
#>•<$lock()>:完成并查看结果
无线传感器网络(新闻组nb)
#>
#>——乌龙(主题模型)────────────────────────────────────────────────────────
#> 威斯康星州技术信息WSI公司
#> WSI:n=20,编码为0。
#>
#>——方法——
#>
#>•<$do_word_set_intrusion_test()>:进行字集入侵测试
#>•<$lock()>:完成并查看结果

验证基于字典的方法

创造金本位

王牌2k是@realdonaldtrump 2000条推文的数据集。

易怒的(文本=王牌2k)
#>#A台:2000×1
#>文本
#><氯>
#>1“在刚刚出版的书中,特勤局特工加里·拜恩不相信克鲁…
#>“希拉里·克林顿(Hillary Clinton)宣布,她将让丈夫去坎佩(campai)…
#>3“\”@TheBrodyFile:很高兴能与@TheBrody File一对一地访问\…
#>4“向一无所知的@brithume和@megynkelly解释,我会打败Hi…
#>5“没有人在国家安全方面打败我。https://t.co/sCrj4Ha1I5"
#>6“\”@realbill2016:@realDonaldTrump@Brainykid2010@shl Trump领先洛杉矶时报…
#>7“\”@teapartynews:特朗普赢得茶党集团的“纳什维尔稻草投票”-新闻…
#>8“今晚在棕榈滩Mar-a-Lago举行共和党大餐。我会去的!”
#>9“.@希拉里·克林顿喜欢撒谎。美国已经受够了克林顿的!它…
#>10“@brianstoya:@realDonaldTrump 2016年POTUS”
#> # 1990多行

例如,你有兴趣研究这些推文的情绪。人们可以使用AFINN等工具自动提取这些推文中的情绪。然而,oolong建议首先使用子集通过人工编码生成黄金标准。默认情况下,oolong选择1%的原始语料库作为测试用例。参数建造应该是一个形容词,例如积极、自由、民粹主义等。

oolong_测试<- (输入corpus=王牌2k,构造= “积极”,用户ID= “乔”)
oolong_测试
#>
#>——乌龙(金本位制)───────────────────────────────────────────
#> 
#> GS:n=20,编码为0。
#> 建构:积极。
#>
#>——方法——
#>
#>•<$do_gold_standard_test()>:生成金标准
#>•<$lock()>:完成此对象并查看结果

按照指示,使用方法$do_gold_standard_test()开始编码。

oolong_测试$do_gold标准测试()

编码后,您需要首先锁定测试,然后锁定$turn_gold()方法可用。

乌龙(_T)$()
oolong_测试
#>
#>——乌龙(金标准代)───────────────────────────────────────────
#> 
#> GS:n=20,编码20。
#> 建构:积极。
#>
#>——方法——
#>
#>•<$turn_gold()>:将测试结果转换为定量语料库

示例:使用金标准验证AFINN

锁定的乌龙测试可以转换为与定量兼容的语料库,以便进一步分析。语料库包含两个文档变量,'回答'。

oolong_测试$转弯(_G)()
#>语料库由20个文档和1个docvar组成。
#>文本1:
#>“谢谢你,Eau Claire,威斯康星州。#VoteTrump,4月……”
#>
#>文本2:
#>“”@boby990r_1:@realDonaldTrump将在第二轮投票中领先。。。"
#>
#>文本3:
#>“”@KdanielsK:@misstcassidy@AllAboutTheTea_@realDonaldTrump。。。"
#>
#>文本4:
#>“感谢您在阿拉巴马州伯明翰度过了一个美好的下午!#Trump2…”
#>
#>文本5:
#>“”@THETAINTEDT:@foxandfriends@realDonaldTrump 2016 ht…“
#>
#>文本6:
#>“如今人们几乎不相信CNN……”
#>
#>[已达到max_ndoc…还有14个文档]
#> 使用quanteda::docvars(obj,'answer')从编码中访问答案

在这个例子中,我们使用quaneda计算每条推文的AFINN分数。字典阿芬与此包裹捆绑在一起。

黄金标准<- oolong_测试$变金()
黄金标准%>% 代币(删除(_punct)= 真的)%>% 数据流管理()%>% dfm查找(阿芬)%>%
    夸特达::转换(至= “data.frame”)%>%
    突变(匹配字价=(阴性5* -5)+ (阴性4* -4)+ (阴性3* -3)+ (阴性2* -2)+ (阴性1* -1)
           + (零* 0)+ (位置1* 1)+ (位置2* 2)+ (位置3* )+ (位置4* 4)+ (位置5* 5),
           底座= 托肯(黄金标准,删除_取消= 真的),afinn核心=匹配字价/ 底座)%>%
    (afinn_score)-> 所有最终得分
所有最终得分
#>文本1文本2文本3文本4文本5文本6
#>  0.33333333 -0.09090909 -0.16666667  0.45454545  0.00000000  0.00000000
#>文本7文本8文本9文本10文本11文本12
#>  0.16666667  0.38461538  0.00000000  0.38461538 -0.29166667  0.00000000
#>文本13文本14文本15文本16文本17文本18
#>  0.50000000  0.07142857  0.00000000 -0.12000000  0.28571429  0.16000000
#>文本19文本20
#>  0.36842105  0.38888889

将AFINN得分向量放回相应的文档变量并研究金标准与AFINN的相关性。

summarize_olong(oolong_test,目标值=all_afinn_score)
#>新名称:
#>`geom_smooth()`使用公式='y~x'
#>`geom_smooth()`使用公式='y~x'
#>
#>——总结(金标准生成):
#> ─────────────────────────────────────────
#> 相关性:0.718(p=4e-04)
#> 含量长度的影响:-0.323(p=0.1643)
#> • `` -> `...1`

建议的工作流

创建一个oolong对象,为另一个编码器克隆它。根据Song等人(2020年)的说法,你至少应该提取1%的数据。

特朗普<- (输入corpus=王牌2k,精确n= 40,用户ID= “JJ”)
王牌2<- 克隆(_O)(特朗普,用户ID= “温斯顿”)

指示两名编码员对推文进行编码并锁定对象。

王牌$do_gold标准测试()
王牌2$do_gold标准测试()
王牌$()
王牌2$()

通过将一个对象转换为语料库来计算目标值(在本例中为AFINN分数)。

黄金标准<- 王牌$变金()
黄金标准%>% 代币(删除_取消= 真的)%>% 数据流管理()%>%
    dfm查找(阿芬)%>% 夸特达::转换(至= “data.frame”)%>%
    突变(匹配字价=(阴性5* -5)+ (阴性4* -4)+ (阴性3* -3)+ (阴性2* -2)+ (阴性1* -1)
           + (零* 0)+ (位置1* 1)+ (位置2* 2)+ (位置3* )+ (位置4* 4)+ (位置5* 5),
           底座= 托肯(黄金标准,删除_取消= 真的),afinn核心=匹配字价/ 底座)%>%
    (afinn_score)-> 目标值

用目标值汇总所有oolong对象。

资源<- summarize_olong(王牌,王牌2,目标值=目标值)
#>新名称:
#>`geom_smooth()`使用公式='y~x'
#>`geom_smooth()`使用公式='y~x'
#> • `` -> `...1`
#> • `` -> `...2`

阅读结果。诊断图由4个子图组成。阅读Bland&Altman(1986)关于相关性和一致性之间的差异是一个好主意。

文本输出包含评分员的代码的Krippendorff alpha。为了声称目标值的有效性,您必须首先建立黄金标准的可靠性。Song等人(2020年)建议Krippendorff的Alpha值>0.7为可接受的截止值。

物件
#>
#>——总结(金标准生成):─────────────────────────────────────────
#> 克里芬多夫阿尔法:0.931
#> 相关性:0.744(p=2e-04)
#> 含量长度的影响:-0.323(p=0.1643)
情节(资源)

向后兼容性

历史上,oolong测试对象只能用一个函数生成:创建_乌龙不再是这种情况,也不再推荐。出于向后兼容的目的,它仍然被保留。如果您仍然需要使用create_oolong(),最重要的参数是输入_模型输入_ CPU。将每个设置为无效的生成不同的测试。

输入_模型 输入corpus 输出
不为NULL 无效的 用于验证主题模型的oolong测试单词入侵测试
不为NULL 不为NULL 用于验证主题模型的oolong测试单词入侵测试主题入侵测试
无效的 不为NULL 乌龙试验创造金本位
无效的 无效的 错误

工具书类

  1. Chang,J.、Gerrish,S.、Wang,C.、Boyd-Graber,J.L.和Blei,D.M.(2009)。阅读茶叶:人类如何解释主题模型。《神经信息处理系统进展》(第288-296页)。链接
  2. Ying,L.、Montgomery,J.M.和Stewart,B.M.(2021)。从主题推断概念:将主题验证为度量的过程。政治分析。链接
  3. Song等人(2020)在我们信任的验证中?不完美的人工注释作为黄金标准对自动内容分析验证质量的影响。政治沟通。链接
  4. Bland,J.M.和Altman,D.(1986年)。评估两种临床测量方法之间一致性的统计方法。《柳叶刀》,327(8476),307-310。
  5. Chan等人(2020年)使用“现成”词典测量新闻情绪的四个最佳实践:大规模p-hacking实验。计算通信研究。链接
  6. 尼尔森,F.O。(2011). 一个新的ANEW:评估微博中的情感分析词表。arXiv预打印arXiv:1103.2903。链接


  1. GESIS公司↩︎