斷詞和選詞

8 views
Skip to first unread message

wiz

unread,
Feb 7, 2008, 5:33:41 AM2/7/08
to Chewing IM Development
之前一直有一些想法,但沒時間去驗證和實做,最近做了一些實驗和大家分享:

1. 選詞
目前在新酷音選詞都必須移到某個詞組的前面(interval)去作選擇,這讓我非常不習慣。

因此我改了一下,這樣就可以不必移動游標而直接對最後一個詞組做選擇的動作
Index: src/choice.c
===================================================================
--- src/choice.c (revision 818)
+++ src/choice.c (working copy)
@@ -219,9 +219,9 @@

/* see if there is some word in the cursor position */
if ( pgdata->nPhoneSeq == pgdata->cursor )
- pgdata->cursor--;
+ pgdata->cursor = pgdata->phrOut.dispInterval[ pgdata-
>phrOut.nDispInterval - 1 ].from;
if ( pgdata->chiSymbolBufLen == pgdata->chiSymbolCursor )
- pgdata->chiSymbolCursor--;
+ pgdata->chiSymbolCursor = pgdata->phrOut.dispInterval[ pgdata-
>phrOut.nDispInterval - 1 ].from;

pgdata->bSelect = 1;
====================================================================

這個patch 我並未commit 到 svn tree上面,我怕因為不同的使用習慣而造成不一樣的看法,
請給我feedback, 若沒有造成太多不方便的話,我再commit上去。

2. 斷詞和正確率
之前有一些想法,就是如何做到content-sensitive(或著是盡量能做到).

輸入下面的字:
example 1:

這種
這種 部
這種 不仁
這種 部 人性

(期望: 這種不人性)

example 2:

不支
不知道
不知道 有
不知道 有 沒
不支 道友 沒有

(期望: 不知道有沒有)

原本期望的是"這種不人性", 但因為斷詞的關係, 反而多了不必要的選字.
但是若仔細觀察,
就是其實在做最後的 MakePreferInterval, 其實可以若不去修改之前的詞組(interval), 反而正確率會更高..

整理歸納後,規則如下:
整個edit buffer裡面有n 個 intervals, 當在做MakePreferInterval的時候
1. 只對 n 和 n - 1 這兩個intervals做變動
2. 若前一次輸入的第 n 個 interval 和下一次輸入的 n + 1 interval 有重疊 (overlap), 這不要去變動之
前已經選好的字


以上這些想法完全並沒有經過理論驗證(來至於直覺的成份比較多),另外最主要的原因是,
因為在中文輸入部份雖然在網路上有很多相關的研究,
,一來那些都是相異於新酷音的模型,所以若要採用的話,
勢必會造成新酷音大幅度的改寫,且最重要的是,我不是這方面的專家,
所以目前只能思考如何在現有的模型上做改善。


-wiz

Jim Huang

unread,
Feb 7, 2008, 7:06:13 AM2/7/08
to chewin...@googlegroups.com
在 2008/2/7,wiz <wiz....@gmail.com> 撰寫:
> 之前一直有一些想法,但沒時間去驗證和實做,最近做了一些實驗和大家分享:

Dear wiz,

Welcome back!

> 1. 選詞
> 目前在新酷音選詞都必須移到某個詞組的前面(interval)去作選擇,這讓我非常不習慣。
>
> 因此我改了一下,這樣就可以不必移動游標而直接對最後一個詞組做選擇的動作
> Index: src/choice.c

[...]

個人認為此修改相當便利,而且只要詞庫 (詞頻) 的品質尚可,有利於強化輸入時期斷詞的精確度。

Thanks,
-jserv

Jim Huang

unread,
Feb 7, 2008, 7:31:05 AM2/7/08
to chewin...@googlegroups.com
在 2008/2/7,wiz <wiz....@gmail.com> 撰寫:
> 2. 斷詞和正確率
> 之前有一些想法,就是如何做到content-sensitive(或著是盡量能做到).
[...]

> 整理歸納後,規則如下:
> 整個edit buffer裡面有n 個 intervals, 當在做MakePreferInterval的時候
> 1. 只對 n 和 n - 1 這兩個intervals做變動
> 2. 若前一次輸入的第 n 個 interval 和下一次輸入的 n + 1 interval 有重疊 (overlap), 這不要去變動之
> 前已經選好的字

Dear wiz,

附件是我針對你提出的想法,所作的修改,請參考。
看來的確對一般的詞組選擇有幫助。

Best Regards,
-jserv

avoid-overlapping-in-MakePreferInterval.patch

Jim Huang

unread,
Feb 7, 2008, 8:44:26 AM2/7/08
to chewin...@googlegroups.com
在 2008/2/7,Jim Huang <jser...@gmail.com> 撰寫:
> Dear wiz,
>
> 附件是我針對你提出的想法,所作的修改,請參考。
> 看來的確對一般的詞組選擇有幫助。

ouch. 我的修改是有問題的,因為在 preferInterval[] 重新調整前,詞頻已經被重算過。

所以 Phrasing 也給更動。

cheers,
-jserv

Jim Huang

unread,
Oct 19, 2008, 1:08:21 PM10/19/08
to chewin...@googlegroups.com
2008/2/7 wiz <wiz....@gmail.com>:
> 之前有一些想法,就是如何做到content-sensitive(或著是盡量能做到).
> 輸入下面的字:

> 這種 部 人性
> (期望: 這種不人性)
> 原本期望的是"這種不人性", 但因為斷詞的關係, 反而多了不必要的選字.
> 但是若仔細觀察,
> 就是其實在做最後的 MakePreferInterval, 其實可以若不去修改之前的詞組(interval), 反而正確率會更高..
>

hi wiz,

最近 libchewing 實做了整合 mmseg[1] 與酷音原本頻率統計的加權演算法,同時 test/ 目錄底下的
simulate.sh 也允許依據給定的輸入 (key stroke),模擬/重現 libchewing API 的運作。

這樣一來,下述的演算法或許可進一步實做並分析討論:

> 整理歸納後,規則如下:
> 整個edit buffer裡面有n 個 intervals, 當在做MakePreferInterval的時候
> 1. 只對 n 和 n - 1 這兩個intervals做變動
> 2. 若前一次輸入的第 n 個 interval 和下一次輸入的 n + 1 interval 有重疊 (overlap), 這不要去變動之
> 前已經選好的字
>

Regards,
-jserv

[1] http://technology.chtsai.org/mmseg/

Reply all
Reply to author
Forward
0 new messages