语音神经科学—02.Speech synthesis from neural decoding of spoken sentences_opala ak,josh c,edward cf.speech synthesisfrom neu-程序员宅基地

技术标签: EEG  人工智能  BCI  语音识别  语音合成  

Speech synthesis from neural decoding of spoken sentences(通过神经解码口语句子进行语音合成)

专业术语

speech synthesis 语音合成
brain-computer interface(BCI)脑机接口
bidirectional long short-term memory(bLSTM) 双向长短时记忆网络
vental sensorimotor cortex(vSMC) 腹侧感觉运动皮层
superior temporal gyrus(STG) 上颞回
inferior frontal gyrus(IFG) 下额回
acoustic feature 声学特征
mel-frequency cepstral coefficients(MFCCs) 梅尔频率倒谱系数
mean Mel-Cepstral Distortion(MCD) 平均梅尔倒谱失真
Pearson’s correlation 皮尔逊相关系数
acoustic feature 声学特征
Electromagnetic Articulography(EMA) 电磁声门分析
spectral features 频谱特征
auditory feedback 听觉反馈
spectrograms 频谱图
Kullback-Leibler divergence KL散度
electrode 电极
Principal Component Analysis(PCA) 主成分分析
formants 共振峰
Spectral Envelope 频谱的包络

概述

研究者设计了一个神经解码器,明确地利用人类大脑皮层活动中编码的运动学和声音表征来合成可听的语音。

背景

沟通能力丧失的神经系统疾病对大多数患者来说是十分绝望的,尽管现在有一些方法能够让患者利用通信设备,选择字母进行拼写单词,但这些方法的速度有限,我们需要研究更高速率的通信方式
拼写是离散字母的顺序串联,而语音是一种高效的沟通形式,通过流畅的多关节发声道运动产生。因此,一种以发声道运动和它们产生的声音为重点的仿生学方法可能是实现自然语音高通信速率的唯一途径,也可能是用户最直观的学习方式。
作者研究的目标是利用神经科学和信号处理技术,将大脑信号解码为语音表达。通过通过分析大脑活动中与语音产生相关的模式和信号,研究人员希望能够准确地还原出可理解的语音输出。

语音解码设计(speech decoder design)

下图展示了一个有两阶段的解码方法:
在这里插入图片描述
第一阶段:一个双向长短期记忆(bLSTM)循环神经网络从来自腹侧感觉运动皮层(vSMC)、上颞回(STG)和下额回(IFG)的连续神经活动(高伽马振幅包络和低频成分)中解码口腔运动学特征(图1a,b)。
第二阶段:一个独立的bLSTM从第一阶段解码得到的口腔运动学特征中解码声学特征(基频F0、梅尔频率倒谱系数(MFCCs)、声门振动和声门激励强度)(图1c)。然后,从解码得到的声学特征中合成音频信号(图1d)。
为了整合解码器的两个阶段,第二阶段(articulation-to-acoustics)直接在第一阶段(brain-to-articulation)的输出上进行训练,这样它不仅可以学习从运动学到声音的转换,还可以纠正第一阶段中可能出现的口腔运动估计误差。

合成性能(synthesis performance)

音频频谱图(audio spectrograms)

下图展示了从脑活动解码得到的语音与原始口语句子的音频频谱图的比较。共两句话,左右各一句,上方是原始语音频谱图,下方是解码到的的语音频谱图。

Q: 什么是频谱图?原始语音频谱图和解码得到的语音频谱图代表什么?
A: 频谱图是语音信号在时间和频率上的表示。它展示了语音信号在不同频率上的能量分布随时间的变化。解码后的频谱图是通过对解码后的语音信号进行频谱分析得到的。
tips:原始口语句子的音频频谱图显示了语音信号在不同频率和时间上的声能分布。而解码的音频频谱图则表示通过解码脑活动得到的语音信号的声能分布。

