一种基于P300的脑控话语发声器的实现方法与流程

文档序号:11728989阅读:347来源:国知局

本发明属于脑机接口与自然语言处理相结合的应用,涉及一种基于p300的句子拼写并通过语音设备实现大脑说话的方法。



背景技术:

脑机接口为一些运动神经损害而大脑功能无损的患者提供与外界交流的一种方式,其中p300speller对大脑通过一系列的刺激,分析脑电信号,识别出用户想要拼写的字符来达到与外界的交流。目前p300speller要完成一个句子的拼写只能够对字符逐个拼写,在产生错误时用户只能自行修正。存在的问题是,拼写一个句子需要较长的时间,用户容易疲劳,拼写效果不佳。



技术实现要素:

有鉴于此,本发明的目的是提高用户利用p300speller拼写句子的速度,并提高用户与外界交流的效率。本发明中用户在拼写过程中可省略某些次要字符,并且不用自己修正错误,用解码算法对拼写的字符序列进行修正,将得到正确的句子传送至语音发声器。

本发明采用以下方案实现:一种基于p300的脑控话语发声器的实现方法,包括以下步骤:

步骤s1:用户通过p300拼写矩阵拼写句子sentence=c1c2,…,cn,p300拼写矩阵包括字母a-z,数字0-9共36个字符,ci,i=1,…n为p300拼写矩阵中的字符;

步骤s2:修正sentence,在sentence中插入漏输的字符,修改错误字符,得到一个新的句子c_sentence;

步骤s3:将c_sentence传送至语音发声器并播放。

进一步地,所述步骤s2具体包括以下步骤:

步骤s21:设置结构变量cur,cur.sen=sentence,cur.loc=1,cur.len=length(sentence);初始化栈s,表l,并将cur压入栈s;

步骤s22:若栈s非空,弹栈更新cur,转下一步;否则,转入步骤s26;

步骤s23:判断cur.loc位置上是否要插入字符;若要,ins.sen=insert(cur.sen,cur.loc),ins.loc=cur.loc+1,ins.len=cur.len+1,将ins压入栈s;

步骤s24:修正cur.loc位置上的字符,cur.sen=modify(cur.sen,cur.loc);cur.loc=cur.loc+1;

步骤s25:若cur.loc大于cur.len,将cur插入表l,否则将cur压入栈s;转入步骤s22;

步骤s26:用单词语言模型计算表l中所有句子的概率,输出概率最高的那个句子c_sentence。

进一步地,步骤s23中所述的判断cur.loc位置上是否要插入字符及insert(cur.sen,cur.loc)的具体方法为:

以cur.loc位置为中心,从cur.sen中取出一个字符子序列,记为c1c2…ck;在c1c2…ck中对应cur.loc的位置上插入字符ci,ci∈c,c包含空格字符和p300拼写矩阵中的所有字符,得到c1c2…ci...ck+1;用5-gram字符语言模型计算c1c2...ck和c1c2…ci...ck+1,ci∈c的概率,从c1c2…ci…ck+1,ci∈c这一组字符序列中选出概率最大的那一个,比较它与c1c2...ck的概率,若它的概率更大,则要插入字符;

当要插入字符时,insert(cur.sen,cur.loc)在cur.sen字符序列的cur.loc位置上插入使得c1c2...ci...ck+1,ci∈c概率最大的那个ci。

进一步地,所述步骤s24中所述的修正cur.loc位置上的字符,modify(cur.sen,cur.loc)的具体方法为:

