
导读:为什么要使用机器来理解音频内容呢?一个重要的出发点就是在大量数据存在的情况下,由人来完成音频内容的理解是一件较为困难的事情,在图片和文本处理方面,快速理解尚有一定实现的可能,古代有一个形容人记忆力很好的成语叫做走马观碑,描述一个人骑着快马路过一个石碑,看到石碑上密密麻麻的小字一瞬间就能够全部记下来。但是对于音频与视频这种内容,即使在加速的情况下也需要一定的时间来听完、看完音频和视频内容才能够进一步理解它。如果采取人力处理这些问题会遇到困难,我们就可以借助于机器辅助人来进行处理。
机器在理解音频的过程中需要理解哪些内容呢?就需要我们来分析场景问题。
--

在18年的时候,红极一时的一名主播因为在直播过程中发表一些不当的言论而遭到封杀。同样的案例还有因主播在直播过程中发表涉政相关的言论而被封杀。今年是建国70周年,很多境外的反动组织为了扩散他们的言论在某些直播平台或者社交平台散播宣传音频或者视频。他们通常用录音机等播放设备将提前录制好的音频和视频连续不断地进行播放,这是一个典型的社交问题。
此外,直播中还存在较多的色情问题,包括视频、图像方面的色情,也包括音频方面的色情。有时也会有广告导流行为,所谓广告导流就是在某一个直播平台上,大家在音视频交流过程中有人发类似于我们私下加个微信聊吧,这样这个平台的流量就会被导走。我们的工作就是要在音频中识别出这些行为,为这些行为打上标签,让运营平台知道这些音频中存在这样或者那样的问题。以上所分析的问题完全属于截流问题。
内容理解的优势在于可以进行内容推荐,一个典型的例子就是在交友的社交平台上,如果通过声音识别出是一位大叔,就可以给他推荐一位萝莉,如果声音识别是一位御姐,就可以推荐给她一个正太,这样就有希望延长他们之间的交流时间。

内容理解核心的解释就是将非结构化的内容结构化,其中重要的途径是标签,通过各种手段为音频或者视频打上各种标签,方便后面去做各种处理。比如拦截和推荐。
--
对于上述问题,我们的解决方案主要包括四个步骤:

内容理解的过程中存在一定的困难,比如远场识别,对于直播来说识别过程中最大的困难是混响和噪声。主播在直播过程中为了吸引更多的人观看通常会唱歌,唱歌一般都会加混响来使歌声听起来有绕梁三日的感觉。但是这种情况就会对语音识别产生较大的影响。此外,我们在使用语音搜索和语音输入法的过程中为了获得更加正确的结果会故意放慢说话速度,表达相对更加清晰。而直播过程中为了获得良好的互动,说话都会比较随意。唱歌也是一个比较难解决的问题,在语音识别建模的过程中,很多情况下都是使用带音调的音素来进行建模,但是在唱歌的过程中语音的声调会发生变化。这样也会引起识别不准确的问题。目前已经有很多有效的方法来解决这些问题。

下面介绍下解决上述问题的相关工作,首先是音频切割(VAD),这种技术是比较主流的一种方法,先通过深度学习 DNN 来预测出一段音频是静音还是非静音。然后通过加窗得到最终的结果。

在语音转写文字的过程中,采用 DNN+LSTM,然后使用 lattice-free MMI 方法训练现有模型,我们使用的语言模型是 ngram 方式。这是一个相对比较主流的框架。目前 ASR 主要解决的是把音频中的文字提取出来。

前面我们提到还有一部分语音识别不能通过转文字获得。比如是否有音乐,播放音乐的名称,是否存在色情声音等等。我们采用声音分类的框架来解决这个问题。首先需要对音频进行数据增强,因为在音频分类条件下数据的 label 并不均衡,特别是存在一些小众的声音,非常稀少,所以需要对这些数据进行增强。我们使用 TDNN+bi-GRU+Attention 框架。

上述第一步将音频转换成文字,第二步将分类信息标签集,第三步需要对转换出来的文字进行文字识别,文字识别主要包括文字的分类:基于一段文字判断它所属的类别,比如这段文字是不是属于色情话题或者是带有辱骂性等。模型不能完全解决这方面的问题,还需要有关键词类比。我们给出的框架通过 fasttext 模型或者一些传统的机器学习算法来进行模型分类,同时联合关键词信息进行处理。在使用模型训练之前首先对文本进行预处理,比如分词、归一化等。

最后一步是行为识别,例如境外反动组织要去散播反动言论会在平台上开很多账号,对于每个账号不会雇佣不同的人去宣传言论,而是使用录制好的音频来播放相同的言论内容,这样他的行为就会有一定的聚集性,在这种设备或者 IP 上的具体行为可以通过一个逻辑回归模型来打分。通过分数判断这个行为是不是存在问题。行为识别也可以检测出一些有问题的内容。

下图是我们整个框架的架构图,将上述我们分析的各个模块整合在一起。在模型层面包括 ASR 模型、文字相关模型、声音相关模型、行为相关模型、名单库等。通过引擎层输出各种各样的分数,最后我们有一套规则,规则引擎会对所有模型层面和画像层面输出的结果进行汇总,最终得到结论。

下面是我们真实的一个价值体现,某直播平台同时采用用户举报、人工抽审、数美智能审核三种方案监测平台直播内容。用户举报平均每天抓出1个违规音频,人工抽审平均每天抓出20个违规音频(审核团队30人),数美智能审核系统平均每天抓出160个违规音频,同时数美智能审核系统反馈音频转文字结果、自动记录违规音频位置、发生时间等信息。

今天的分享就到这里,谢谢大家。
本文首发于微信公众号“DataFunTalk”
注:欢迎转载,转载请留言或私信。
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在尝试学习Ruby词法分析器和解析器(whitequarkparser)以了解更多有关从Ruby脚本进一步生成机器代码的过程。在解析以下Ruby代码字符串时。defadd(a,b)returna+bendputsadd1,2它导致以下S表达式符号。s(:begin,s(:def,:add,s(:args,s(:arg,:a),s(:arg,:b)),s(:return,s(:send,s(:lvar,:a),:+,s(:lvar,:b)))),s(:send,nil,:puts,s(:send,nil,:add,s(:int,1),s(:int,3))))任何人都可以向我解释生成的
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正处于学习Ruby的阶段,我想查看一些小型库的源代码以了解它们是如何构建的。我不知道什么是小型图书馆,但希望SO能推荐一些易于理解的图书馆来学习。因此,如果有人知道一两个非常小的库,这是新手Rubyists学习的好例子,请推荐!我想使用Manveru'sInnatelib,因为它试图保持在2000LOC以下,但我还不熟悉其中经常使用的Ruby速记。也许大约100-5