在这里插入图片描述
从图上可以看出,解码器保留了原始频谱图中的显著能量模式,这意味着解码后的频谱图能够准确地捕捉到原始语音幸好中重要的声学特征和能量分布。这对于语音重建任务非常重要,因为能够保留原始频谱图的能量模式可以确保解码后的语音听起来更加自然和准确。

Q: 原始语音的声学特征和能量分布是什么
A: 原始语音的声学特征和能量分布可以通过音频频谱图来表示和分析。以下是一些与原始语音相关的声学特征和能量分布的解释:

  • 音高(Pitch):音高是指语音信号中的基频,也就是声音的音调高低。在音频频谱图中,音高对应于频谱中的周期性峰值或频率分布的周期性特征
  • 音量(Intensity):音量表示声音的强度或能量。在音频频谱图中,音量对应于频谱中的能量分布,通常通过颜色的亮度表示。
  • 音色(Timbre):音色是指声音的质地或特征,使不同声源或乐器的声音具有独特的辨识度。音色特征在音频频谱图中通过频谱的谱线形状和分布来表示。
  • 噪声成分(Noise Components):除了基频和谐波成分之外,语音中还可能包含噪声成分,如呼吸声、环境噪声等。这些噪声成分在音频频谱图中通常表现为能量分布较广泛的频率区域
  • 共振峰(Formants):共振峰是语音信号中的频率区域,对应于声道(如口腔和喉部)的共振峰值。共振峰在音频频谱图中表现为能量分布较高的频率峰值

中值谱图(Median spectrograms)

Q: 什么是中值谱图
A: "Median spectrograms"是指在一组频谱图中计算得到的中值谱图
频谱图是语音信号在时间和频率上的表示,它显示了语音信号在不同频率上的能量分布随时间的变化。对于一组语音信号,可以将每个语音信号转换为频谱图,并将它们组合在一起形成一个集合。
在这个集合中,每个时间点和频率点的能量值可以通过计算集合中对应位置的值的中位数来得到。这样得到的中值能量值可以用来构建中值谱图。

下图展示了在音素级别上重建的质量。原始和合成音素的中位数频谱图显示,解码的样本中保留了典型的频谱时域模式(例如元音/iː/和/æ/的共振峰F1-F3;以及辅音/z/和/p/的关键频谱模式,分别表现为中频带能量和宽带爆破)。
这些模式的保留和重建在研究中可以用来评估解码算法在音素级别上的准确性和效果。
在这里插入图片描述

Q: 什么是频谱时域模式?
A: "频谱时域模式"指的是声音信号在频谱和时间域上的特定模式或特征。它描述了声音信号在不同频率和时间点上的能量分布和变化。频谱时域模式指的是在频谱图中可以观察到的特定形态、峰值或能量集中的模式。
例如,对于元音音素,频谱时域模式可以表现为具有清晰共振峰的频谱形态,这些共振峰对应于声道的共振特征。对于辅音音素,频谱时域模式可以表现为具有特定的峰值或能量集中的频率区域,这些频率区域对应于辅音的特征如爆破音、摩擦音等。

听觉任务

在听觉任务中,参与者被要求听合成的语音,并根据自己的听觉感知进行相应任务。分为单词级别和句子级别的转写任务。
单词级别
参与者需要听一个合成单词,并尝试将其正确地识别出来。评估了从合成句子中分离出来的325个单词,并量化了单词长度(音节数)单词数量(10、20、50个单词)对语音理解的影响。
观察到的结果是,随着单词音节数增加,听者识别的更加准确,相反,随着单词数量的增加,听者识别的准确度降低,这和自然语音感知是一致的。
在这里插入图片描述
句子级别
参与者需要听一个合成的句子,并尽可能准确地将其转写成文字形式。 作者设计了一个封闭词汇表,听众听到整个合成的句子,并通过从一个定义的池(25或50个单词)中选择单词来记录他们听到的内容。这些单词包括目标单词和测试集中的随机单词。
观察到的结果是,如下图展示了每个句子的平均单词错误率(WER),在大小为25的池中,句子转录的WER中值为31%,在大小为50的池中,句子转录的WER中值为53%。
在这里插入图片描述