根据cur.sen在cur.loc位置上的那个字符和p300拼写矩阵概率模型,选出实际要输入的可能性较大的若干个字符构成字符集合令i=cur.loc,计算其中cl为cur.sen在l位置上原本的那个字符,cl'为cur.sen在l位置上修正后的字符,p(c'l|cl)取自p300拼写矩阵概率模型,若cl为插入的空格,则p(c'l|cl)取1;c1c2...ci...cn代表cur.sen或其修正后的结果,p(c1c2...ci...cn)依据5-gram字符语言模型计算,α为一比例因子;计算得到cb,用cb替代cur.sen中的ci作为modify(cur.sen,cur.loc)的输出。

进一步地,所述步骤s26中所述的计算句子的概率的具体方法为:

读取表l中的句子cur.sen,以空格为分隔符将单词分隔开,单词依序存于wi,i=1,...,m中,然后用3-gram单词语言模型计算句子的概率,公式如下,

其中c(wi-2wi-1wi)和c(wi-2wi-1)分别为单词wi-2wi-1wi和wi-2wi-1在语料库中出现的次数。

进一步地,所述根据cur.sen在cur.loc位置上的那个字符和p300拼写矩阵概率模型,选出实际要输入的可能性较大的若干个字符构成字符集合以及p(c'l|cl)取自p300拼写矩阵概率模型,其具体方法为:

用户在使用前进行p300拼写训练,计算得到p300拼写矩阵概率模型,表示为矩阵a;a中的元素aij=p(cj|ci),ci为用户拼写得到的字符,cj为实际上要拼写的字符,p(cj|ci)为当拼写得到的字符为ci时实际上想要拼写的字符是cj的概率,ci,cj∈{'a','b',...,'z','0',...,'9'},i=1,2,...,36,j=1,2,..36;

对于cur.sen在cur.loc位置上的那个字符,查询矩阵a对应的行,就可得到实际要拼写的可能性较大的那些字符;

p(c'l|cl)中的cl和cl'都是字符,可分别对应矩阵a的行与列,从a中取出相应的概率。

进一步地,采用所述5-gram字符语言模型进行计算的具体方法为:

5-gram字符语言模型计算任一字符序列c1c2...cn的概率所用的方法是,其中,c(c1...ci-1ci)和c(c1...ci-1)分别为字符c1...ci-1ci和c1...ci-1在语料库出现的次数,c(ci-4...ci-1ci)和c(ci-4...ci-1)分别为字符ci-4...ci-1ci和ci-4...ci-1在语料库中出现的次数。

运动神经受损而大脑功能完好的患者与外界进行尽可能快的交流对了解患者的需求以及病情是非常重要的,而现有的利用p300speller来拼写句子所需要的时间较长。因此,与现有技术相比,本发明具有以下优点:

1、本发明能够让用户在拼写过程中省略一些字符,减少拼写的工作量,提高拼写效率。

2、本发明采用解码算法修正用户拼写的句子,提高句子拼写的速率,从而提高与外界交流的速度。

3、本发明将拼写的句子通过语音设备连接,更直接将用户与外界相联系,具有很强的实际应用意义。

附图说明

图1是本发明的方法流程图示意图。

具体实施方式

下面结合附图及实施例对本发明做进一步说明。

本实施例提供一种基于p300的脑控话语发声器的实现方法,如图1所示,包括以下步骤:

步骤s1:用户通过p300拼写矩阵拼写句子sentence=c1c2,…,cn,p300拼写矩阵包括字母a-z,数字0-9共36个字符,ci,i=1,…n为p300拼写矩阵中的字符;

步骤s2:修正sentence,在sentence中插入漏输的字符,修改错误字符,得到一个新的句子c_sentence;

步骤s3:将c_sentence传送至语音发声器并播放。

在本实施例中,步骤s2中具体包括以下步骤:

步骤s21:设置结构变量cur,cur.sen=sentence,cur.loc=1,cur.len=length(sentence);初始化栈s,表l,并将cur压入栈s;

步骤s22:若栈s非空,弹栈更新cur,转下一步;否则,转入步骤s26;

步骤s23:判断cur.loc位置上是否要插入字符;若要,ins.sen=insert(cur.sen,cur.loc),ins.loc=cur.loc+1,ins.len=cur.len+1,将ins压入栈s;

步骤s24:修正cur.loc位置上的字符,cur.sen=modify(cur.sen,cur.loc);cur.loc=cur.loc+1;

步骤s25:若cur.loc大于cur.len,将cur插入表l,否则将cur压入栈s;转入步骤s22;

步骤s26:用单词语言模型计算表l中所有句子的概率,输出概率最高的那个句子c_sentence。

在本实施例中,步骤s23中所述的判断cur.loc位置上是否要插入字符及insert(cur.sen,cur.loc)的具体方法为:

以cur.loc位置为中心,从cur.sen中取出一个字符子序列,记为c1c2…ck;在c1c2...ck中对应cur.loc的位置上插入字符ci,ci∈c,c包含空格字符和p300拼写矩阵中的所有字符,得到c1c2…ci…ck+1;用5-gram字符语言模型计算c1c2...ck和c1c2...ci...ck+1,ci∈c的概率,从c1c2...ci...ck+1,ci∈c这一组字符序列中选出概率最大的那一个,比较它与c1c2...ck的概率,若它的概率更大,则要插入字符;

当要插入字符时,insert(cur.sen,cur.loc)在cur.sen字符序列的cur.loc位置上插入使得c1c2...ci...ck+1,ci∈c概率最大的那个ci。

在本实施例中,所述步骤s24中所述的修正cur.loc位置上的字符,modify(cur.sen,cur.loc)的具体方法为:

根据cur.sen在cur.loc位置上的那个字符和p300拼写矩阵概率模型,选出实际要输入的可能性较大的若干个字符构成字符集合令i=cur.loc,计算其中cl为cur.sen在l位置上原本的那个字符,cl'为cur.sen在l位置上修正后的字符,p(c'l|cl)取自p300拼写矩阵概率模型,若cl为插入的空格,则p(c'l|cl)取1;c1c2...ci...cn代表cur.sen或其修正后的结果,p(c1c2...ci...cn)依据5-gram字符语言模型计算,α为一比例因子;计算得到cb,用cb替代cur.sen中的ci作为modify(cur.sen,cur.loc)的输出。

在本实施例中,步骤s26中所述的计算句子的概率的具体方法为:

读取表l中的句子cur.sen,以空格为分隔符将单词分隔开,单词依序存于wi,i=1,...,m中,然后用3-gram单词语言模型计算句子的概率,公式如下,

其中c(wi-2wi-1wi)和c(wi-2wi-1)分别为单词wi-2wi-1wi和wi-2wi-1在语料库中出现的次数。

在本实施例中,所述根据cur.sen在cur.loc位置上的那个字符和p300拼写矩阵概率模型,选出实际要输入的可能性较大的若干个字符构成字符集合以及p(c'l|cl)取自p300拼写矩阵概率模型,其具体方法为:

用户在使用前进行p300拼写训练,计算得到p300拼写矩阵概率模型,表示为矩阵a;a中的元素aij=p(cj|ci),ci为用户拼写得到的字符,cj为实际上要拼写的字符,p(cj|ci)为当拼写得到的字符为ci时实际上想要拼写的字符是cj的概率,ci,cj∈{'a','b',...,'z','0',...,'9'},i=1,2,...,36,j=1,2,..36;

对于cur.sen在cur.loc位置上的那个字符,查询矩阵a对应的行,就可得到实际要拼写的可能性较大的那些字符;

p(c'l|cl)中的cl和cl'都是字符,可分别对应矩阵a的行与列,从a中取出相应的概率。

在本实施例中,采用所述5-gram字符语言模型进行计算的具体方法为:

5-gram字符语言模型计算任一字符序列c1c2...cn的概率所用的方法是,其中,c(c1...ci-1ci)和c(c1...ci-1)分别为字符c1...ci-1ci和c1...ci-1在语料库出现的次数,c(ci-4...ci-1ci)和c(ci-4...ci-1)分别为字符ci-4...ci-1ci和ci-4...ci-1在语料库中出现的次数。

在本实施例中,步骤s3的具体方法为:

将修正完的句子c_sentence传入语音发声器espeak的命令行执行文件espeak.exe播放。

在本实施例中,p300拼写矩阵可调整,其大小以及所包含的字符不是本专利的核心内容。

在本实施例中,p300拼写矩阵概率模型中矩阵a的大小根据p300拼写矩阵的大小而定。

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1