如果我正在編寫一段軟件,試圖預測用戶打算用什麼詞輸入下一個使用用戶鍵入的前兩個單詞,我會創建兩個表。在<n個表中存儲n-gram數據庫
像這樣:
== 1-gram table ==
Token | NextWord | Frequency
------+----------+-----------
"I" | "like" | 15
"I" | "hate" | 20
== 2-gram table ==
Token | NextWord | Frequency
---------+------------+-----------
"I like" | "apples" | 8
"I like" | "tomatoes" | 12
"I hate" | "tomatoes" | 20
"I hate" | "apples" | 2
根據這個實例執行力度用戶鍵入「I」和軟件,使用上述數據庫,預測下一個單詞的用戶將會類型是「恨」。如果用戶輸入「憎恨」,那麼軟件將預測用戶打算輸入的下一個單詞是「西紅柿」。
但是,這種實現需要我選擇考慮的每個附加n元表。如果我決定在預測下一個單詞時想考慮前面的5或6個單詞,那麼我需要5-6個表格,並且每個n-gram的空間呈指數級增長。
什麼是最好的方式來表示這隻有一個或兩個表,沒有我能支持的n-gram數量的上限?
+1表示散列。如果您使用的是大型語料庫或長字符串,那麼使用散列將是必不可少的*以獲得足夠的性能。由於不可避免的碰撞,你仍然需要保留原始字符串,唉。 – egrunin 2010-05-18 07:14:10