解码性能的量化

特征级别
研究人员对所有参与者的解码性能进行了特征级别的量化评估。在语音合成中,通常使用平均梅尔倒谱失真(mean Mel-Cepstral Distortion,MCD)来报告合成语音与真实语音之间的频谱失真。梅尔频率带强调了音频频谱中感知相关频率带的失真情况。

Q: 什么是Mel-Cepstral Distortion
A: Mel-Cepstral Distortion基于梅尔倒谱系数(Mel-frequency cepstral coefficients,MFCCs),它是一种常用于语音信号处理的特征表示方法。MFCCs将语音信号转换为在频谱上均匀分布的倒谱系数,以模拟人耳对音频的感知。MFCCs通常用于表示语音的谱特征。
Mean Mel-Cepstral Distortion计算合成语音的MFCCs与目标语音的MFCCs之间的距离或差异。它可以通过计算两组MFCCs之间的欧氏距离或其他距离度量来获得。然后,将所有MFCC系数之间的距离取平均 得到Mean Mel-Cepstral Distortion。

如下图,将神经合成语音(Decoded)的MCD与基于关节运动学的参考合成语音(Reference)和机会水平解码(Shuffled)进行比较(较低的MCD值表示性能更好)。参考合成模拟了关节运动学的完美神经解码。对于5位参与者,解码语音的MCD中位数的范围为5.14dB到6.58dB。
在这里插入图片描述
原始声学特征和解码声学特征的相关性
研究人员计算了原始声学特征和解码声学特征之间的相关性。对于每个句子和特征,使用该特征的每个样本(以200 Hz的采样率)计算了皮尔逊相关系数

Q: 什么是皮尔逊相关系数?
A: 皮尔逊相关系数(Pearson correlation coefficient)是一种用于衡量两个变量之间线性相关程度的统计量。它衡量的是两个变量之间的线性关系的强度和方向。
皮尔逊相关系数的取值范围在-1到1之间,其中:

  • 相关系数为1时,表示两个变量完全正相关,即当一个变量增加时,另一个变量也会以相同的比例增加。
  • 相关系数为-1时,表示两个变量完全负相关,即当一个变量增加时,另一个变量会以相同的比例减少。
  • 相关系数接近0时,表示两个变量之间几乎没有线性关系

下图中绘制了参与者之间的平均解码声学特征(acoustic feature)(包括强度(intensity)、梅尔倒谱系数(MFCCs)、激励强度(excitation strengths)和声音(voicing))与推断的运动学(inferred kinematics)之间的句子级别相关性。声调特征(如基频(pitch F0)语音包络(speech envelope)声音(voicing))的解码相关性明显高于机会水平
在这里插入图片描述
此外,作者还研究了其他相关特征的解码性能:

  • 动力学特征的解码性能
    下图中,显示了所有33个解码的口腔运动学特征与真实值之间的相关性。动力学特征使用EMA(电磁声门分析)技术获取,表示了口腔运动器官(嘴唇、下颌和舌头的三个点)在声道中矢状面上的X和Y坐标轨迹。此外,还有Manner特征,它们是EMA的补充,进一步描述了与声学相关的运动。箱线图显示了这些特征的相关性分布情况。在这里插入图片描述

Q: EMA是什么?
A: EMA是电磁声门分析(Electromagnetic Articulography)的缩写。它是一种用于研究和记录人类语音产生过程中口腔运动的技术。EMA通过使用传感器和磁场来捕捉和测量口腔和喉部运动的位置和轨迹。
在EMA系统中,被测者被要求戴上具有传感器的小磁体,通常是放置在舌头、嘴唇和下颌等口腔运动器官上。这些传感器是通过磁场感应原理来测量其位置和方向的。EMA系统中还包括一个测量设备,该设备生成和控制磁场,并记录传感器的位置信息。

