語料切詞算法研究

語料切詞算法研究

1,語料切詞需求

實際工程中,常有將文字轉爲語音播放的需求。好比車輛進場時播放「京B123Y5歡迎光臨」,車輛離場時播放「請繳費15元,一帆風順」等。算法

 

語料指基礎的語音材料,是控制系統提供的可播放的語音片斷。語料庫通常包括:單個的字母數字、使用漢字、經常使用的詞語組合如「歡迎光臨」、「一帆風順」等。以下表:編程

語音索引號測試

語音內容spa

0orm

0排序

1索引

1內存

。。。ci

 

9字符串

9

10

11

12

13

14

15

16

17

18

歡迎光臨

19

一路平安

20

此卡

21

已過時

22

無效

23

有效

24

有效期

。。。

 

37

A

38

B

。。。

 

61

Y

62

Z

63

64

。。。

 

96

97

。。。

 

101

請繳費

102

103

。。。

 

112

113

114

謝謝

115

歡迎回家

。。。

 

161

歡迎

162

泊車

163

一帆風順

。。。

 

1,語料庫

 

好比,要播放「京B123Y5歡迎光臨」,按照上述語料庫,分別對應:京à63Bà381à12à23à3Yà615à5,歡迎光臨à18,就須要按順序傳遞「語音索引號」參數列表:63381,2,3,61,5,18

 

本文研究對於給定的語料庫,輸入任意文字字符串,如何高效轉換爲語料庫中對應的「語音索引號」列表。

 

顯然,要實現上述需求,就要對輸入的文字串進行切分(即切詞),同時切分以後的各部分片斷應知足如下要求:

 

1)        儘量多地對應於語料庫元素,即沒法讀出的片斷儘可能少

2)        優先採用語料庫中較長元素,使語音讀出更加天然。如,假設語料庫中有「有效期」、「有效」、「期」三種元素,那麼切詞應將「有效期」切爲一個詞,而不是切爲「有效」、「期」2個詞。

3)        計算速度儘量快,耗用CPU和內存儘量少。

2,基本思路

首先,因爲切詞的位置和長度不肯定,形成切詞結果的可能性組合很是大。如輸入一個20字符的句子,對於一個語料長度最多10字符的1000條語料庫來講,徹底的匹配計算次數爲:

1000*10^20次。參照主流PC機每秒100億次浮點運算的能力,須要時間爲10^13秒。而通常實際要求均須要毫秒級反饋,所以採用有效算法進行查找十分必要。

 

有效算法依賴於有效的查找表,構建一個適合順序查找的「語料查找表(PLT)」頗有必要。如下爲構建要點:

1)        基於語料庫

2)        按語料欄位排序,而不是按索引號排序

3)        爲知足「要求3「,應從第一個字符開始比對和定位,所以對於語料庫中不存在首單字索引的語料,要增長「虛擬」語料。如語料庫中有「歡迎」一詞,但沒有「歡」這個字,就增長一條語料「歡」,其索引爲 -1,表示不存在。

4)        擴展PLT欄位:除了語音元素(語料)、索引號之外,增長長度、標記。

a)         長度爲語音元素的字節數。如A長度爲1,「歡迎光臨「長度爲8

b)        標記爲語料查找提供提示。詳見第5條。

5)        爲知足「要求2「,在已經查找到語料時,應繼續向後查找,看看是否能匹配到更長的語料。假設第L條語料的語音元素爲YL),若Y(L)不包含在Y(L+1)中,則沒必要向後查找,此時第L條語料的「標記」欄位設置爲0;不然設置爲1,其後凡包含Y(L)的語料,設置「標記」欄位爲2.

3,編制「語料查找表(PLT)」

語料查找表(PLTPart Lookup Table)編制原理如上,具體編制過程可編程實現。

以下是依據「表1,語料庫」實現的一個PLT

 

語音元素

長度

標記

索引號

0

1

0

0

1

1

0

1

。。。

 

 

 

9

1

0

9

A

1

0

37

B

1

0

38

。。。

 

 

 

Y

1

0

61

Z

1

0

62

2

0

152

2

0

11

。。。

 

 

 

2

1

133

成功

4

2

30

2

0

77

。。。

 

 

 

2

1

-1

光臨

4

2

165

2

1

-1

歡迎

4

2

161

歡迎光臨

8

2

18

歡迎回家

8

2

115

2

1

-1

及時

4

2

186

。。。

 

 

 

2

1

-1

按臨時車計費

12

2

204

2,語料查找表(PLT

4,基於「語料查找表」的切詞算法

輸入:InSentence字符串

1)        N=0

2)        N=n+1

3)        N>length(InSentence)? 如果,結束算法;不然繼續4

4)        InSentenceN個字節ByteN

5)        ByteN是否在爲0-9A-Z之間?如果,則轉100;不然轉3

6)        N=n+1

7)        InSentenceN個漢字符CharN

8)        PLT中查找長度爲2的元素,是否有匹配M?若無,轉2;如有,轉9

9)        記錄下M的索引爲Idx,標記爲F

10)     F是否爲0?如果,轉100;若否,轉11

11)     M=M+1

12)     記錄M的標記是否爲2?若否,轉200;不然轉13

13)     M的長度爲L,語音元素爲CharM 索引號爲IdxM

14)     InSentence長度爲L的字符串與CharM比對是否一致。

15)     若一致,則N=n+L,將索引號IdxM,加入結果集,轉2;不然轉11

 

100) PLT中查找ByteN的索引號Idx,加入結果集,轉2

 

200) 將索引號Idx,加入結果集,轉2

5,算法測試


 

輸入:你好AB請等待歡迎回來請及時繳費

返回:,-1,113,37,38,98,161,-1,-1,155,186,174

 

語料切詞表以下:

語料切詞

語料索引

-1

113

A

37

B

38

請等待

98

歡迎

161

-1

-1

155

及時

186

繳費

174

 

 

可見,除了語料庫中不存在的「你」、「回」、「來」這3個詞之外,其他輸入均進行了正確切分,算法實現了語料切詞的3條需求。

相關文章
相關標籤/搜索