Q: Manner是什么?
A: 在语音学中,Manner(发音方式)是描述辅音发音方式的术语。它指的是空气流在口腔中的通路和通过使用不同的发音器官来产生不同音素的方式。
Manner可以用来描述辅音发音的特征和方式,以下是一些常见的Manner类型:

  • 阻塞音(Stops):当发音器官完全阻止空气流经过时产生的音。例如,/p/和/b/是阻塞音,它们在发音时嘴唇紧闭,然后突然松开。
  • 擦音(Fricatives):发音器官部分阻碍空气流,产生摩擦音。例如,/s/和/f/是擦音,它们通过使气流通过狭窄的通道来产生摩擦噪声。
  • 破擦音(Affricates):结合阻塞音和擦音的特征,它们开始时有一个阻塞音部分,然后转变为擦音。例如,/tʃ/(如英语中的"ch")是一个破擦音。
  • 鼻音(Nasals):发音器官中有一个开放通道,允许空气通过鼻腔流出。例如,/m/、/n/和/ŋ/(如英语中的"ng")是鼻音。
  • 侧音(Lateral):舌尖挡住中央通道,空气从舌侧流出。例如,/l/是一个侧音。
  • 半元音(Semi-vowels):发音器官形状类似元音,但较为接近辅音。例如,/j/(如英语中的"y")和/w/是半元音。
    这些不同的Manner类型描述了不同发音方式的特征和机制,对于研究语音产生和发音学有着重要的意义。
  • 频谱特征的解码性能
    下图中,显示了所有32个解码的频谱特征与真实值之间的相关性。频谱特征使用MFCC(梅尔频率倒谱系数)获取,它们是描述感知相关频段功率的25个系数。此外,还有合成特征,它们描述了语音合成所需的声门激励权重。箱线图显示了这些特征的相关性分布情况。
    在这里插入图片描述

解码器特性(Decoder characteristics)

前面已经展示过解码器设计图,如下图,该解码器是一个两阶段的解码器,先从EEG中解码空腔运动学特征,再解码出声学特征,最后合成语音。因为本文想要设计的解码器是你作为临床使用,所以需要考虑到有几个关键因素会影响到解码器的性能。
在这里插入图片描述

  • 第一点:数据
    对于严重瘫痪或者语言功能受限的病人,很难获取大量数据用于训练解码器。
    如果使用直接解码器(direct decoder),即直接从EEG中解码声学特征,而不需要先经过关节运动学解码器转换为运动学特征。如下图所示,当仅使用25分钟的语音数据就能够获得可靠的解码性能, 随着数据量的增加,性能仍然可以进一步提高。然而,如果没有关节运动学的中间步骤,直接从ECoG到声学特征的解码多谱归一化失真(MCD)会受到0.54 dB的偏差(0.2 dB在感知上是可察觉的21)。
    在这里插入图片描述
    因此作者设计了一个两阶段的解码器,研究中发现明确地建模关节运动学作为中间特征,会比直接从电极脑电图(EEG)信号中解码声学特征具有明显的优势。从上图中我们也能看到两种解码器之间的差距,因为关节运动学直接反映了语音产生过程中的运动信息,与声学特征之间存在更直接的关联。 通过先解码关节运动学,然后再从关节运动学到声学特征进行解码,我们能够更准确地恢复语音特征。
  • 第二点:保留的语音学特性
    当从脑信号解码语音时,确保合成语音保留自然语音的语音学特征是非常重要的。这意味着解码后的语音应该听起来与所意图表达的单词或话语相似,并且能够被人正常理解和识别。
    因此作者评估了合成语音和自然语音之间的相似性来了解所保留的语音学特性,这可以包括对音位(语音中的基本单位)的准确性、音调、音高、语速和语音韵律等方面进行分析和比较。作者使用Kullback-Leibler(KL)散度来比较每个解码音素的频谱特征分布与每个真实音素的分布,以确定它们的相似程度。(关于KL散度的理解可以参考这篇博客:机器学习-KL散度的直观理解+代码
    如下图所示,作者计算了声学相似度矩阵比较解码音素和原始发音音素的声学特性。相似度是通过首先为每个音素(解码和原始)估计一个高斯核密度,然后计算解码和原始音素分布之间的Kullback-Leibler(KL)散度来计算的。每一行将一个解码音素的声学特性与原始发音音素(列)进行比较。对得到的相似度矩阵进行了层次聚类。数据来自P1。
    在这里插入图片描述
  • 第三点:电极的放置
    如下图f展示了电极放置的三个与语音产生相关的三个区域(IFG、STG、vSMC)。
    图g展示了删除其中一个区域的电极之后解码器的解码性能,可以看出,无论删除哪一个区域的电极都会导致解码性能下降,尤其在删除vSMC区域的电极后,解码性能下降最严重,MCD降低了1.13dB。
    在这里插入图片描述
  • 第四点:可迁移性
    作者想要验证在固定数据集上训练的解码器是否可以用于新的句子上。作者对比了两个解码器,一个在所有的句子上进行训练,包括测试集训练集,另外一个只在测试集句子上训练。实验结果如下图所示,可以看出这两个解码器,无论是相同的句子或者新句子上的解码性能在MCD和频谱特征相关性上都没有显著差异。
    这说明解码器可以推广到解码器从未被训练过的任意单词和句子。

在这里插入图片描述

合成默契语音(Synthesizing mimed speech)

Q: 什么是默契语音?什么是合成默契语音?
A: 「默契语音」指的是在没有实际发声或产生可听到的语音声音的情况下产生类似语音的手势或动作。它可以涉及到发音器官(如嘴唇、舌头、下颌)的运动。
「合成默契语音」是指从非语言或无声语言动作中生成可听到的语音的过程。它涉及将在无声语言中进行的运动和手势转换为可理解和识别的语音声音。

人发声的时候,会产生听觉反馈(auditory feedback),这反馈会传到大脑皮层,产生电信号,而我们知道,电信号就是我们解码器的输入(EGG),所以,我们需要探究,是否解码器依赖于听觉反馈产生的电信号。

Q: 什么是听觉反馈?
A: 发音的听觉反馈是指一个人在发声过程中所产生的声音通过听觉系统传达回大脑的过程。当我们发音时,声音通过喉咙、口腔和鼻腔等声道传出,产生声音波动。这些声音波动被传播到我们的耳朵,然后被内耳中的听觉神经细胞接收和转化为电信号,最终通过神经途径传输到大脑的听觉皮层。

所以作者设计了无声模拟对解码器进行测试。测试了一组包含58个句子的保留集,其中参与者(P1)首先以声音的形式朗读每个句子,然后默默模仿同样的句子,进行相同的发音动作但不发出声音。作者将原始语音(a)、发声状态下解码得到的语音(b)、不发声状态下解码得到的语音可视化如下图所示。尽管解码器没有在模仿的句子上进行训练,合成的无声语音的声谱图展现了与合成的可听语音相同句子的类似频谱模式
在这里插入图片描述
然后作者计算了在不同状态下合成语音与原始语音的MCD、频谱特征相关性,如下图所示,可以看到,无声语音略差于发声语音的合成,但是也证明了,无声语音合成的可能性。

在这里插入图片描述

解码语音发音的状态空间(State-space of decoded speech articulation)

Q: 标题的含义?
A: 在这个短语中,“decoded speech articulation” 指的是已解码的语音发音,即从某种编码形式还原出的语音信息。而 “state-space” 则是指状态空间,是一个用来描述系统状态变化的数学模型
因此,“state-space of decoded speech articulation” 指的是用状态空间模型来描述已解码语音发音的变化过程。这个状态空间模型可以包括不同的状态变量,例如嘴唇、舌头、下颌的位置、速度、加速度等,用来表示语音发音器官在时间上的变化。通过这个状态空间模型,我们可以分析和描述解码后的语音发音在时间和空间上的变化特征,从而更好地理解和研究语音产生过程。

因为模拟底层运动学可以提高解码性能,因此我们接下来希望更好的了解从群体神经活动中解码出的运动学特征的性质
作者通过对口腔运动学特征进行主成分分析(PCA),计算状态空间的投影,以获得低维度的运动学状态空间轨迹。在总共的33个主成分中,前10个主成分(PCs)解释了85%的方差,前两个主成分解释了35%的方差,结果如下图所示,对于每一个语音运动学和声学的表示,计算主成分分析,并对每个附加主成分的方差进行累积求和。
在这里插入图片描述

Q: PCA是什么?
A: PCA是主成分分析(Principal Component Analysis)的缩写。它是一种常用的统计方法和降维技术,用于分析和处理多维数据集。
PCA的主要目标是通过线性变换,将高维数据转换为低维表示,同时尽量保留原始数据的最大方差。通过找到一组新的正交变量,称为主成分,PCA可以将原始数据在新的坐标系中进行表示。每个主成分都是原始数据在不同方向上的线性组合,按照方差的降序排列,表示数据中的变异性从大到小。

Q: 为什么PCA要保留数据的最大方差
A: 当我们进行降维或特征提取时,我们希望保留尽可能多的有用信息,同时减少冗余和噪声。方差可以看作是数据中的有用信息的度量,较大的方差表示数据在该方向上具有较大的变化和差异,反之亦然。
通过保留尽可能多的方差,PCA能够捕捉到数据中最显著的模式和变化。较大的方差对应于数据中重要的特征和变异性,而较小的方差对应于数据中的噪声或冗余信息。因此,通过选择具有较大方差的主成分,PCA能够提取出数据中最显著的特征,并在保留关键信息的同时减少数据的维度。

在下图a和b中,一个句子的运动轨迹被投射到前两个主成分上,可以看到,这些轨迹都被很好的解码出来了。(图e可视化了所有参与者的中位数r>0.75,除了P5,r代表前两个主成分的平均r)此外,无声语音也被很好的解码出来,中位数r=0.6。
并且,这些轨迹似乎表现出连续语音中音节模式的动态变化辅音(consonants 灰色线)和元音(vowels 蓝色线)的时间过程被绘制在状态轨迹上,并分别倾向于对应轨迹的波谷和波峰
在这里插入图片描述
在这里插入图片描述
研究发现,两种类型的运动学轨迹在元音和辅音之间呈现出双相的特征,即从“高”状态到“低”状态的转变(白色),反之亦然(黑色)。在下图c、d中,从每个元音辅音转换(n=22453)和辅音元音转换(n=22453)中采样,并绘制了PC1和PC2平均轨迹的500 ms轨迹。研究人员发现PC1和PC2保留了元音和辅音状态的双相轨迹,但对于特定音素表现出特异性。这说明PC1和PC2不仅仅描述了下颌的张合和闭合,而是描述了声道的全局张合配置
在这里插入图片描述
这些发现与关于人类言语行为的理论解释一致。这些理论认为,高维度的语音声学特征可以在较低维度的口腔运动学状态空间中得到解释。换句话说,人类言语行为可以通过较少的运动学特征来表示和理解

通过将不同参与者的相同句子的产出投影到各自的运动学状态空间中,并对它们进行了相关性分析,以评估解码的状态空间轨迹的相似性。结果发现,状态空间轨迹非常相似,相关系数大于0.8。这表明解码器很可能依赖于跨说话者之间共享的表征。这种共享的表征对于泛化是至关重要的,因为它意味着解码器能够在不同说话者之间建立一种通用的理解和表达方式

对于无法说话的人群,首先学习使用运动学解码器(第一阶段)可能更直观和更快速,同时使用在独立收集的语音数据上训练的现有运动学到声学的解码器(第二阶段)。即两个阶段来自不同的人的数据。
下图中,我们展示了从源参与者(P1)转移第二阶段到目标参与者(P2)的合成性能。声学转移表现良好,尽管比仅在目标参与者(P2)上训练第一阶段和第二阶段的情况下略差,这可能是因为MCD指标对说话者身份敏感。
在这里插入图片描述

总结

  • 针对严重瘫痪或者由语言障碍的病人,我们需要研究一个高效的交流方式来帮助他们交流。而目前最快的方法就是直接从大脑皮层的神经活动中解码出语音
  • 本文作者提出了一个两阶段的解码器,先从脑电信号中解码出口腔运动学表征,再从口腔运动学表征中解码出声学特征,最后合成语音信号
  • 作者在本文中对解码器的效果做了大量的实验进行分析,比如频谱图,中值频谱图。作者也设计了听觉任务,对合成的语音进行测试。然后针对解码器的特征进行了四点分析,分析了影响解码器性能的四个关键因素
  • 为了排除听觉反馈对解码器的影响,作者也通过合成无声语音进行了对比实验,并在无声语音合成上也取得了较好的解码效果,为临床应用带来了更多的可能性。
  • 作者也使用主成分分析,从群体神经活动中解码出的运动学特征的性质。实验结果证明,语音合成仅需要少量的空腔运动学特征便可以实现很好的效果。
  • 将不同参与者的相同句子的产出投射到各自的运动学状态空间中,发现他们的状态空间轨迹非常相似,这表明解码器很可能依赖于跨说话者之间的共享表征。并且作者针对无法说话的人群采用实验,证明了这一点。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_51474171/article/details/134953612

智能推荐

DNS分离解析-程序员宅基地

文章浏览阅读114次。DNS分离解析包: bind #域名服务包, bind-chroot #提供虚拟根支持服务: named主配置文件: /etc/named.conf #设置本机负责解析的域名地址库文件: /var/named/ #主机名与IP地址的对应关系运行时的虚拟根环境:/var/named/chroot/ #牢笼政策分离解析概述(视图解析)当收到客户机的DNS查询..._dns分离解析匹配客户端来源的字段

第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷...-程序员宅基地

文章浏览阅读208次。  首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在《人月神话》中提到的。银弹原本应该是指某种策略、技术或者技巧可以极大地提高程序员的生产力【1】。此题目中关于中文编程是否是一个“银弹”的讨论,我所持的是否定的态度,我不认为中文编程会是一项提高中国程序员编程效率的一个秘密武器,相反,我还认为他会比现在的英文编程来说降低工作效率,造成很大的工作上的困难。..._存在一种策略,技术技巧可以极大的提高程序员的生产力。

模拟用户操作 京东抢购 华为mate40 Pro、支付的js脚本_京东抢华为脚本-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏29次。1 登录 https://item.jd.com/10024680695127.html2 打开开发者模式,插入如下代码,count=1nIntervId=0 stop=0 var goDate function start(){ if (stop==1){ clearInterval(nIntervId);//停止监控 return } if (Date.now() < goDate){ return _京东抢华为脚本

php eayswoole node axios crypto-js 实现大文件分片上传复盘_cryptojs 处理文件过大-程序员宅基地

文章浏览阅读740次。1)前端侧 :前端上传文件,根据分片大小,自动计算出整个文件的分片数量,以及分片二进制文件,以及整个文件的md5值,以及分片文件md5值,传与后端,后端处理完后,根据上传分片的进度以及后端返回状态,判断整个文件是否传输完毕,完毕后,前端展示完成进度。2)后端PHP侧:后端接收前端传过来的数据,包括文件名,文件md5,分片信息,然后将分片文件信息存储到redis 有序集合中,其中key为整个文件的md5 ,待所有分片文件都上传完后,根据顺序,然后将文件整合存储,然后完成整个文件分片上传逻辑。_cryptojs 处理文件过大

VScode 编译器配置IDE环境(C/C++/Go)_vscode 配置 在ide上编译运行-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏29次。VScode 编译器配置IDE环境(C/C++/Go)摘要VS Code 下载安装下载安装简单使用WindowsLinuxIDE 环境配置C/C++C/C++ 编译器安装及配置简单使用 VS Code 终端进行编译和运行方式使用code runner插件:Go总结摘要对于 VS Code 的使用,我本人感觉这个编译器还是很好用的,而且目前能够支持在 Windows、Linux、MacOs 上流畅运行,并且官方已经提供了 X86、ARM等主流架构版本,还很容易通过安装插件就能过实现基于 SSH 的远程代_vscode 配置 在ide上编译运行

oracle use_ntl详细解释_oracle中use_nl提示-程序员宅基地

文章浏览阅读1k次。1./*+ use_nl(t2,t) */提示走nest Loop,但是没有提示t2还是t为驱动表2./*+ ordered user_nl(t2,t) */提示走 Nest Loop,order提示的是from 后面的第一个表为驱动表.3./*+ leading(t2) use_nl(t) */直接提示t2为驱动表。结论:use_NL不能让优化器确定谁是驱动表谁是被驱动表。use_nl(t,t2)也没有指出哪个是驱动表,这时候我们就需要使用Ordered ,_oracle中use_nl提示

随便推点

php怎么在文字外面加方框,文字或字符加外框(方框、边框)的方法-程序员宅基地

文章浏览阅读2.3k次。文字或字符加外框(方框、边框)的方法2012.4.1512:50本文以方框“囗”里打上勾“√”或叉“×”的方法为例,来叙述文字或字符加外框的方法,下面介绍两种方法。方法一:其实质是“√”或“×”(或其它字符)加方框(更简捷确切说法的是文字加框线的应用)在文档中选取已输入好的欲加方框的“√”或“×”,单击“开始”选项卡→点击“段落”组上的“边框和底纹”按钮(与“*框线”等为同一下拉按钮组中)如下图箭..._怎么用php做一个方框里面有文字

CRM项目-模块一-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏4次。模块一:CRM-用户管理1.CRM基本概念CRM 系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系。 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制。客户关系管理的定义是:企业为提高核心竞争力,利用相应的信息技术以及互联网技术来协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。 其最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户,增加公司市场份额。CRM 的实施目标就是通过全面提_crm项目

arm 32linux,C语言实现文件pcm转换wav,提供代码实验用PCM音频文件_mp3 to wav c语言-程序员宅基地

文章浏览阅读199次,点赞2次,收藏3次。linux系统C语言音频文件pcm转换wav,提供实验用PCM音频文件_mp3 to wav c语言

JVM详解-栈&堆_jvm 堆栈-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏15次。栈&堆栈栈结构JVM中的栈Java中的栈1、栈里面存放什么2、栈运行原理堆堆(Heap)新生区老年区永久区出现OOMVM options参数栈栈结构栈是一种数据结构。程序=数据结构+算法栈:先进后出,后进先出队列:先进先出(FIFO)Q:为什么main()方法先执行后结束A:先进栈,最后出JVM中的栈Oracle关于栈和栈帧提供了如下描述:每个JVM线程拥有一个私有的 Java虚拟机栈,创建线程的同时栈也被创建。一个JVM栈由许多帧组成,称之为"栈帧"。JVM中的栈和C等常见语言_jvm 堆栈

5、Nacos 、Sentinel、Seata下载与安装_sentinel下载安装-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏10次。1、官网:https://nacos.io/zh-cn/index.html2、 下载3、解压安装双击startup.cmdjava.io.IOException: java.lang.IllegalArgumentException: db.num is null如果出现以上错误,需要指令启动:单机模式启动 window版本 startup.cmd -m standalone4、访问登录http://localhost:8848/nacos/index.html#/._sentinel下载安装

linux ssh远程登录退出,ssh登陆小技巧-用SSH 退出符切换 SSH 会话-程序员宅基地

文章浏览阅读1.7k次。用SSH 退出符切换 SSH 会话这个技巧非常实用。尤其是远程登陆到一台主机A,然后从A 登陆到B,如果希望在A 上做一些操作,还得再开一个终端,很是麻烦。当你使用ssh从本机登录到远程主机时,你可能希望切换到本地做一些操作,然后再重新回到远程主机。这个时候,你不需要中断 ssh连接,只需要按照如下步骤操作即可:当你已经登录到了远程主机时,你可能想要回到本地主机进行一些操作,然后又继续回到远程主机..._linux中ssh远程登录后如何回到原来主机

推荐文章

热门文章

相关标签